2012-12-11 1 views
0

나는 단지 그것을 발생하여 완전히 flabergasted 오전 : 내가 무엇을 할 수neo4j가 UnderlyingStorageException을 보낼 때 나는 무엇을 할 수 있습니까?

[#|2012-12-10T14:16:49.663+0100|WARNING|glassfish3.1.1|javax.enterprise.system.core.transaction.com.sun.jts.jtsxa|_ThreadID=165;_ThreadName=Thread-2;|JTS5068: Unexpected error occurred in rollback 
org.neo4j.kernel.impl.nioneo.store.UnderlyingStorageException: Unable to write defragged id batch 
     at org.neo4j.kernel.impl.nioneo.store.IdGeneratorImpl.writeIdBatch(IdGeneratorImpl.java:554) 
     at org.neo4j.kernel.impl.nioneo.store.IdGeneratorImpl.freeId(IdGeneratorImpl.java:295) 
     at org.neo4j.kernel.impl.nioneo.store.CommonAbstractStore.freeId(CommonAbstractStore.java:404) 
     at org.neo4j.kernel.impl.nioneo.xa.WriteTransaction.doRollback(WriteTransaction.java:309) 
     at org.neo4j.kernel.impl.transaction.xaframework.XaTransaction.rollback(XaTransaction.java:278) 
     at org.neo4j.kernel.impl.transaction.xaframework.XaResourceManager.rollback(XaResourceManager.java:488) 
     at org.neo4j.kernel.impl.transaction.xaframework.XaResourceHelpImpl.rollback(XaResourceHelpImpl.java:111) 
     at com.sun.jts.jta.TransactionState.rollback(TransactionState.java:193) 
     at com.sun.jts.jtsxa.OTSResourceImpl.rollback(OTSResourceImpl.java:333) 
     at com.sun.jts.CosTransactions.RegisteredResources.distributeRollback(RegisteredResources.java:1038) 
     at com.sun.jts.CosTransactions.TopCoordinator.rollback(TopCoordinator.java:2290) 
     at com.sun.jts.CosTransactions.CoordinatorTerm.commit(CoordinatorTerm.java:420) 
     at com.sun.jts.CosTransactions.TerminatorImpl.commit(TerminatorImpl.java:250) 
     at com.sun.jts.CosTransactions.CurrentImpl.commit(CurrentImpl.java:623) 
     at com.sun.jts.jta.TransactionManagerImpl.commit(TransactionManagerImpl.java:323) 
     at com.sun.enterprise.transaction.jts.JavaEETransactionManagerJTSDelegate.commitDistributedTransaction(JavaEETransactionManagerJTSDelegate.java:186) 
     at com.sun.enterprise.transaction.JavaEETransactionManagerSimplified.commit(JavaEETransactionManagerSimplified.java:858) 
     at com.sun.enterprise.transaction.UserTransactionImpl.commit(UserTransactionImpl.java:208) 
............ 
Caused by: java.nio.channels.ClosedByInterruptException 
     at java.nio.channels.spi.AbstractInterruptibleChannel.end(AbstractInterruptibleChannel.java:202) 
     at sun.nio.ch.FileChannelImpl.size(FileChannelImpl.java:299) 
     at org.neo4j.kernel.impl.nioneo.store.IdGeneratorImpl.writeIdBatch(IdGeneratorImpl.java:530) 
     ... 104 more 

, 그리고 난 그 예외를 복구 할 수있는 방법?

여기 neo4j는 Glassfish 앱 서버의 neo4j jca 커넥터를 사용하여 실행해야합니다.

So. 내가 무엇을 할 수 있을지 ?

+0

다른 스레드가 이미 삭제 한 섹션에 쓰려고 시도하는 스레드가 여러 개있을 가능성이 큽니다. 이런 일이 일어나기 전에 코드가 정확히 무엇을합니까? – ulkas

+0

@ulkas이 코드는 그래프에있는 많은 데이터를 마이그레이션하는 Singleton Startup EJB에서 실행됩니다. 그 때 실행되는 유일한 EJB로 간주됩니다. – Riduidel

답변

0

문제는 사실 neo4j와 관련이 없지만 Glassfish가 EAR을 배포하는 데 제한된 시간 (기본적으로 도메인이 아니라 도메인에 명령을 보내는 데 사용되는 HTTP 채널을 통해)을 기본적으로 제공한다는 사실에 기인합니다.

는 그 힌트는 그 신비 로그 성명의 형태로 주어졌다 :

[# | 2012-12-10T11 : 41 : 49.725 + 0100 | 경고 | glassfish3.1.1 |이 com.sun. grizzly.config.GrizzlyServiceListener | _ThreadID = 29; _ThreadName = 스레드 2; | GRIZZLY0023 : 유휴 스레드를 중단 : 관리자 스레드 풀-4848 (9) | #]

빠른 인터넷 검색이 내게 말했다 정확하게. 내 EAR 배포에서 "application cannot start on ubuntu but starts on windows without any trouble"이 (가) 발생했습니다. 결과적으로 java.net 조언을 따라 주어진 플래그를 설정했습니다

asadmin set server-config.network-config.protocols.protocol.http-listener-1.http.request-timeout-seconds=-1 

오류가 이제 사라졌습니다.

1

java.nio. *의 요소는 인터럽트에 매우 민감합니다. 즉, 중단 된 스레드가 액세스하는 즉시 FileChannel이 닫히는 것을 의미합니다. Neo4j는 FileChannel을 사용하며이 문제는 환경 방해로 인해 스레드가 중단되는 경우가 많습니다.

관련 문제