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

原创 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可以随处放了。 

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

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

java良好的编程习惯

java良好的编程习惯 1.应该在每个程序的开始都加上注释,解释该程序的目的、作者以及程序最后一次被修改的日期和时间。 2.使用空行和空格来增强程序的可读性。 3.按照约定,类名标识...
  • javaniuniu
  • javaniuniu
  • 2017年05月29日 15:15
  • 436

PAT 1074. 宇宙无敌加法器

PAT 1074. 宇宙无敌加法器(20)描述 地球人习惯使用十进制数,并且默认一个数字的每一位都是十进制的。而在PAT星人开挂的世界里,每个数字的每一位都是不同进制的,这种神奇的数字称为“PAT数”...
  • Yes_butter
  • Yes_butter
  • 2017年11月04日 11:28
  • 83

不要轻易挑战用户的习惯,否则会被用户打脸!

该引导用户习惯,还是顺应用户的习惯? 这是很多产品汪纠结的问题。 不要轻易挑战用户的习惯,否则会被用户打脸!除非...........
  • leangoo
  • leangoo
  • 2016年07月12日 10:41
  • 464

笔记:《高效能人士的七个习惯》第十章 习惯七 不断更新——平衡的自我提升的原则

1、人生最,值得的投资就是磨练自己,因为生活和服务人群都得靠自己,这是最珍贵的工具。 2、工作本身并不能带来经济上的安全感,具备良好的思考、学习、创造与适应能力,才能立于不败之地。拥有财富,并不代表...
  • icamera0
  • icamera0
  • 2016年01月21日 23:11
  • 1314

笔记:《高效能人士的七个习惯》第七章 习惯四 双赢思维——人际领导的原则

1、双赢者把生活看作一个合作的舞台,而不是一个角斗场。一般人看事情多用二分法:非强即弱,非胜即败。其实世界之大,人人都有足够的立足空间,他人之得不必就视为自己之失。 一、人际交往的六种模式 1、双...
  • icamera0
  • icamera0
  • 2016年01月17日 21:00
  • 1013

《微习惯》读后感

https://www.zhihu.com/question/23969798 最近在读一本很薄的小书《微习惯》,其中就提到几个很重要的观念,就是: 1. 人往往习惯性高估短期收益...
  • qq646748739
  • qq646748739
  • 2017年05月06日 00:48
  • 554

每日一记,养成记录的习惯

每个事物都有她在时间维度上的轨迹,当我们在适当的节点上留下一些痕迹,时间的轨迹就变得有形。养成作些记录的习惯,是有必要而且非常有意义的。         记录的方式有很多,几乎有日历功能的地方就有记...
  • triplestudio
  • triplestudio
  • 2015年12月20日 22:04
  • 1125

《高效能人士的七个习惯》总结

在网上看到这本书的时候,一直以为就只有短短几句话而已,前几天工资总监也向大家推荐了这本书,网上再搜了一下,没想到是一本足足有将近300页的书。看了一下书评,确实很高,一下子来了阅读的兴趣。 作者在正...
  • wiesin
  • wiesin
  • 2013年06月30日 17:38
  • 2215

从个人习惯到真正的好方法

每个人做事情都有些个人习惯,有些习惯特别强烈的,可能其程度就会上升到「癖」这个词。明朝散文家张岱在其文《陶庵梦忆》中留有名句:“人无癖不可与交,以其无深情也。”。这里的「癖」就是一个强烈的个人喜好与习...
  • mindfloating
  • mindfloating
  • 2017年05月21日 21:41
  • 8323
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:软件开发中,默认习惯的坏处
举报原因:
原因补充:

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