4

EclipseLink を使用して Web サービスを実行していますが、正常に動作します。しかし、「PersistenceUnit を事前デプロイできません」という例外が発生することがあります。なぜこれを取得しているのかわかりません。他のすべては機能しているように見え、例外はアプリケーションを妨害していないようです。例外はキャッチされているだけです。

Exception Description: Unable to predeploy PersistenceUnit [MyLibPU] in invalid state [Undeployed]
javax.persistence.PersistenceException: Exception [EclipseLink-28017] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Unable to predeploy PersistenceUnit [MyLibPU] in invalid state [Undeployed]
    at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.predeploy(EntityManagerSetupImpl.java:956)
    at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactory(PersistenceProvider.java:121)
    at javax.persistence.Persistence.createEntityManagerFactory(Unknown Source)
    at javax.persistence.Persistence.createEntityManagerFactory(Unknown Source)
....
....
Caused by: Exception [EclipseLink-28017] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Unable to predeploy PersistenceUnit [MyLibPU] in invalid state [Undeployed]
    at org.eclipse.persistence.exceptions.EntityManagerSetupException.cannotPredeploy(EntityManagerSetupException.java:202)
    ... 30 more

例外では、メソッド内の行へのトレースを見つけることができます:

EntityManagerFactory emf = Persistence.createEntityManagerFactory("MyLibPU");

なぜ私はこれを手に入れたのですか?

編集
これは、eclipselink ロギングが に設定されているときに得られる出力ですFINEST

[EL Finest]: 2012-04-23 15:19:06.025--ServerSession(2134178364)--Thread(Thread[Finalizer,8,system])--End undeploying Persistence Unit MyLibPU; session file:/home/Rox/MyLib/trunk/MyLib/build/classes/_MyLibPU; state Undeployed; factoryCount 0
[EL Finest]: 2012-04-23 15:19:06.025--ServerSession(2113649746)--Thread(Thread[Finalizer,8,system])--Begin undeploying Persistence Unit MyLibPU; session file:/home/Rox/MyLib/trunk/MyLib/src/_MyLibPU; state Deployed; factoryCount 3
[EL Finest]: 2012-04-23 15:19:06.025--ServerSession(2113649746)--Thread(Thread[Finalizer,8,system])--End undeploying Persistence Unit MyLibPU; session file:/home/Rox/MyLib/trunk/MyLib/src/_MyLibPU; state Deployed; factoryCount 2
Apr 23, 2012 3:19:06 PM com.sun.xml.internal.ws.server.sei.EndpointMethodHandler invoke
SEVERE: Exception [EclipseLink-28017] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Unable to predeploy PersistenceUnit [MyLibPU] in invalid state [Undeployed]
javax.persistence.PersistenceException: Exception [EclipseLink-28017] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Unable to predeploy PersistenceUnit [MyLibPU] in invalid state [Undeployed]
    at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.predeploy(EntityManagerSetupImpl.java:956)
    at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactory(PersistenceProvider.java:121)
    at javax.persistence.Persistence.createEntityManagerFactory(Unknown Source)
    at javax.persistence.Persistence.createEntityManagerFactory(Unknown Source)
    at com.mylib.MyImplementation.getPersons(MyImplementation.java:171)
    at sun.reflect.GeneratedMethodAccessor13.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at com.sun.xml.internal.ws.api.server.InstanceResolver$1.invoke(InstanceResolver.java:235)
    at com.sun.xml.internal.ws.server.InvokerTube$2.invoke(InvokerTube.java:135)
    at com.sun.xml.internal.ws.server.sei.EndpointMethodHandler.invoke(EndpointMethodHandler.java:246)
    at com.sun.xml.internal.ws.server.sei.SEIInvokerTube.processRequest(SEIInvokerTube.java:85)
    at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Fiber.java:626)
    at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:585)
    at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:570)
    at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:467)
    at com.sun.xml.internal.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:299)
    at com.sun.xml.internal.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:593)
    at com.sun.xml.internal.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:244)
    at com.sun.xml.internal.ws.transport.http.server.WSHttpHandler.handleExchange(WSHttpHandler.java:95)
    at com.sun.xml.internal.ws.transport.http.server.WSHttpHandler.handle(WSHttpHandler.java:80)
    at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:77)
    at sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:83)
    at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:80)
    at sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:668)
    at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:77)
    at sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:640)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)
Caused by: Exception [EclipseLink-28017] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Unable to predeploy PersistenceUnit [MyLibPU] in invalid state [Undeployed]
    at org.eclipse.persistence.exceptions.EntityManagerSetupException.cannotPredeploy(EntityManagerSetupException.java:202)
    ... 30 more

[EL Finer]: 2012-04-23 15:20:06.003--Thread(Thread[pool-1-thread-61,5,main])--fixUNC: before fixing: url = file:/home/Rox/MyLib/build/classes/, authority = , file = /home/Rox/MyLib/build/classes/ (There is no English translation for this message.)
[EL Finer]: 2012-04-23 15:20:06.012--Thread(Thread[pool-1-thread-61,5,main])--fixUNC: after fixing: url = file:/home.....

EDIT 2
私のpersistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
  <persistence-unit name="MyLibPU" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <class>com.mylib.Person</class>
    <class>com.mylib.Group</class>
    <properties>
      <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/MY_DB"/>
      <property name="javax.persistence.jdbc.password" value="MyPassword"/>
      <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
      <property name="javax.persistence.jdbc.user" value="root"/>
      <property name="eclipselink.logging.level" value="FINEST"/>;
      <property name="eclipselink.logging.level.sql" value="FINEST"/>;
      <property name="eclipselink.logging.parameters" value="true"/>;
    </properties>
  </persistence-unit>
</persistence>
4

3 に答える 3

1

エラーが散発的に発生する場合は、タイミングの問題である可能性があります。また、どうやらアプリのライフサイクル中に複数回ファクトリを作成しているようです (間違っている場合はお知らせください)。そのため、Web アプリへの同時リクエストによって、ファクトリの同時作成がトリガーされる可能性があります。このケースはサポートされていない可能性があります。

いずれにせよ、ファクトリは 1 回だけ作成するのがよいでしょう。その方法については、この質問を参照してください。次に、それを同時に呼び出すことができますcreateEntityManager。このメソッドはスレッドセーフです。

于 2012-04-25T17:28:10.463 に答える
0

データベースを操作するときは、静的コンストラクターまたは類似の構造を使用しないでください。これにより、トラブルを回避できます。コードに一時停止と明示的なログ コマンドを挿入してエラーを見つけ、コードがどこまで進んでいるかを確認してください。

于 2012-04-30T12:54:20.327 に答える
0

Hibernate のアンデプロイには問題があります。アンデプロイして再デプロイしようとすると、それらに遭遇しているようです。サーバーを完全に再起動すると問題が発生しますか?

編集: 申し訳ありませんが、EclipseLink を使用していると明確に言いましたが、Hibernate を使用していると思った理由がわかりません。

いずれにせよ、ログの次の行は心配です:

[EL Finest]: 2012-04-23 15:19:06.025--ServerSession(2113649746)--Thread(Thread[Finalizer,8,system])--Begin undeploying Persistence Unit MyLibPU; session file:/home/Rox/MyLib/trunk/MyLib/src/_MyLibPU; state Deployed; factoryCount 3

どういうfactoryCount意味かはわかりませんが、1 より大きいのは好きではありません。しかし、最も心配なのは、「Persistence Unit MyLibPU のアンデプロイを開始する」ことです。PU がアンデプロイされるのはなぜですか? アプリをアンデプロイしているためだと思いましたが、コメントで「エラーはアプリケーションの存続期間中いつでも発生する可能性があり、24 時間ごとに 2 ~ 5 回しか発生しません」と書かれています。その場合、何がアンデプロイを引き起こしているのかを突き止める必要があります。

于 2012-04-25T00:10:21.180 に答える