我有一个hibernate应用程序,它直接使用Java事务API资源。我试图使用UserTransaction来完成一些基本的数据库事务
UserTransaction接口定义了允许应用程序显式管理事务边界的方法。
在hibernate.cfg.xml文件中,我具有以下属性:
<session-factory>
<property name="show_sql">true</property>
<property name="connection.datasource">java:comp/env/myDataSource</property>
<property name="jta.UserTransaction">java:comp/UserTransaction</property>
<property name="transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</property>在应用程序的web.xml中,UserTransaction设置在<resource-env-ref>中。
<resource-env-ref>
<description>Object factory for MyBean instances.</description>
<resource-env-ref-name>UserTransaction</resource-env-ref-name>
<resource-env-ref-type>javax.transaction.UserTransaction</resource-env-ref-type>
</resource-env-ref>在代码中,我尝试使用UserTransaction的JNDI名称来查找带有InitialContext的
public UserTransaction getTransactionContext()
throws Exception
{
if (this.ut == null) {
ut = (UserTransaction)new InitialContext().lookup("java:comp/UserTransaction");
}
return ut;
} 但是,将返回以下异常:
03:27:37,530 ERROR [someServlet:555] Error in someMethod
javax.naming.NamingException: Cannot create resource instance
at org.apache.naming.factory.ResourceEnvFactory.getObjectInstance(ResourceEnvFactory.java:117)
at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:321)
at org.apache.naming.NamingContext.lookup(NamingContext.java:843)
at org.apache.naming.NamingContext.lookup(NamingContext.java:154)
at org.apache.naming.NamingContext.lookup(NamingContext.java:831)
at org.apache.naming.NamingContext.lookup(NamingContext.java:154)
at org.apache.naming.NamingContext.lookup(NamingContext.java:831)
at org.apache.naming.NamingContext.lookup(NamingContext.java:168)
at org.apache.naming.SelectorContext.lookup(SelectorContext.java:158)这个应用程序是从运行noramlly的Weblogic服务器移植到Apache的;也就是说,我是否需要在context.xml中定义context.xml才能使getTransactionContext()找到它?如果没有,如何在代码中适当地返回UserTransaction?
https://stackoverflow.com/questions/26133663
复制相似问题