2010-02-20 4 views
2

С двумя пользователей одновременно, используя мое простое приложение, я получаю исключение: ошибка cousingEclipse, ссылка JPA проблема

Error Code: 0 
Call: SELECT ID, NAME, IMAGE FROM GameObjectTable ORDER BY ID ASC 
Query: ReadAllQuery(referenceClass=GameObject sql="SELECT ID, NAME, IMAGE FROM GameObjectTable ORDER BY ID ASC") 

Caused by: org.postgresql.util.PSQLException: There was In/Out error while sending to server 
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:283) 
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:479) 
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:367) 
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:271) 
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeSelect(DatabaseAccessor.java:891) 
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:601) 
... 116 more 
Caused by: java.io.IOException: Stream closed 
at sun.nio.cs.StreamEncoder.ensureOpen(StreamEncoder.java:26) 
at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:121) 
at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:212) 
at org.postgresql.core.PGStream.flush(PGStream.java:507) 
at org.postgresql.core.v3.QueryExecutorImpl.sendSync(QueryExecutorImpl.java:1107) 
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:256) 
... 121 more 

Метод:

@Repository 
public class GameObjectDao{ 
    @PersistenceContext(type = PersistenceContextType.EXTENDED) 
    protected EntityManager entityManager; 
    @Transactional 
    public List<String> getGameObjectNames() { 
    return getEntityManager().createQuery("select g.name from GameObject as g").getResultList(); 
... 
} 

}

Spring менеджер транзакций:

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory"/> 
    <property name="dataSource" ref="dataSource"/> 
</bean> 
<tx:annotation-driven /> 

Что не так?

// EDIT

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="dataSource" ref="dataSource"/> 
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter"> 
      <property name="showSql" value="false"/> 
     </bean> 
    </property> 

    <property name="loadTimeWeaver"> 
     <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver"/> 
    </property> 
    <property name="jpaDialect"> 
     <bean class="org.springframework.orm.jpa.vendor.EclipseLinkJpaDialect "/> 
    </property> 

</bean> 

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="org.postgresql.Driver"/> 
    <property name="url" value="${db.url}"/> 
    <property name="username" value="${db.username}"/> 
    <property name="password" value="${db.password}"/> 
</bean> 

В MySQL ошибка отличается:

Caused by: java.lang.reflect.InvocationTargetException 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
at org.apache.wicket.session.DefaultPageFactory.createPage(DefaultPageFactory.java:192) 
... 69 more 
    Caused by: java.lang.NullPointerException 
at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:1646) 
at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:1622) 
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1332) 
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeSelect(DatabaseAccessor.java:891) 
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:601) 
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:529) 
at org.eclipse.persistence.internal.sessions.AbstractSession.executeCall(AbstractSession.java:914) 
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:205) 
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:191) 
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeSelectCall(DatasourceCallQueryMechanism.java:262) 
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.selectAllRows(DatasourceCallQueryMechanism.java:618) 
at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllRowsFromTable(ExpressionQueryMechanism.java:2537) 
at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllRows(ExpressionQueryMechanism.java:2496) 
at org.eclipse.persistence.queries.ReadAllQuery.executeObjectLevelReadQuery(ReadAllQuery.java:455) 
at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:997) 
at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:675) 
at org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:958) 
at org.eclipse.persistence.queries.ReadAllQuery.execute(ReadAllQuery.java:432) 
at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:1021) 
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2863) 
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1225) 
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1207) 
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1181) 
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.executeReadQuery(EJBQueryImpl.java:453) 
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.getResultList(EJBQueryImpl.java:669) 
+0

у вас настройки подключения, если есть? – Bozho

ответ

0

кажется, что соединение с базой данных закрывается по первому требованию, а второй запрос извлекает закрытое соединение с пул и не удается.

Как выглядит определение вашего источника данных?

+0

Я только что добавил определения beans – nablik

1

Если первое исключение переводится (как я предполагаю, что):

org.postgresql.util.PSQLException: An I/O error occured while sending to the backend. 

Тогда очень вероятно, не проблема EclipseLink но проблема PostgreSQL.

Установите следующее postgresql.conf на сервере и перезагрузки:

log_statement=all 
log_min_error_statement=ERROR 
log_min_messages=ERROR 
log_connections=on 
log_disconnections=on 

Затем проверьте журналы сервера и обновлять свой вопрос с любого подозрительного сообщения (и линии вокруг него).

+0

Я изменил postgresql.conf и перезапустил сервер базы данных. Затем я реплицировал ошибку в моем приложении, но ничего не было подозрительным в журналах postgresql. Только информация о запросах, транзакциях - никаких ошибок. – nablik

+0

Я только что протестировал mysql -> в той же ситуационной ошибке, но в этой базе данных нулевой указатель:/ – nablik

+0

Weird. Что такое поле IMAGE? БЛОК? –

Смежные вопросы