2013-08-19 2 views
2

JPA 2.0을 사용하여 GAE 1.8.2 프로젝트를 만들었습니다.GAE 및 JPA 지속성 예외

java.lang.ExceptionInInitializerError 
    at it.bfm.dbutility.DbAccess.<init>(DbAccess.java:10) 
    at it.bfm.businesslogic.UtenteImpl.<init>(UtenteImpl.java:16) 
    at it.bfm.test.UtenteTest.testCreaUtente(UtenteTest.java:13) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 
Caused by: javax.persistence.PersistenceException: Explicit persistence provider error(s) occurred for "transactions-optional" after trying the following discovered implementations: org.datanucleus.api.jpa.PersistenceProviderImpl, org.datanucleus.api.jpa.PersistenceProviderImpl from provider: org.datanucleus.api.jpa.PersistenceProviderImpl 
    at javax.persistence.Persistence.createPersistenceException(Persistence.java:242) 
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:184) 
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:70) 
    at it.bfm.dbutility.EntityBfmManager.<clinit>(EntityBfmManager.java:8) 
    ... 26 more 
Caused by: org.datanucleus.exceptions.NucleusException: Plugin (Bundle) "org.datanucleus.api.jpa" is already registered. Ensure you dont have multiple JAR versions of the same plugin in the classpath. The URL "file:/Applications/Eclipse/plugins/com.google.appengine.eclipse.sdkbundle_1.8.2/appengine-java-sdk-1.8.2/lib/opt/user/datanucleus/v2/datanucleus-api-jpa-3.1.3.jar" is already registered, and you are trying to register an identical plugin located at URL "file:/Users/Stefano/.m2/repository/org/datanucleus/datanucleus-api-jpa/3.1.3/datanucleus-api-jpa-3.1.3.jar." 
    at org.datanucleus.plugin.NonManagedPluginRegistry.registerBundle(NonManagedPluginRegistry.java:541) 
    at org.datanucleus.plugin.NonManagedPluginRegistry.registerBundle(NonManagedPluginRegistry.java:395) 
    at org.datanucleus.plugin.NonManagedPluginRegistry.registerExtensions(NonManagedPluginRegistry.java:219) 
    at org.datanucleus.plugin.NonManagedPluginRegistry.registerExtensionPoints(NonManagedPluginRegistry.java:160) 
    at org.datanucleus.plugin.PluginManager.<init>(PluginManager.java:65) 
    at org.datanucleus.plugin.PluginManager.createPluginManager(PluginManager.java:427) 
    at org.datanucleus.api.jpa.JPAEntityManagerFactory.<init>(JPAEntityManagerFactory.java:328) 
    at org.datanucleus.api.jpa.PersistenceProviderImpl.createEntityManagerFactory(PersistenceProviderImpl.java:91) 
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:150) 
    ... 28 more 

의 persistence.xml은 이것이다 :

<?xml version="1.0" encoding="UTF-8" ?> 
<persistence 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_1_0.xsd" version="1.0"> 

    <persistence-unit name="transactions-optional"> 
     <provider>org.datanucleus.api.jpa.PersistenceProviderImpl</provider> 
     <properties> 
      <property name="datanucleus.NontransactionalRead" value="true"/> 
      <property name="datanucleus.NontransactionalWrite" value="true"/> 
      <property name="datanucleus.ConnectionURL" value="appengine"/> 
      <property name="datanucleus.singletonEMFForName" value="true"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

과 pom.xml 파일이 있습니다 :

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>it.bfm</groupId> 
    <artifactId>bfm</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>war</packaging> 
    <dependencies> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.11</version> 
     </dependency> 
     <dependency> 
      <groupId>javax</groupId> 
      <artifactId>javaee-api</artifactId> 
      <version>7.0</version> 
     </dependency> 
     <dependency> 
      <groupId>com.google.appengine</groupId> 
      <artifactId>appengine-api-1.0-sdk</artifactId> 
      <version>1.8.2</version> 
     </dependency> 
     <dependency> 
     <groupId>com.google.appengine.orm</groupId> 
     <artifactId>datanucleus-appengine</artifactId> 
     <version>2.1.2</version> 
     </dependency> 
     <dependency> 
     <groupId>org.datanucleus</groupId> 
     <artifactId>datanucleus-core</artifactId> 
     <version>3.1.3</version> 
     <scope>runtime</scope> 
     </dependency> 
     <dependency> 
     <groupId>org.datanucleus</groupId> 
     <artifactId>datanucleus-api-jpa</artifactId> 
     <version>3.1.3</version> 
     </dependency> 
     <!-- <dependency> --> 
     <!-- <groupId>org.datanucleus</groupId> --> 
     <!-- <artifactId>datanucleus-api-jdo</artifactId> --> 
     <!-- <version>3.1.3</version> --> 
     <!-- </dependency> --> 
     <dependency> 
      <groupId>javax.jdo</groupId> 
      <artifactId>jdo-api</artifactId> 
      <version>3.0.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.geronimo.specs</groupId> 
      <artifactId>geronimo-jpa_2.0_spec</artifactId> 
      <version>1.0</version> 
     </dependency> 
     <dependency> 
      <groupId>com.google.appengine</groupId> 
      <artifactId>appengine-jsr107cache</artifactId> 
      <version>1.8.2</version> 
     </dependency> 
     <dependency> 
      <groupId>com.google.appengine</groupId> 
      <artifactId>appengine-endpoints</artifactId> 
      <version>1.8.2</version> 
     </dependency> 
     <dependency> 
      <groupId>net.sf.jsr107cache</groupId> 
      <artifactId>jsr107cache</artifactId> 
      <version>1.1</version> 
     </dependency> 
    </dependencies> 
    <build> 
     <sourceDirectory>${basedir}/src/it/bfm</sourceDirectory> 
     <testSourceDirectory>${basedir}/src/it/bfm/test</testSourceDirectory> 
     <outputDirectory>${basedir}/war/WEB-INF/classes</outputDirectory> 
     <testOutputDirectory>${basedir}/war/WEB-INF/test-classes</testOutputDirectory> 
<!--  <resources> --> 
<!--   <resource> --> 
<!--    <directory>${basedir}/src</directory> --> 
<!--   </resource> --> 
<!--  </resources> --> 
     <pluginManagement> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <version>3.1</version> 
        <artifactId>maven-compiler-plugin</artifactId> 
        <configuration> 
         <source>1.7</source> 
         <target>1.7</target> 
        </configuration> 
       </plugin> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-war-plugin</artifactId> 
        <version>2.3</version> 
        <configuration> 
         <archiveClasses>true</archiveClasses> 
         <webResources> 
          <!-- in order to interpolate version from pom into appengine-web.xml --> 
          <resource> 
           <directory>${basedir}/war/WEB-INF</directory> 
           <filtering>true</filtering> 
           <targetPath>WEB-INF</targetPath> 
          </resource> 
         </webResources> 
        </configuration> 
       </plugin> 
      </plugins> 
     </pluginManagement> 
    </build> 
</project> 

수 내가 시작하려고하면 Junit와는 다음과 같은 예외를 throw 테스트 누군가 제발 도와 줘? 정말 고마워요.

답변

2

이 오류 메시지는 매우 분명 보인다

의 URL "파일 : /Applications/Eclipse/plugins/com.google.appengine.eclipse.sdkbundle_1.8.2/appengine-java-sdk-1.8.2 /lib/opt/user/datanucleus/v2/datanucleus-api-jpa-3.1.3.jar " 은 이미 등록되어 있으며 URL 에 동일한 플러그인을 등록하려고합니다."file :/Users/Stefano/.m2/repository/org/datanucleus/datanucleus-api-jpa/3.1.3/datanucleus-api-jpa-3.1.3.jar. "

그래서 그렇지 않으면 당신은 클래스 로딩 문제를 얻을 것이다, 당신은 CLASSPATH에 항아리의 단일 버전을 넣어 좋습니다.

+0

는 너무 감사하지만, 나를 걱정 오류가 이것이다 : javax.persistence.PersistenceException :에 의한 "거래 - 옵션"을 명시 적으로 지속성 공급자 오류 (들)가 발생 다음 발견 구현을 시도 후 : 조직 .datanucleus.api.jpa.PersistenceProviderImpl, org.datanucleus.api.jpa.PersistenceProviderImpl from provider : org.datanucleus.api.jpa.PersistenceProviderImpl 가능한 해결책에 대해 알고 싶습니까? – Stefano

+0

classpath를 고쳤습니다. 언급 한 메시지는 잘못된 classpath 때문에 던져진 것입니다. – DataNucleus

+0

안녕하세요. DataNucleus 님, Google Eclipse 플러그인으로 GAE 프로젝트를 만들었으므로 나중에 관리 대상으로 설정했습니다. 그래서 빌드 경로 라이브러리 (순서대로) : App Engine SDK, JRE 시스템 라이브러리 및 Maven 종속성. App Engine SDK 라이브러리를 삭제해야합니까? – Stefano