0

私は OpenJPA を初めて使用し、自分のアプリケーションを実行したいと考えていました。メイン メソッドを作成し、そこにコンテキスト XML をロードし、サービスを実行するためのトランザクションを起動しました。しかし、実行すると、

org.apache.openjpa.persistence.ArgumentException: タイプ「class tld.myproject.domain.Entity」は拡張されていません。

Google で調べたところ、エンハンサーを追加する必要があることがわかったので、コマンド ラインに次のコードを追加しました。

-javaagent:/home/me/.m2/repository/org/apache/openjpa/openjpa/2.0.1/openjpa-2.0.1.jar

今、私は得る

java.lang.LinkageError: ローダー (sun/misc/Launcher$AppClassLoader のインスタンス): 名前の重複クラス定義を試行しました: "org/springframework/stereotype/Controller"

たぶん、ちょうど遅くなっただけで、頭がおかしいのかもしれませんが、一体何が起こっているのでしょうか? Spring Roo バッチ・プロジェクトを実行するには、何をする必要がありますか?

乾杯

ニック

PS、私はおそらく私の pom.xml で Roo がコンパイル フェーズのエンハンサーを定義したことを追加する必要があります。

4

1 に答える 1

1

おそらく、javaagent を使用したランタイム拡張ではなく、コンパイル時間拡張を使用する必要があります。

m2eclipse を使用している場合 (おそらく使用しているでしょう)、次のようなものを使用するだけで十分です。

<persistence-unit name="persistenceUnit" transaction-type="RESOURCE_LOCAL">
    <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
    <properties>
        <property name="openjpa.jdbc.DBDictionary" value="org.apache.openjpa.jdbc.sql.H2Dictionary"/>
        <!-- value="buildSchema" to runtime forward map the DDL SQL; value="validate" makes no changes to the database -->
        <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema"/>
        <property name="openjpa.RuntimeUnenhancedClasses" value="unsupported"/>
    </properties>
</persistence-unit>

pom.xml の build セクション内には、次のようなものが必要です。

                      <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>openjpa-maven-plugin</artifactId>
                        <version>1.2</version>
                        <configuration>
                            <includes>**/*.class</includes>
                            <excludes>**/*_Roo_*.class</excludes>
                            <addDefaultConstructor>true</addDefaultConstructor>
                        </configuration>
                        <executions>
                            <execution>
                                <id>enhancer</id>
                                <phase>compile</phase>
                                <goals>
                                    <goal>enhance</goal>
                                </goals>
                            </execution>
                            <execution>
                                <id>test-enhancer</id>
                                <phase>test-compile</phase>
                                <goals>
                                    <goal>enhance</goal>
                                </goals>
                            </execution>
                        </executions>
                        <dependencies>
                            <dependency>
                                <groupId>org.apache.openjpa</groupId>
                                <artifactId>openjpa</artifactId>
                                <version>${openjpa.version}</version>
                                <exclusions>
                                    <exclusion>
                                        <groupId>commons-logging</groupId>
                                        <artifactId>commons-logging</artifactId>
                                    </exclusion>
                                    <exclusion>
                                        <groupId>org.apache.geronimo.specs</groupId>
                                        <artifactId>geronimo-jms_1.1_spec</artifactId>
                                    </exclusion>
                                </exclusions>
                            </dependency>
                        </dependencies>
                    </plugin>

roo は、動作しない可能性のある別の xml スニペットを生成する可能性があることに注意してください (IIRC は別の出力ディレクトリを使用します)。

プロジェクトクラスをクリーンアップした後、強化する必要があります。

于 2011-03-12T21:51:57.187 に答える