2011-12-05 5 views
1

JBoss 4.2.3で動作し、Oracle 10g DBに接続するアプリケーションがあります。我々は、スプリングロウを使用するようにアプリケーションをリファクタリングしました。 jndiを設定する前に、通常のdb接続文字列を使用していましたが、問題ありませんでした。しかし今、jndiを使用しようとしていますが、JBossがjndiを登録してデータソースBeanを作成しているときに、hibernateが実際に接続を開く必要があるときに開くことができません。JBossでjndiを使用してOracle 10gとの接続を開くことができません

これは、永続ユニットのため

<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> 

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> 

アプリケーションコンテキストは、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> 

私は途方に暮れてよハイバーネーションが接続を開くことができないように見える理由について。

編集:これはログです:

2011-12-05 12:34:ヌル ORG:新しい接続を取得しようとしたときに51577は、[org.jboss.resource.connectionmanager.JBossManagedConnectionPool]のThrowableをWARN。 jboss.resource.JBossResourceException:接続を作成できませんでした。 - ネストされたスロー可能:(java.sql.SQLException:Io例外:ネットワークアダプタが接続を確立できませんでした) at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.createManagedConnection(LocalManagedConnectionFactory.java:190) at org .jboss.resource.connectionmanager.InternalManagedConnectionPool.createConnectionEventListener(InternalManagedConnectionPool.java:619) at org.jboss.resource.connectionmanager.InternalManagedConnectionPool.getConnection(InternalManagedConnectionPool.java:264) at org.jboss.resource.connectionmanager.JBossManagedConnectionPool $ BasePool .getConnection(JBossManagedConnectionPool.java:575) at org.jboss.resource.connectionmanager.BaseConnectionManager2.getManagedConnection(BaseConnectionManager2.java:347) at org.jboss.resource.connectionmanager.TxCon org.jboss.resource.connectionmanager.BaseConnectionManager2.allocateConnection(BaseConnectionManager2.java:402)org.jboss.resource.connectionmanager.BaseConnectionManager2 $ ConnectionManagerProxy.allocateConnectionで (BaseConnectionManager2.javaでnectionManager.getManagedConnection(TxConnectionManager.java:330) : 849)

< - カット - >

によって引き起こさ:ます。java.sql.SQLException:IO例外:ネットワークアダプタがoracle.jdbc.driver.DatabaseError.throwSqlExceptionで接続 を確立できませんでした(DatabaseError .java:112) oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)(oracle.jdbc.driver.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) at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.createManagedConnection(LocalManagedConnectionFactory。java:172)

+0

私は、例外やログのトレースを投稿しなかった理由を忘れています。 – duffymo

+0

問題がこれと同じかどうかを確認してください。http://stackoverflow.com/questions/2219417/jdbc-oracle-application-server-and-the-network-adapter-could-not-establish-the – Adi

答えて

0

私はこれを把握することができました:

以下は私の設定です。

<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> 

、その後hibernate.cfg.xmlのは、私のアプリケーションコンテキストは、以下の豆を使用して定義されて

空です:

<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> 

私は、この場合には、それは少なかったのケースだったと思いますJava EE JNDIルックアップを使用せず、適切なデータソースBeanクラスを選択するだけでなく、