2011-09-01 4 views
0

orm.xml 및 maven2없이 JPA2를 통해 HBase를 읽거나 쓰는 최소한의 로컬 응용 프로그램을 만들고 싶습니다. 따라서 필자는 프로젝트에 Enhancer가 사용되는 DataNucleus Plugin과 함께 Eclipse를 사용합니다.DataNucleus가있는 간단한 로컬 JPA2HBase 응용 프로그램

http://matthiaswessendorf.wordpress.com/2010/03/17/apache-hadoop-hbase-plays-nice-with-jpa/ 에서 영감을 내가 가지고 다음 엔티티 :

@Entity 
@Table(name="account_table") 
public class Account 
{ 

    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    private String id; 

    String firstName = null; 
    String lastName = null; 
    int level = 0; 
    @Embedded 
    Login login = null; 

    public Account() {  } 

    public Account(String firstName, String lastName, int level, Login login) { 
     super(); 
     this.firstName = firstName; 
     this.lastName = lastName; 
     this.level = level; 
     this.login = login; 
    } 

@Embeddable 
public class Login 
{ 

    private String login = null; 
    private String password = null; 

    public Login() { 
     // TODO Auto-generated constructor stub 
    } 

    public Login(String login, String password) { 
     super(); 
     this.login = login; 
     this.password = password; 
    } 
} 

src가/META-INF/persistence.xml을

<persistence 
    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="hbase-addressbook" 
     transaction-type="RESOURCE_LOCAL"> 
     <class>de.syrtec.jpa2hbase.entities.Login</class> 
     <class>de.syrtec.jpa2hbase.entities.Account</class> 

     <properties> 
      <property name="datanucleus.ConnectionURL" value="hbase" /> 
      <property name="datanucleus.ConnectionUserName" value="" /> 
      <property name="datanucleus.ConnectionPassword" value="" /> 
      <property name="datanucleus.autoCreateSchema" value="true" /> 
      <property name="datanucleus.validateTables" value="false" /> 
      <property name="datanucleus.Optimistic" value="false" /> 
      <property name="datanucleus.validateConstraints" value="false" /> 
     </properties> 
    </persistence-unit> 
</persistence> 

DAO를 :

,210
public class TestDAO { 
    public static void main(String[] args) { 
     EntityManagerFactory emf = Persistence.createEntityManagerFactory("hbase-addressbook"); 
     EntityManager em = emf.createEntityManager(); 
     EntityTransaction tx = null; 

     Account a1 = new Account("myPre", "mySur", 1, new Login("a", "b")); 

     tx = em.getTransaction(); 
     tx.begin(); 
      em.persist(a1); 
     tx.commit(); 
    } 
} 

그러나 시험 DAO의 첫 번째 줄이 실행될 때 ...

EntityManagerFactory emf = Persistence.createEntityManagerFactory("hbase-addressbook"); 

얻을 .. 난 :

11/09/01 06:57:05 INFO DataNucleus.MetaData: Class "de.syrtec.jpa2hbase.entities.Account" has been specified with JPA annotations so using those. 
11/09/01 06:57:05 INFO DataNucleus.MetaData: Class "de.syrtec.jpa2hbase.entities.Login" has been specified with JPA annotations so using those. 
Exception in thread "main" javax.persistence.PersistenceException: Explicit persistence provider error(s) occurred for "hbase-addressbook" after trying the following discovered implementations: 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 de.syrtec.jpa2hbase.start.TestDAO.main(TestDAO.java:15) 
Caused by: org.datanucleus.exceptions.NucleusUserException: Errors were encountered when loading the MetaData for the persistence-unit "hbase-addressbook". See the nested exceptions for details 
    at org.datanucleus.metadata.MetaDataManager.loadPersistenceUnit(MetaDataManager.java:879) 
    at org.datanucleus.api.jpa.JPAEntityManagerFactory.initialiseNucleusContext(JPAEntityManagerFactory.java:745) 
    at org.datanucleus.api.jpa.JPAEntityManagerFactory.<init>(JPAEntityManagerFactory.java:422) 
    at org.datanucleus.api.jpa.PersistenceProviderImpl.createEntityManagerFactory(PersistenceProviderImpl.java:91) 
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:150) 
    ... 2 more 
Caused by: org.datanucleus.exceptions.ClassNotResolvedException: Class "− 

     de.syrtec.jpa2hbase.entities.Login" was not found in the CLASSPATH. Please check your specification and your CLASSPATH. 
    at org.datanucleus.JDOClassLoaderResolver.classForName(JDOClassLoaderResolver.java:247) 
    at org.datanucleus.JDOClassLoaderResolver.classForName(JDOClassLoaderResolver.java:412) 
    at org.datanucleus.metadata.MetaDataManager.loadPersistenceUnit(MetaDataManager.java:859) 
    ... 6 more 

내가 성공적으로 datanucleus에 의해 클래스 강화를 트리거 DAO를 실행하기 전에 :

DataNucleus Enhancer (version 3.0.0.release) : Enhancement of classes 
DataNucleus Enhancer completed with success for 2 classes. Timings : input=623 ms, enhance=101 ms, total=724 ms. Consult the log for full details 

향상이 트리거되지 않음 프로젝트의 자동 향상 기능을 활성화 했음에도 불구하고 자동으로 (로그를 참조하여) ...

내 개체가 발견되지 않는 이유를 아는 사람이 있습니까?

답변

0

그리고 persistence.xml에 빼기 기호가 있습니까?

+0

문제에 대한 해결책은 너무 쉬웠습니다 ... 동료가 persistence.xml 및 타타에서 명시 적 클래스 목록을 제거하는 조언을주었습니다. 작동 함 :) @DataNucleus : 이 마이너스는 다음 문제를 방지하기 위해 제거했습니다. –

관련 문제