Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 冬眠可以';t在JBoss中使用jndi打开与oracle 10g的连接_Hibernate_Jboss_Connection_Jndi - Fatal编程技术网

Hibernate 冬眠可以';t在JBoss中使用jndi打开与oracle 10g的连接

Hibernate 冬眠可以';t在JBoss中使用jndi打开与oracle 10g的连接,hibernate,jboss,connection,jndi,Hibernate,Jboss,Connection,Jndi,我有一个运行在JBoss4.2.3上的应用程序,它连接到Oracle 10g DB。我们重构了应用程序以使用SpringRoo。在尝试配置jndi之前,我们使用了常规的db连接字符串,这很好。但是现在我们尝试使用jndi,当JBoss注册jndi并创建数据源bean时,当hibernate实际上必须打开连接时,它无法打开 这是持久化单元的配置 <persistence-unit name="persistenceUnitDev" transaction-type="RESOURCE_LOC

我有一个运行在JBoss4.2.3上的应用程序,它连接到Oracle 10g DB。我们重构了应用程序以使用SpringRoo。在尝试配置jndi之前,我们使用了常规的db连接字符串,这很好。但是现在我们尝试使用jndi,当JBoss注册jndi并创建数据源bean时,当hibernate实际上必须打开连接时,它无法打开

这是持久化单元的配置

<persistence-unit name="persistenceUnitDev" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
        <!-- value="create" to build a new database on each run; value="update" to modify an existing database; value="create-drop" means the same as "create" but also drops tables when Hibernate closes; value="validate" makes no changes to the database -->
        <property name="hibernate.hbm2ddl.auto" value="update"/>
        <property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy"/>
        <property name="hibernate.connection.charSet" value="UTF-8"/>
        <property name="hibernate.show_sql" value="true"/>
        <property name="hibernate.connection.datasource" value="java:jdbc.DataSourceDev"/>
        <property name="hibernate.validator.apply_to_ddl" value="false" />
        <property name="hibernate.validator.autoregister_listeners" value="false" />
        <property name="jboss.entity.manager.jndi.name" value="java:jdbc.DataSourceDev"/>
        <property name="jboss.entity.manager.factory.jndi.name" value="java:/Manager1Factory"/>
    </properties>
</persistence-unit>

org.hibernate.ejb.HibernatePersistence
hibernate.cfg.xml

<hibernate-configuration>
<session-factory>
    <property name="connection.datasource">java:jdbc.DataSourceDev</property>
    <property name="connection.autocommit">true</property>
    <property name="connection.release_mode">after_transaction</property>
    <property name="show_sql">true</property>
    <property name="format_sql">true</property>
    <property name="use_sql_comments">true</property>
    <!--DB schema will be updated if needed -->
    <property name="hbm2ddl.auto">update</property>
</session-factory>
</hibernate-configuration>

java:jdbc.DataSourceDev
真的
事后交易
真的
真的
真的
更新
应用程序上下文定义db bean:

<jee:jndi-lookup id="jndiDataSource2" jndi-name="${database.jndiName}"/>


<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory">
    <property name="persistenceUnitName" value="${hibernate.persistenceunit}"/>
    <property name="dataSource" ref="jndiDataSource2"/>
</bean>

我不知道为什么hibernate似乎无法打开连接

编辑:这是日志:

2011-12-05 12:34:51577尝试获取新连接时警告[org.jboss.resource.connectionmanager.JBossManagedConnectionPool]可丢弃:null org.jboss.resource.JBossResourceException:无法创建连接;-嵌套可丢弃:(java.sql.SQLException:Io异常:网络适配器无法建立连接) 位于org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.createManagedConnection(LocalManagedConnectionFactory.java:190) 位于org.jboss.resource.connectionmanager.InternalManagedConnectionPool.createConnectionEventListener(InternalManagedConnectionPool.java:619) 位于org.jboss.resource.connectionmanager.InternalManagedConnectionPool.getConnection(InternalManagedConnectionPool.java:264) 位于org.jboss.resource.connectionmanager.JBossManagedConnectionPool$BasePool.getConnection(JBossManagedConnectionPool.java:575) 位于org.jboss.resource.connectionmanager.BaseConnectionManager2.getManagedConnection(BaseConnectionManager2.java:347) 位于org.jboss.resource.connectionmanager.TxConnectionManager.getManagedConnection(TxConnectionManager.java:330) 位于org.jboss.resource.connectionmanager.BaseConnectionManager2.allocateConnection(BaseConnectionManager2.java:402) 位于org.jboss.resource.connectionmanager.BaseConnectionManager2$ConnectionManagerProxy.allocateConnection(BaseConnectionManager2.java:849)

原因:java.sql.SQLException:Io异常:网络适配器无法建立连接 位于oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) 位于oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146) 位于oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:255) 位于oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:387) 位于oracle.jdbc.driver.PhysicalConnection.(PhysicalConnection.java:441) 位于oracle.jdbc.driver.T4CConnection(T4CConnection.java:165) 位于oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35) 位于oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801)
在org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.createManagedConnection(LocalManagedConnectionFactory.java:172)

下面是我的配置

   <persistence-unit name="persistenceUnitDev" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <properties>
        <property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy"/>
        <property name="hibernate.connection.charSet" value="UTF-8"/>
        <property name="hibernate.connection.datasource" value="dbjndiName"/>
        <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
        <property name="hibernate.connection.autocommit" value="true"/>
        <property name="hibernate.connection.release_mode" value="after_transaction"/>
        <property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver"/>
        <property name="show_sql" value="true"/>
        <property name="format_sql" value="true"/>
        <property name="use_sql_comments" value="true"/>
        <!--DB schema will be updated if needed -->
        <property name="hbm2ddl.auto" value="create"/>
        <property name="hibernate.connection.provider_class" value="org.hibernate.connection.DatasourceConnectionProvider"/>
    </properties>
</persistence-unit>

org.hibernate.ejb.HibernatePersistence
然后hibernate.cfg.xml是空的

我的应用程序上下文由以下bean定义:

<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>

<bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>

<tx:annotation-driven mode="aspectj" transaction-manager="transactionManager"/>

<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory">
    <property name="persistenceUnitName" value="persistenceUnitDev"/>
    <property name="dataSource" ref="dataSource"/>
</bean>

<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
    <property name="environment">
        <props>
            <prop key="java.naming.factory.initial">com.sun.jndi.fscontext.RefFSContextFactory</prop>
            <prop key="java.naming.provider.url">file:c:/temp</prop>
        </props>
    </property>
</bean>

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="resourceRef" value="true"/>
    <property name="jndiName" value="dbjndiName"/>
    <property name="lookupOnStartup" value="false"/>
    <property name="cache" value="true"/>
    <property name="proxyInterface" value="javax.sql.DataSource"/>
</bean>

com.sun.jndi.fscontext.RefFSContextFactory
文件:c:/temp

我认为在这种情况下,这是一种少即是多的情况,而不是使用Java EE JNDI查找和选择正确的数据源bean类。

我不知道为什么您没有发布任何异常或日志跟踪。检查您的问题是否与此相同,