我有一个由缺乏知识引起的问题。 我使用OpenJPA作为JPA实现,Tomcat服务器运行我的应用程序,我也使用Idea12作为ide。
我有一项任务 - 在构建时提供开放的jpa增强功能。 为此,首先我通过将此属性添加到我的persistence.xml来拒绝OpenJPA在运行时增强实体:
<property name="openjpa.RuntimeUnenhancedClasses" value="unsupported"/>
现在,OpenJPA不会像我希望的那样在运行时增强类。
之后,我在ant-build.xml中编写了一个增强目标。它工作正常,并使用已编译的类创建/构建目录。如果我查看编译的classe代码,我会看到OpenJPA的其他字段 - pcStateManager和其他。好的,那很好。
现在问题是 - 当我通过Idea启动Tomcat时,它不需要我的增强类。我猜Tomcat甚至不知道,我增强了我的课程。似乎他再次编译代码,并使用未增强的类启动应用程序。当然,当我开始使用数据库时会有一个例外。
那么,是否可以配置Tomcat,所以他从/ build目录中获取我的类?
P.S。我也尝试使用一些Idea插件进行增强,但是他们没有解决问题 - 我有同样的例外,那些类没有增强。
upd 这两个增强创意插件:OpenJPA增强器和Data Nucleas与OpenJPA扩展集成无法解决问题。所以这让我觉得,有些事情是错的。也许主要问题是tomcat设置?
答案 0 :(得分:0)
如果有人感兴趣 - 这是解决方案:
你需要打开你的想法#Project Structure并选择包含你的类的模块
您需要将“output”属性从“Inherit project compile output”切换为“Use module compile output path”并指定包含增强类的目录
这就是全部,现在当Tomcat构建WAR文件时,他将使用你的增强类。祝你好运。