我正在使用WebSphere 8的可嵌入EJB容器,使用JUnit4为我的EJB编写一些单元测试。我在MyEclipse中有一个简单的java项目,我引用了EJB项目。 EJB项目使用Hibernate 3.5进行持久化,hibernate.cfg.xml中的数据源JNDI是jdbc / connectionname,它在可嵌入容器的属性中定义。
可嵌入容器成功启动,可以成功找到EJB并且也可以成功找到数据源。但是,在EJB方法的任何第一个方法调用中,都会出现以下异常:
org.hibernate.HibernateException: java.lang.ClassNotFoundException: com.ibm.websphere.jtaextensions.SynchronizationCallback
at org.hibernate.transaction.WebSphereExtendedJTATransactionLookup$TransactionManagerAdapter.<init>(WebSphereExtendedJTATransactionLookup.java:108)
at org.hibernate.transaction.WebSphereExtendedJTATransactionLookup$TransactionManagerAdapter.<init>(WebSphereExtendedJTATransactionLookup.java:88)
at org.hibernate.transaction.WebSphereExtendedJTATransactionLookup.getTransactionManager(WebSphereExtendedJTATransactionLookup.java:70)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:367)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1341)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
任何建议都将受到赞赏。
答案 0 :(得分:1)
WebSphere Application Server中的可嵌入EJB容器不支持ExtendedJTATransaction,但它支持java:comp / TransactionSynchronizationRegistry。我不熟悉Hibernate,但似乎应该更新它以在可用时使用TransactionSynchronizationRegistry。