我是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文件)。
我花了几个小时才完成这项工作,但没有成功。有人可以对此有所了解吗?
感谢您的帮助。
答案 0 :(得分:3)
静态编织编织.class文件,并输出.class文件。它不适用于.java文件。通常你给它一个jar文件,然后输出一个新的jar文件。
答案 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.jar
和javax.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>