OpenJPA增强了Spring ROO批处理应用程序

时间:2011-01-21 14:17:11

标签: java spring-roo openjpa

我是OpenJPA的新手,想要运行我的应用程序。我已经创建了一个main方法并在那里加载了上下文XML并启动了一个事务来运行我的服务。但是当我运行它时,我得到了一个

org.apache.openjpa.persistence.ArgumentException:类型“class tld.myproject.domain.Entity”尚未得到增强。

我谷歌了,发现我需要添加一个增强器,所以我在命令行中添加了以下内容:

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

现在,我得到了

java.lang.LinkageError:loader(sun / misc / Launcher $ AppClassLoader的实例):尝试重复的名称类定义:“org / springframework / stereotype / Controller”

也许它刚刚来晚了我没有把头拧上,但是,到底发生了什么?我需要做些什么才能让我的Spring Roo批处理项目运行?

干杯

的Nik

PS,我应该在我的pom.xml中添加它,Roo为编译阶段定义了一个增强器

1 个答案:

答案 0 :(得分: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的内部构建部分应该是:

                      <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使用不同的输出目录)。

清理完项目后,应该增强课程。