日期:2014-05-16 浏览次数:20466 次
??? ?? ?? 在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中将陆
续梳理出来,"予人余香,手留玫瑰"地贴在这里, 敬请关注.