软件开发中,默认习惯的坏处

原创 2007年10月08日 17:29:00

前几天在配置hibernate的时候,遇到了一个问题,问题如下:

org.hibernate.HibernateException: G:/project_name/WEB-INF/hibernate.cfg.xml not
found
        at org.hibernate.cfg.Configuration.getConfigurationInputStream(Configura
tion.java:1087)
        at org.hibernate.cfg.Configuration.configure(Configuration.java:1111)
        at com.xilinhot.puma.HibernateSessionFactory.initSessionFactory(Hibernat
eSessionFactory.java:58)
        at com.xilinhot.puma.HibernateSessionFactory.setConfigFileLocation(Hiber
nateSessionFactory.java:94)

该文件确确实实是存在的,为何找不到呢?习惯性的先Google了一下,反应该问题的人确实不少,但是,没有实质性的解决问题,什么更改hibernate.cfg.xml的字符编码了等等,简直是一派胡言,org.hibernate.HibernateException: G:/project_name/WEB-INF/hibernate.cfg.xml not found 实际就是 java.io.FileNotFoundException 另一种描述而已。

看来,还是要看看hibernate的源代码,找到org.hibernate.util.ConfigHelper文件,不看还好,看了真是感觉好笑,获取hibernate.cfg.xml文件,是默认在java Package里查找的:

public static InputStream getResourceAsStream(String resource) {
  String stripped = resource.startsWith("/") ?
    resource.substring(1) : resource;

  InputStream stream = null;
  ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
  if (classLoader!=null) {
   stream = classLoader.getResourceAsStream( stripped );
  }
  if ( stream == null ) {
   stream = Environment.class.getResourceAsStream( resource );
  }
  if ( stream == null ) {
   stream = Environment.class.getClassLoader().getResourceAsStream( stripped );
  }
  if ( stream == null ) {
   throw new HibernateException( resource + " not found" );
  }
  return stream;
 }

呵呵,用的都是java.lang.Class或者java.lang.ClassLoader来获取InputStream对象的,在classpath路径外部的怎么可能找到呢?!得了,还是改改,重新编译一下吧,不然,想更改hibernate.cfg.xml文件里的数据时,还要重新编译class文件、打包jar文件,没必要。更新如下:

public static InputStream getResourceAsStream(String resource) {
  String stripped = resource.startsWith("/") ?
    resource.substring(1) : resource;

  InputStream stream = null;
  ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
  if (classLoader!=null) {
   stream = classLoader.getResourceAsStream( stripped );
  }
  if ( stream == null ) {
   stream = Environment.class.getResourceAsStream( resource );
  }
  if ( stream == null ) {
   stream = Environment.class.getClassLoader().getResourceAsStream( stripped );
  }
  //zhiyan modify at 2007.09.17 10:35
  //add this step,can put the hibernate.cfg.xml anywhere
  if ( stream == null ) {
   try {
    stream = new java.io.FileInputStream( resource );
   } catch (java.io.FileNotFoundException fnfe) {
    stream = null;
   }
  }
  if ( stream == null ) {
   throw new HibernateException( resource + " not found" );
  }
  return stream;
 }

将hibernate源文件编译、打包jar,将hibernate3.jar重新覆盖原来的文件。

重新进行测试,一切OK。

从整个事件来看,都是默认习惯惹得祸。每次都是默认放在project/src下的,编译、打包成jar后,hibernate.cfg.xml会放在project-1.1.jar里。

这样好了,自己的hibernate.cfg.xml可以随处放了。 

如何跨文件使用C++中的const类型指针

通过二个文件:main.cpp , fun.cpp 来测试const类型指针的跨文件使用// main.cpp#include char * const str=new char[100];void ...
  • shi_hang_nk
  • shi_hang_nk
  • 2001-02-05 21:37:00
  • 435

优秀软件开发人员的五个好习惯

优秀软件开发人员的五个好习惯 —— 译自 java.netFive Habits of Highly Profitable Software Developers by Robert J. Mille...
  • xfans12000
  • xfans12000
  • 2007-03-12 21:16:00
  • 870

优秀程序员的良好的学习方式,特征,生活和学习的习惯

优秀程序员的良好的学习方式,特征,生活和学习的习惯
  • txl16211
  • txl16211
  • 2015-01-07 19:50:53
  • 1490

程序猿开发生活的十大禁忌

程序员在编程的时候难免会犯错误,但如果不从错误中吸取教训,那么习惯成自然,你会经常犯错的。从错误中不断的学习,锻炼好的行为习惯有助于事业上的稳定。 程序员在编程的时候难免会犯错误,但如果不从错误...
  • yang_best
  • yang_best
  • 2014-12-08 11:02:56
  • 1416

最危害程序员职业生涯的三大观念

蓦然回首自己做软件开发这个行业已经十年了,这十年中我获得了很多,技术能力、培训、出国、大公司的经历,还有很多很好的朋友。但再仔细一想,这十年中我至少浪费了五年时间,这五年可以足够让自己成长为一个优秀的...
  • luohai859
  • luohai859
  • 2016-11-22 13:40:47
  • 316

PAT 1074. 宇宙无敌加法器(20)-PAT乙级真题

1074. 宇宙无敌加法器(20) 地球人习惯使用十进制数,并且默认一个数字的每一位都是十进制的。而在PAT星人开挂的世界里,每个数字的每一位都是不同进制的,这种神奇的数字称为“PAT数”。每个...
  • liuchuo
  • liuchuo
  • 2018-01-15 17:50:15
  • 204

优秀的编码习惯

此文为本人记录文,记录在开发过程中一些注意事项和他人建议,不定时更新。 (适用于:初踏入前端开发行业人群) 1、注释 /* XXXXXXX(功能) XXX(人名) 2015-11-11(时间) *...
  • acm765152844
  • acm765152844
  • 2016-02-20 23:43:21
  • 675

用递归的方法实现输出一个十进制数的每一位

#include int print_every_bit(int n) { while(n!=0) { int i=0; i=n%10; n/=10; printf("%d ",i); print...
  • Dakuan_chen
  • Dakuan_chen
  • 2016-10-11 08:53:55
  • 832

几个问题(八)-------使用静态工厂方法的好处和坏处

  • beidou321
  • beidou321
  • 2010-03-15 20:04:00
  • 3868

读入一个十进制数存成可直接使用的数字

汇编真蛋疼。。。。。。。。。但还蛮有意思的   ?View Code ASM   1 2 ...
  • Dark_Scope
  • Dark_Scope
  • 2012-11-09 12:40:03
  • 768
收藏助手
不良信息举报
您举报文章:软件开发中,默认习惯的坏处
举报原因:
原因补充:

(最多只允许输入30个字)