私はPostgres DBに保存されるEJB3 Entity Beanを持っています。 GlassFish 3 Appサーバーを使用してEJBを展開しています。GlassfishがPOSTGRESプロパティを取得しない
私は私のウェブ層を使用してEJBへの呼び出しを行う場合は、DBの呼び出しが行われたがGlassfishのは、次の例外をスローしているその根本原因
Caused by: org.hibernate.exception.JDBCConnectionException: could not inspect JDBC autocommit mode
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:99)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52)
at org.hibernate.jdbc.JDBCContext.afterNontransactionalQuery(JDBCContext.java:296)
at org.hibernate.impl.SessionImpl.afterOperation(SessionImpl.java:595)
at org.hibernate.impl.SessionImpl.get(SessionImpl.java:1010)
at org.hibernate.impl.SessionImpl.get(SessionImpl.java:998)
at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:614)
... 96 more
Caused by: java.sql.SQLNonTransientConnectionException: No current connection.
at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown Source)
at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source)
at org.apache.derby.client.am.Connection.getAutoCommit(Unknown Source)
at com.sun.gjc.spi.base.ConnectionHolder.getAutoCommit(ConnectionHolder.java:307)
at org.hibernate.jdbc.ConnectionManager.isAutoCommit(ConnectionManager.java:212)
at org.hibernate.jdbc.JDBCContext.afterNontransactionalQuery(JDBCContext.java:287)
... 100 more
Caused by: org.apache.derby.client.am.SqlException: No current connection.
への接続である
javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=135;_ThreadName=Thread-1;|javax.persistence.PersistenceException: org.hibernate.exception.JDBCConnectionException: could not inspect JDBC autocommit mode
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1215)
at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:635)
at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:589)
at com.cricinfo.session.service.PlayerService.getPlayer(PlayerService.java:41)
Postgres DBが起動していて、pgAdminツールを使用してデータを表示できます。私は、クエリがログで実行されているのを見ることができます。ログから、Glassfishがダービークライアントを使用して接続をフェッチしていることがわかります。
Glassfishで必要な設定はありますか?
persistence.xmlのは、次のとおりです。
<persistence-unit name="PlayerApp" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.cricinfo.domain.Player</class>
<properties>
<property name="hibernate.connection.driver_class" value="org.postgresql.Driver"
/> <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"
/> <property name="hibernate.hbm2ddl.auto" value="update" /> <property name="hibernate.connection.url"
value="jdbc:postgresql://localhost:5432/PlayerAppDB" /> <property name="hibernate.show_sql"
value="true" /> <property name="hibernate.format_sql" value="true" /> <property
name="hibernate.connection.username" value="postgres" /> <property name="hibernate.connection.password"
value="postgres" />
</properties>
</persistence-unit>
私は直接のEntityManagerFactoryを使用するスタンドアロンクラスを使用してデータを永続化して取得することができています。
EDIT:SOLUTION
私はもう少しそれについて読んで、私はpersitence.xmlで間違いをしていたことに気づきました。今、persistence.xmlのは、次のようになります。
<persistence-unit name="PlayerApp" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>jdbc/DefaultDS</jta-data-source>
<class>com.cricinfo.domain.Player</class>
</persistence-unit>
トランザクション・タイプは、JTAに作られたとデータソースではなく、接続プロパティを使用しました。
は、私はまた、GlassFish管理コンソールにログインし、私は今の詳細を取得することができる午前ツリーCommonTasks->リソース - > JDBC
からJDBC接続プールとJDBCリソースを設定しました。