5

ibm RAD で JPA プロジェクトを開発しようとしています。Webphere で正常に実行できますが、問題は私のマシンがかなり古いことです。したがって、Java EE コンテナーにデプロイすることは合理的ではありません。JSE で実行したいのですが、次のエラーが発生します。

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>**
4

2 に答える 2

8

単なるポインタ: クラスを拡張する必要があります。たとえば、実行時に -javaagent:yourlib.jar を介して、またはコンパイル中にも強化する必要があります。このトピックの詳細については、こちらをご覧ください。

「ランタイム拡張を取得するための 2 番目の推奨される方法は、OpenJPA が実行される JVM を起動するときに javaagent を提供することです。」

于 2010-01-24T13:57:21.323 に答える
0

OpenJPA 2.1.0 を Tomcat 7.0 で実行するための演習を行いました。Tomcat で動作するランタイム エンハンスメントを取得できなかったため、あきらめて、ビルド時エンハンスメントを使用することにしました。私は Eclipse でコードを開発しているので、次の手順に従いました。

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

ただし、このページの手順は一般的な Java プロジェクト向けであることに注意してください。動的 Web プロジェクトを使用している場合は、ビルド ディレクトリ引数を正しく指定してください。コンパイルされたコードの典型的な場所である -Dbuild.dir=build/classes を使用しました。

あなたが一緒に暮らさなければならないもう1つの厄介な癖。[Project] > [Build Project] メニュー項目を使用して、ビルダーを手動で呼び出す必要があります。エンハンサーが実行されると、以前に構築されたクラスが変更されます。したがって、Tomcat に公開する前に、プロジェクトの F5 キーまたは更新を押す必要があります。

于 2011-05-06T19:32:41.200 に答える