2013-02-05 87 views
0

好吧,这让我很难过。 RAD在websphere上运行了一个webapp项目,该项目使用项目引用来访问包含所有模型代码(包括我的休眠逻辑)的lib项目。 lib目录的Junit测试正常工作。 webapp项目中的junit测试,但在J2EE容器之外运行效果良好。但是,一旦我们在J2EE容器中运行,相同的代码会使JVM崩溃。Hibernate在Session.createQuery上崩溃jvm

请注意,并非所有的代码都这样做。更新正常。然而,石英进程死于sessions.createQuery,并且web服务调用死于createQuery。当我说“死”我的意思是整个JVM关闭,喷出以下转储到控制台:

Unhandled exception 
Type=Unhandled trap vmState=0x00040000 
J9Generic_Signal_Number=00000040 ExceptionCode=c00000fd ExceptionAddress=003A065D ContextFlags=0001007f 
Handler1=0037A0C0 Handler2=003DC000 
EDI=0037F178 ESI=26EDEB30 EAX=26EDEC00 EBX=00006030 
ECX=33594900 EDX=33594900 
EIP=003A065D ESP=2DB63000 EBP=002B2828 EFLAGS=00010206 
GS=002B FS=0053 ES=002B DS=002B 
Module=C:\Program Files (x86)\IBM\SDP\runtimes\base_v7\java\jre\bin\j9vm24.dll 
Module_base_address=00370000 Offset_in_DLL=0003065d 
Target=2_40_20110216_075791 (Windows 7 6.1 build 7601 Service Pack 1) 
CPU=x86 (4 logical CPUs) (0x1f890f000 RAM) 
----------- Stack Backtrace ----------- 

的查询似乎是正确的(正如我所说,他们的J2EE容器之外工作)。如果有帮助,这里就是其中之一:

Query sql = s.createQuery("from Type t where t.typeCode=? and t.applicationCode=? "); 

我们以前从未见过这一点,并没有得到很多护目镜牵引。我们使用的是Windows 7,RAD 8,WAS 7.0.0.17,Hibernate 4.1.9,DB2 XA数据源,而不是我认为它很重要,但我们已将org.springframework.orm.hibernate4.HibernateTransactionManager作为我们的事务经理。

任何想法?

回答

0

已解决。这是交易 - 这只会在调试模式下发生。在运行模式下,我们实际上在antlr类中得到了一个N​​oClassDefError。我们没有将antler移动到web-inf/lib中,但它在lib项目的依赖项中是这样的,这就是Junit运行的原因。一旦复制这个问题就消失了。我猜antlr是Hibernate的依赖。

这里的一个很大的秘密就是为什么调试器会熔化JVM而不是给出一个例外,这会给我们一个解决问题的机会,但是我们已经超出了我们的问题。