我有一个Spring应用程序,它使用hibernate,Spring事务管理和位于Weblogic服务器上的JNDI数据源。
应用程序在weblogic 上部署时工作正常,但是当在本地作为独立的Java应用程序(没有容器)运行时,它会引发跟随错误 -
org.hibernate.service.jndi.JndiException:解析JNDI名称时出错 [使用javax.transaction.TransactionManager] javax.naming.NoInitialContextException:需要在中指定类名 环境或系统属性
以下是我在设置中使用的事务管理器,数据源和hibernate配置:
<bean id="transactionManager" class="org.springframework.transaction.jta.WebLogicJtaTransactionManager"></bean>
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="jdbc/mydatasource"/>
<property name="jndiEnvironment" ref="weblogicJndiEnv"></property>
</bean>
<util:properties id="weblogicJndiEnv">
<prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop>
<prop key="java.naming.security.principal">weblogic</prop>
<prop key="java.naming.security.credentials">weblogic</prop>
<prop key="java.naming.provider.url">t3://#{ systemProperties['listenurl'] }</prop>
</util:properties>
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="jtaTransactionManager" ref="transactionManager"></property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
<prop key="hibernate.current_session_context_class">jta</prop>
<prop key="hibernate.transaction.factory_class">org.hibernate.transaction.CMTTransactionFactory</prop>
<prop key="hibernate.transaction.jta.platform">org.hibernate.service.jta.platform.internal.WeblogicJtaPlatform</prop>
<prop key="hibernate.connection.release_mode">auto</prop>
<prop key="hibernate.transaction.auto_close_session">true</prop>
</props>
</property>
<property name="packagesToScan" value="abc.xyz" />
</bean>
以上配置中是否有任何遗漏?