2010-01-24 91 views
5

我嘗試在ibm RAD上開發JPA項目。我可以在Webpshere上成功運行它, 但問題是我的機器很舊。因此,在Java EE容器中部署不 reasonable.And我想在JSE.But它運行它提供了以下錯誤:Java SE上的openJPA

94 test INFO [main] openjpa.Runtime - Starting OpenJPA 1.2.1-SNAPSHOT 
235 test INFO [main] openjpa.jdbc.JDBC - Using dictionary class "com.ibm.ws.persistence.jdbc.sql.DB2Dictionary". 
1797 test WARN [main] openjpa.Enhance - This configuration disallows runtime optimization, but the following listed types were not enhanced at build time or at class load time with a javaagent: "[class Customer]". 
Exception in thread "main" <openjpa-1.2.1-SNAPSHOT-r422266:686069 fatal user error> org.apache.openjpa.persistence.ArgumentException: The type "class Customer" has not been enhanced. 
    at org.apache.openjpa.meta.ClassMetaData.resolveMeta(ClassMetaData.java:1650) 
    at org.apache.openjpa.meta.ClassMetaData.resolve(ClassMetaData.java:1624) 
    at org.apache.openjpa.meta.MetaDataRepository.processBuffer(MetaDataRepository.java:717) 
    at org.apache.openjpa.meta.MetaDataRepository.resolveMeta(MetaDataRepository.java:616) 
    at org.apache.openjpa.meta.MetaDataRepository.resolve(MetaDataRepository.java:541) 
    at org.apache.openjpa.meta.MetaDataRepository.getMetaData(MetaDataRepository.java:308) 
    at org.apache.openjpa.kernel.BrokerImpl.newObjectId(BrokerImpl.java:1114) 
    at org.apache.openjpa.kernel.DelegatingBroker.newObjectId(DelegatingBroker.java:268) 
    at org.apache.openjpa.persistence.EntityManagerImpl.find(EntityManagerImpl.java:451) 
    at deneme.main(deneme.java:21) 

什麼,我缺少什麼?

由我persistent.xml是:

**<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="1.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_1_0.xsd"> 
    <persistence-unit name="test" transaction-type="RESOURCE_LOCAL"> 
    <provider> 
     com.ibm.websphere.persistence.PersistenceProviderImpl 
    </provider> 
     <class>Customer</class> 
     <properties> 
      <property name="openjpa.ConnectionDriverName" value="com.ibm.db2.jcc.DB2Driver"/> 
      <property name="openjpa.ConnectionURL" value="jdbc:db2://localhost:50000/PARUD:retrieveMessagesFromServerOnGetMessage=true;"/> 
      <property name="openjpa.ConnectionUserName" value="db2admin"/> 
      <property name="openjpa.ConnectionPassword" value="xxxxx"/> 
      <property name="openjpa.jdbc.Schema" value="POOL"/> 
     </properties> 
    </persistence-unit> 
</persistence>** 

回答

8

只是一個指針: 您需要例如提高你的類在運行時通過-javaagent:yourlib.jar 甚至在編譯時。您可以瞭解更多關於此主題的信息here

「第二個也是推薦的獲取運行時增強的方法是在啓動運行OpenJPA的JVM時提供一個javaagent。

+0

yes我試過javaagent.like這個 -javaagent:C:\ Program Files \ IBM \ WebSphere \ AppServer \ plugins \ com.ibm.ws.jpa.jar 它給出錯誤:「無法創建Java虛擬機「 – qasanov 2010-01-24 14:07:11

+0

這裏的問題是空間」Program Files「。我將文件移動到「C:\ com.ibm.ws.jpa.jar」下,並且似乎沒問題。提前致謝 :) – qasanov 2010-01-24 14:18:16

0

我剛剛經歷了讓OpenJPA 2.1.0在Tomcat 7.0上運行的練習。我根本無法獲得運行時增強功能,因此我放棄了Tomcat,因此決定使用構建時增強功能。然而

http://openjpa.apache.org/enhancement-with-eclipse.html

請注意,此頁面上的說明是通用的Java項目:我發展我的代碼的Eclipse下,所以我遵循的指示在這裏。如果您正在使用Dynamic Web Projects,請確保正確指定build目錄參數。我使用了-Dbuild.dir = build/classes,這是編譯代碼的典型位置。

你必須忍受一個更煩人的怪癖。您必須使用「項目>生成項目」菜單項手動調用生成器。當增強器運行時,它會修改先前構建的類。因此,在發佈到Tomcat之前,您需要爲項目點擊F5或Refresh。