我需要在Tomcat 7中包含什么才能使javax.persistence正常工作?

JHa*_*ach 0 tomcat hibernate jpa java-ee

我正在尝试使用Java 7和Tomcat 7构建JSF/Hibernate应用程序.我已经安装了Java SDK和JavaEE SDK,并将javaee.jar和javaee-api-6.jar复制到我的Tomcat LIB文件夹中.通过我对这篇文章这篇文章的理解,我应该拥有我需要的所有罐子,据我所知,我在这个文件夹中没有其他罐子,这些罐子有相互冲突的资源.

  • javaee.jar文件包含看起来像Maven pom文件的内容,没有别的.我不确定它的价值是什么.

  • 我的javaee-api-6 jar大小约为950k,包含了我期望的所有.class文件.我正在使用的代码编译得很好,我只在尝试部署到Tomcat时看到错误.这些罐子来自玻璃鱼装置.奇怪的是文件ServletException.class文件只有366个字节.

  • 我在Eclipse中设置了Tomcat,以便IDE在部署时"接管"Tomcat,而不是部署到某个插件文件夹(默认行为).

  • 我正在使用的唯一相关包是来自javax.persistence的'Entity''Id'和'GeneratedValue'.

  • 我只尝试使用javaee-api-6.jar,并更名javaee-api.jarjavaee.jar没有变化.看起来它的文件名并不重要.

对Glassfish lib文件夹的深入检查确实显示了许多相关外观的jar,但不是完整的javaee包,所以我无法将Javaee-api-6.jar移出并移动它们,它们是不完整的,我得到了一个类似的错误表明(我假设)某些类的实现无法找到.

所以我的问题是:我需要在Tomcat 7中包含什么才能使javax.persistence正常工作?

java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/servlet/ServletException
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.privateGetPublicMethods(Unknown Source)
at java.lang.Class.privateGetPublicMethods(Unknown Source)
at java.lang.Class.privateGetPublicMethods(Unknown Source)
at java.lang.Class.getMethods(Unknown Source)
at org.apache.tomcat.util.IntrospectionUtils.findMethods(IntrospectionUtils.java:713)
at org.apache.tomcat.util.IntrospectionUtils.setProperty(IntrospectionUtils.java:272)
at org.apache.tomcat.util.IntrospectionUtils.setProperty(IntrospectionUtils.java:261)
at org.apache.tomcat.util.digester.SetPropertiesRule.begin(SetPropertiesRule.java:215)
at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1282)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1543)
at org.apache.catalina.startup.Catalina.load(Catalina.java:554)
at org.apache.catalina.startup.Catalina.load(Catalina.java:595)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:262)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:430)
Run Code Online (Sandbox Code Playgroud)

Bal*_*usC 6

我需要在Tomcat 7中包含什么才能使javax.persistence正常工作?

不是从Oracle下载的Java EE SDK.它基本上包含Oracle Glassfish服务器.您似乎误解了Java EE究竟是什么.

我强烈建议您在尝试将其变为Glassfish服务器时撤消在Tomcat中所做的所有更改.或者,更好,从头开始重启.

您应该选择具体的JPA实现并安装它.有几个:

每个都有一个下载链接和体面的文档.Hibernate是最受欢迎的.EclipseLink是参考实现(因此在Glassfish的封面下使用).OpenJPA只是Apache Software Foundation的另一个.最终/WEB-INF/lib,在webapp 中删除具体JPA实现的JAR文件(因此不是Tomcat /lib).