Jboss加载不到数据库驱动问题解决过程记录

错误日志:

<pre name="code" class="plain">22:41:44,320 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 48) MSC000001: Failed to start service jboss.persistenceunit."itoo-exam-systemmanage-dictionary-ear.ear/itoo-exam-api-0.0.1-SNAPSHOT.jar#exam-entity": org.jboss.msc.service.StartException in service jboss.persistenceunit."itoo-exam-systemmanage-dictionary-ear.ear/itoo-exam-api-0.0.1-SNAPSHOT.jar#exam-entity": javax.persistence.PersistenceException: [PersistenceUnit: exam-entity] Unable to build EntityManagerFactory
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:103)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_51]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_51]
    at java.lang.Thread.run(Thread.java:744) [rt.jar:1.7.0_51]
    at org.jboss.threads.JBossThread.run(JBossThread.java:122) [jboss-threads-2.1.1.Final-redhat-1.jar:2.1.1.Final-redhat-1]
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: exam-entity] Unable to build EntityManagerFactory
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:924)
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:899)
    at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:76)
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.createContainerEntityManagerFactory(PersistenceUnitServiceImpl.java:200)
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.access$600(PersistenceUnitServiceImpl.java:57)
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:99)
    ... 4 more
Caused by: org.hibernate.service.classloading.spi.ClassLoadingException: Specified JDBC Driver com.mysql.jdbc.Driver could not be loaded
    at org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:111)
    at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:85)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:184)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:156)
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.buildJdbcConnectionAccess(JdbcServicesImpl.java:223)
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:89)
    at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:85)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:184)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:156)
    at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1825)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1783)
    at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:96)
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:914)
    ... 9 more
Caused by: org.hibernate.service.classloading.spi.ClassLoadingException: Unable to load class [com.mysql.jdbc.Driver]
    at org.hibernate.service.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:151)
    at org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:106)
    ... 21 more
Caused by: java.lang.ClassNotFoundException: Could not load requested class : com.mysql.jdbc.Driver
    at org.hibernate.service.classloading.internal.ClassLoaderServiceImpl$AggregatedClassLoader.findClass(ClassLoaderServiceImpl.java:318)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425) [rt.jar:1.7.0_51]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358) [rt.jar:1.7.0_51]
    at java.lang.Class.forName0(Native Method) [rt.jar:1.7.0_51]
    at java.lang.Class.forName(Class.java:270) [rt.jar:1.7.0_51]
    at org.hibernate.service.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:148)
    ... 22 more


 
 

分析原因及解决问题的过程:

1.Caused by: java.lang.ClassNotFoundException: Could notload requested class : com.mysql.jdbc.Driver

看到这一句时以为是少jar,后来各种尝试,试着把mysql-xxx.jar加载为ejb, 在web中引入mysql-xxx.jar等,都无功而返.

2.再仔细看错误发现是org.hibernate.service.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:148)

此时感觉是hibernate加载问题,通过org.hibernate.service.classloading.internal.ClassLoaderServiceImpl查找这个类,在项目中没有发现这个类.

通过ClassLoaderServiceImpl搜索发现org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl这个类.我们项目引用的是hibernate-core-4.3.7.Final.jar,在4.2.18.Final以前的的类路径是org.hibernate.service.classloading.internal.ClassLoaderServiceImpl,4.2.18.Final以后的类路径已经改为了org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.

此时感觉是hibernate-core版本冲突造成的问题,所以将hibernate所有版本都换成了4.2.18.Final,仍然报刚才的错误.

再后来干脆去掉对hibernate-core的引用,问题依然没解决.

3.再仔细看报错日志,及时我去掉了对hibernate-core的引用,问题依旧,说明jboss本身用了hibernate-core,通过日志中的org.hibernate.ejb.Ejb3Configuration我们还可以确定jboss自身引用了hibernate-entitymanager.jar.

此时在jboss的环境目录中搜索hibernate的有关jar终于找到了答案,回想起配置mysql和oracle的过程(http://blog.csdn.net/lk_blog/article/details/41774885),原来是这样.

修改D:\a_tools\jboss\jboss-eap-6.3\modules\system\layers\base\org\hibernate\main\module.xml文件,加入配置

<module name="com.mysql"/>终于搞定,这个问题花了我很多时间,把解决问题的过程记录下载吧,加深印象.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值