Стеклянная рыба не набирает свойства POSTGRES - PullRequest
1 голос
/ 12 июля 2011

У меня EJB3 Entity bean, который должен быть сохранен в Postgres DB. Я использую сервер приложений Glassfish 3 для развертывания EJB.

Когда я выполняю вызов EJB, используя мой веб-слой, выполняется вызов БД, но Glassfish выдает следующее исключение

  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)

чья основная причина

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.

Соединение с БД Postgres установлено, и я могу просматривать данные с помощью инструмента pgAdmin. Я вижу, как запрос выполняется в журналах. Из журналов видно, что Glassfish использует клиент Derby для получения соединения.

Есть ли какая-либо конфигурация, которую мне нужно сделать в 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.

РЕДАКТИРОВАТЬ: РЕШЕНИЕ

Я прочитал об этом немного больше и понял, что делал ошибку в файле 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 и настроил пул соединений JDBC и ресурсы JDBC из дерева CommonTasks-> Resources-> JDBC

Теперь я могу получить детали.

1 Ответ

0 голосов
/ 13 июля 2011

Я прочитал об этом немного больше и понял, что делал ошибку в файле 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 и настроил пул соединений JDBC и ресурсы JDBC из дерева CommonTasks-> Resources-> JDBC

Теперь я могу получить подробную информацию.

...