0

我的 Quartz batchjob 应用程序抛出以下错误:

org.hibernate.engine.jndi.JndiException:无法查找 JNDI 名称 [java:comp/websphere/ExtendedJTATransaction


下面是我的配置:

<bean id="sessionFactoryTxt"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">

<property name="dataSource"><ref bean="jndiDatasourceTxt" /></property>

<property name="mappingLocations">
    <list>
        <value>classpath:com/nec/asia/epid/config/hibernate/*.hbm.xml</value>
    </list>
</property>
<property name="hibernateProperties">
    <props>                 
        <prop key="hibernate.dialect">${hibernate.dialect}</prop>
        <prop key="hibernate.jdbc.batch_size">${hibernate.jdbc.batch_size}</prop>
        <prop key="hibernate.cache.use_second_level_cache">${hibernate.cache.use_second_level_cache}</prop>                                 
        <prop key="hibernate.bytecode.use_reflection_optimizer">${hibernate.bytecode.use_reflection_optimizer}</prop>
        <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
        <prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
        <prop key="hibernate.use_sql_comments">${hibernate.use_sql_comments}</prop>                 
        <prop key="hibernate.connection.isolation">3</prop> 
        <prop key="hibernate.current_session_context_class">jta</prop> 
        <prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</prop>  
        <prop key="hibernate.transaction.manager_lookup_class">com.atomikos.icatch.jta.hibernate3.TransactionManagerLookup</prop>                       

        <prop key="hibernate.cache.provider_class">org.hibernate.cache.OSCacheProvider</prop>
        <prop key="hibernate.validator.apply_to_ddl">false</prop>
        <prop key="hibernate.validator.autoregister_listeners">false</prop>         

    </props>
</property>    
<property name="jtaTransactionManager" ref="transactionManager"></property>   

上述错误仅在我使用WebSphere(XA DataSource)时发生,使用Jboss时没有问题。

下面是我的开发。环境:
1. WebSphere + SQL Server (XA DataSource) -> 出现上述问题
2. WebSphere + Oracle (XA DataSource) -> 出现上述问题
3. JBoss + SQL Server (XA DataSource) -> My quartz app工作没有任何错误
4. JBoss + Oracle (XA DataSource) -> 我的石英应用程序工作没有任何错误

注意:
只有在使用WebSphere时才会出现问题(使用JBoss时没有问题),请帮助!!!


以下是完整的堆栈跟踪:

    at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:112)
at org.quartz.core.JobRunShell.run(JobRunShell.java:223)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549)

RepoBiometricFrTempDaoHibernateImpl.load(RepoBiometricFrTempDaoHibernateImpl.java:29) ... 62 更多原因:javax.naming.ConfigurationException:无法完成对“java:”名称的 JNDI 操作,因为服务器运行时无法将操作的线程与任何 J2EE 应用程序组件。当使用“java:”名称的 JNDI 客户端未在服务器应用程序请求的线程上执行时,可能会发生这种情况。确保 J2EE 应用程序不会在静态代码块或由该 J2EE 应用程序创建的线程中对“java:”名称执行 JNDI 操作。此类代码不一定在服务器应用程序请求的线程上运行,因此不受“java:”名称上的 JNDI 操作的支持。[根异常是 javax.naming.NameNotFoundException:在 com.ibm.ws.naming.java.javaURLContextImpl.lookup( javaURLContextImpl.java:399) 在 com.ibm.ws.naming.java.javaURLContextRoot.lookup(javaURLContextRoot.java:221) 在 javax.naming.InitialContext.lookup(Unknown Source) 在 org.hibernate.engine.jndi.internal。 JndiServiceImpl.locate(JndiServiceImpl.java:114) ... 75 更多原因:javax.naming.NameNotFoundException:在上下文“java:”中找不到名称 comp/websphere。在 com.ibm.ws.naming.ipbase.NameSpace.getParentCtxInternal(NameSpace.java:1837) 在 com.ibm.ws.naming.ipbase.NameSpace.lookupInternal(NameSpace.java:1166) 在 com.ibm.ws.naming .ipbase.NameSpace.lookup(NameSpace.java:

4

0 回答 0