[jbpm]jBPM(九):jBPM的webSale在Tomcat下怎么连上的数据库?

来源:互联网 发布:linux vi 退出不保存 编辑:程序博客网 时间:2024/06/02 16:55

在jBPM(八): 也说jBPM + Tomcat + MySQL 里, 介绍了如何配置jBPM自带例子webSale运行在Tomcat中, 也陈述了这样一个实事: 到目前为止,还没发现问题,尽管跟网上介绍的繁琐配置不一样. jBPM(八)中的配置一个很大的不同点就是没有在Tomcat中配置JNDI,那么我们不意要问:webSale是怎么连的数据库呢?

  翻遍了webSale的代码也没找到类似new org.hibernate.cfg.Configuration().configure()这样的代码,而且更为神奇的是打开Hibernate的 Configuration类源码在关键地方(Configuration()和configure())设置了断点,Tomcat启动时竟然没停! Tomcat启动后随便点webSale里的login等操作,前面设置的断点也没停!

  这就是传说中的闹鬼?!

  为了"捉鬼", 我把jBPM(八): 也说jBPM + Tomcat + MySQL 里第四步拷到Eclipse里的hibernate.cfg.xml改了数据库连接, 心想: 这下看你webSale怎么连? 给你一个错的hibernate.connection.url. 果然没有连上,报"Could not obtain connection metadata java.sql.SQLException:Access denied for user 'root'@'localhost' (using password: YES)"异常信息了. 呵呵, 看来这个世界上没鬼.

  好吧, 既然没鬼了,那就按咱们先辈传来的唯物主义思想来查问题吧. 于是看了, 上面改hibernate.connection.url时的异常栈, 发现这么一条有用的执行语句:

at org.jbpm.persistence.db.DbPersistenceServiceFactory.getSessionFactory(DbPersistenceServiceFactory.java:91) 

  于是在Eclipse中Ctrl+Shift+T(打开源码的快捷方式)找到DbPersistenceServiceFactory类的第91行,原来有这么一条语句:

sessionFactory = getConfiguration().buildSessionFactory();

  这个buildSessionFactory()倒是自写HibernateUtil中的很常用的方法, 有门了, 于顺藤摸瓜地看getConfiguration()这个方法的定义,再进而找到了HibernateHelper这么个类,呵呵, 发现亲人了! 这不跟自写的HibernateUtil类很像么?

  于是在这个HibernateHelper类里看到盼望已久的代码:

Configuration configuration = new Configuration();.........log.debug("using default hibernate configuration resource (hibernate.cfg.xml)");configuration.configure();

  到这里, 问题解决了95%了,再剩下的一个问题就是:是谁在调用上面红色代码的? webSale中体现在哪? 于是又一番顺藤摸瓜后, 发现是web.xml中配置的JbpmThreadsServlet类在init方法里以启动新线程的方式做了调用.

  至此, "jBPM的webSale在Tomcat下怎么连数据库?"问题算是100%解决了, 不过在这个问题的解决送给我两个意外收获:JbpmThreadsServlet的妙用和HibernateUtil的职业写法,在后续的blog中将陆续梳理出来,"予人余香,手留玫瑰"地贴在这里, 敬请关注.

原创粉丝点击