我是GWT的新手,我正在设置一个项目来保存复杂应用程序的UI部分。 JPA数据对象使用MyBatis生成的POJO在单独的项目中定义。一旦我手动修改JPA对象以包含'implements Serializable'(这是我需要解决的另一个问题),构建过程中的gwtc步骤无法继续,因为它需要JPA对象的源代码,但可以'找到他们。
我创建了'核心'项目的jar文件,以便它包含源.java文件,但这不起作用。我已经尝试在gwtc ant java调用中添加一个classpath元素。
如何在保持JPA对象在单独项目中定义的同时编译我的UI项目?
错误:
Buildfile: /Users/user/source/user_interface/build.xml
libs:
javac:
gwtc:
[java] Compiling module org.mysite.ui
[java] Validating newly compiled units
[java] [ERROR] Errors in 'file:/Users/user/source/user_interface/src/org/mysite/ui/client/MyService.java'
[java] [ERROR] Line 21: No source code is available for type org.mysite.core.model.Person; did you forget to inherit a required module?
[java] [ERROR] Errors in 'file:/Users/user/source/user_interface/src/org/mysite/ui/client/MyServiceAsync.java'
[java] [ERROR] Line 19: No source code is available for type org.mysite.core.model.Person; did you forget to inherit a required module?
[java] [ERROR] Errors in 'file:/Users/user/source/user_interface/src/org/mysite/ui/client/presenter/MainTabPresenter.java'
[java] [ERROR] Line 75: No source code is available for type org.mysite.core.model.Person; did you forget to inherit a required module?
[java] Scanning for additional dependencies: file:/Users/user/source/user_interface/src/org/mysite/ui/client/MyApp.java
[java] Computing all possible rebind results for 'org.mysite.ui.client.MyService'
[java] Rebinding org.mysite.ui.client.MyService
[java] Checking rule <generate-with class='com.google.gwt.user.rebind.ui.ImageBundleGenerator'/>
[java] [ERROR] Unable to find type 'org.mysite.ui.client.MyService'
[java] [ERROR] Hint: Previous compiler errors may have made this type unavailable
[java] [ERROR] Hint: Check the inheritance chain from your module; it may not be inheriting a required module or a module may not be adding its source path entries properly
[java] [ERROR] Errors in 'file:/Users/user/source/user_interface/src/org/mysite/ui/client/MyApp.java'
[java] [ERROR] Line 23: Failed to resolve 'org.mysite.ui.client.MyService' via deferred binding
[java] [ERROR] Cannot proceed due to previous errors
BUILD FAILED
/Users/user/source/user_interface/build.xml:39: Java returned: 1
Total time: 26 seconds
Ant gwtc target:
<target name="gwtc" depends="javac" description="GWT compile to JavaScript (production mode)">
<java failonerror="true" fork="true" classname="com.google.gwt.dev.Compiler">
<classpath>
<pathelement location="src"/>
<pathelement location="../core/src"/>
<path refid="project.class.path"/>
</classpath>
<!-- add jvmarg -Xss16M or similar if you see a StackOverflowError -->
<jvmarg value="-Xmx256M"/>
<arg line="-war"/>
<arg value="web"/>
<!-- Additional arguments like -style PRETTY or -logLevel DEBUG -->
<arg line="${gwt.args}"/>
<arg value="org.mysite.ui.MyApp"/>
</java>
</target>
答案 0 :(得分:3)
GWT一直都有这个问题。
我过去采用的方法是在另一个JAR中创建一个.gwt.xml模块,包括JPA POJO,并将JPA注释类放在“emul”javax.persistence文件夹中。当然,这对于许多使用延迟抓取的提供程序都不起作用,因此需要Gilead(在此处的另一个答案中提到)。
另一种方法是在通过RPC
发送之前制作JPA对象的副本并只创建Dozer幸运的是,GWT 2.1解决了这个问题。使用Entity proxies并请求工厂。效果很好。
答案 1 :(得分:2)
使用新的GWT 2.1 RequestFactory / EntityPro xy方法,或者
我们使用Objectify,因为JPA不适合数据存储。 JPA是在考虑基于SQL的关系数据库的情况下创建的,而GAE数据存储则完全不同。
谷歌将JPA层移植到数据存储区以引诱开发人员,假装数据存储只是一个普通的旧SQL关系数据库。一旦项目变得越来越大,这种情况随后就会爆发出来。
如果您想使用AppEngine,您真的需要了解数据存储区的权衡。 JPA在这里没有帮到你。
答案 2 :(得分:0)
如果您想将POJO序列化为GWT,最好的办法是使用Gilead http://noon.gilead.free.fr/gilead/
您在POJO上所要做的就是扩展LightEntity并实现Serializable
本教程非常简单地介绍了如何设置RPC。