启用JPA静态编织(eclipselink)

时间:2012-03-07 03:29:51

标签: java tomcat jpa eclipselink

我是Eclipselink的新手。我使用Eclipselink / Java编写了几个Web服务(部署在Tomcat中)。这些Web服务使用多个实体类。为了提高Web服务性能,我尝试使用静态编织。我了解到我可以从命令行或使用Eclipselink编织ant脚本启用它。因为我使用eclipse并从eclipse构建我的WAR,所以我不确定应该在Eclipse IDE中使用“weave”Ant任务。所以,我尝试了这样的命令行选项:

java org.eclipse.persistence.tools.weaving.jpa.StaticWeave -persistenceinfo c:\eclipse 
\workspace\employeeModel\src -classpath c:\eclipse\workspace\employeeModel\src -log 
c:\log\weave.log -loglevel FINEST c:\eclipse\workspace\employeeModel\src c:\eclipse 
\workspace\employeeModel\src

[命令中的最后两个路径,c:\ eclipse \ workspace \ employeeModel \ src c:\ eclipse \ workspace \ employeeModel \ src分别引用源和目标]

当我运行它时,它在日志文件中记录了以下内容:     [EL Finest]:2012-03-05 17:22:49.806 - ServerSession(8880493) - Thread(Thread [main,5,main]) - property = eclipselink.jpa.uppercase-column-names;默认值= false [EL Finer]:2012-03-05 17:22:49.837 - ServerSession(8880493) - Thread(Thread [main,5,main]) - 在文件中搜索默认的映射文件:/ c:/ eclipse /工作区/ employeeModel / SRC / [EL Finer]:2012-03-05 17:22:49.852 - ServerSession(8880493) - Thread(Thread [main,5,main]) - 在文件中搜索默认的映射文件:/ c:/ eclipse /工作区/ employeeModel / SRC /

从日志看起来staticWeave没有成功完成。但它也没有在命令行上产生任何错误。

由于我对source(.java)和target使用了相同的路径,所以staticWeave确实覆盖了我的源文件(.java文件)。我不确定staticWeave(上面运行的命令)是否会生成类文件(.class)或者是否会覆盖源代码(.java)。

我也不确定我所做的是否正确。如何验证静态编织是否实际启用?如果我所做的不对,有人可以帮我理解如何在Eclipse IDE中使用Eclipselink编织ant任务吗?或者我在命令行选项上做的错误。 另外,我想知道staticWeave是否会实际覆盖源文件或创建字节代码(.class文件)。

我花了几个小时才完成这项工作,但没有成功。有人可以对此有所了解吗?

感谢您的帮助。

4 个答案:

答案 0 :(得分:3)

静态编织编织.class文件,并输出.class文件。它不适用于.java文件。通常你给它一个jar文件,然后输出一个新的jar文件。

请参阅, http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Advanced_JPA_Development/Performance/Weaving/Static_Weaving

答案 1 :(得分:3)

将此代码添加到build.xml文件中:

<target name="-post-jar">
        <antcall target="weaving"/>
</target>
<target name="define.task" description="New task definition for EclipseLink static weaving">
<taskdef name="weave" classname="org.eclipse.persistence.tools.weaving.jpa.StaticWeaveAntTask"/>
</target>
<target name="weaving" description="perform weaving" depends="define.task">
        <weave  source="C:\<projectpath>\dist\${ant.project.name}.jar"
                target="C:\<projectpath>\dist\woven-${ant.project.name}.jar"
                persistenceinfo="D:\<projectpath>\lib\persistence.jar"
                loglevel="FINE"
                log="C:\<projectpath>\weaver.log">
            <classpath>
            </classpath>
        </weave>
</target>

在代码中,使用源代码所在的路径更改<projectpath>。并且persistenceinfo指向另一个jar(persistence.jar),它只包含我使用的persistence.xml,因为我在几个项目中共享相同的persistence.xml文件。如果不对persistence.xml文件使用单独的jar,则删除该属性并使用persistencexml=<path-to-persistence.xml-file>\META-INF\persistence.xml

此外,您还需要将文件eclipselink.jarjavax.persistence...jar添加到Ant类路径中。如果您使用的是Netbeans,请转到Tools | Options | Java | Ant,然后将这些文件添加到类路径中。

使用上面的代码,每次编译时都会生成一个前缀为woven-的新文件,这是您的新编织jar文件。

答案 2 :(得分:0)

如果需要,可以使用展开的目录结构而不是jar来编写类文件。

答案 3 :(得分:0)

如果是maven项目,你可以使用这个maven插件来编织jar

 <plugins>
        ...
        <plugin>
            <groupId>de.empulse.eclipselink</groupId>
            <artifactId>staticweave-maven-plugin</artifactId>
            <version>1.0.0</version>
            <executions>
                <execution>
                    <phase>process-classes</phase>
                    <goals>
                        <goal>weave</goal>
                    </goals>
                    <configuration>
                        <persistenceXMLLocation>META-INF/persistence.xml</persistenceXMLLocation>
                        <logLevel>FINE</logLevel>
                    </configuration>
                </execution>
            </executions>
            <dependencies>
                <dependency>
                    <groupId>org.eclipse.persistence</groupId>
                    <artifactId>org.eclipse.persistence.jpa</artifactId>
                    <version>${eclipselink.version}</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>

另请参阅:EclipseLink - Configuring Static Weaving