Hibernate 为了让javax.persistence正常工作,我需要在Tomcat7中包括什么?

Hibernate 为了让javax.persistence正常工作,我需要在Tomcat7中包括什么?,hibernate,jakarta-ee,tomcat,jpa,Hibernate,Jakarta Ee,Tomcat,Jpa,我正在尝试使用Java7和Tomcat7构建一个JSF/Hibernate应用程序。我已经安装了Java SDK和JavaEE SDK,并将JavaEE.jar和JavaEE-api-6.jar复制到我的Tomcat LIB文件夹中。根据我对和的理解,我应该拥有我需要的所有jar,并且据我所知,此文件夹中没有其他jar具有冲突的资源 jar文件包含看起来像Maven pom文件的内容,而不包含其他内容。我不确定它的价值是什么 我的javaee-api-6jar大小约为950k,包含我所期望的所

我正在尝试使用Java7和Tomcat7构建一个JSF/Hibernate应用程序。我已经安装了Java SDK和JavaEE SDK,并将JavaEE.jar和JavaEE-api-6.jar复制到我的Tomcat LIB文件夹中。根据我对和的理解,我应该拥有我需要的所有jar,并且据我所知,此文件夹中没有其他jar具有冲突的资源

  • jar文件包含看起来像Maven pom文件的内容,而不包含其他内容。我不确定它的价值是什么

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

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

  • 我正在使用的唯一相关包是来自javax.persistence的“实体”“Id”和“GeneratedValue”

  • 我只尝试使用了
    javaee-api-6.jar
    ,并将其重命名为
    javaee-api.jar
    javaee.jar
    ,没有任何更改。文件名似乎并不重要

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

所以我的问题是:为了让javax.persistence正常工作,我需要在Tomcat7中包含什么

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)
为了让javax.persistence正常工作,我需要在Tomcat7中包括什么

不是从Oracle下载的JavaEESDK。它基本上包含Oracle Glassfish服务器。您似乎误解了JavaEE的确切含义

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

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

每个都有一个下载链接和合适的文档。冬眠是最流行的。EclipseLink是参考实现(因此在Glassfish中的封面下使用)。OpenJPA只是Apache软件基金会的另一个。最终的问题是在webapp的
/WEB-INF/lib
中删除具体JPA实现的JAR文件(因此不是Tomcat的
/lib

为了让javax.persistence正常工作,我需要在Tomcat7中包括什么

不是从Oracle下载的JavaEESDK。它基本上包含Oracle Glassfish服务器。您似乎误解了JavaEE的确切含义

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

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


每个都有一个下载链接和合适的文档。冬眠是最流行的。EclipseLink是参考实现(因此在Glassfish中的封面下使用)。OpenJPA只是Apache软件基金会的另一个。最终的问题是在webapp的
/WEB-INF/lib
中删除具体JPA实现的JAR文件(因此不是Tomcat的
/lib

Hibernate看起来有一个实现。由于Tomcat没有,而且我在Glassfish中显然找不到,我应该在Hibernate中查找这些文件吗?哦,Tomcat lib文件夹中也有一个servlet-api.jar,并且似乎有一个ServletException.class的副本。Hibernate看起来有一个实现。既然Tomcat没有,而且我显然在Glassfish中找不到,我应该在Hibernate中查找这些文件吗?哦,Tomcat lib文件夹中也有一个servlet-api.jar,而且里面似乎有一个ServletException.class的副本。谢谢BalusC,我之前使用Tomcat的经历让我相信这是一个找到合适罐子的问题。如果你想看一看基于tomcat的TomEE可能值得一看:另一个非Spring/非TomEE的变体是openjpa+自动管理的servlet包装器(免责声明:我是为我的项目做的)。谢谢BalusC,我之前使用tomcat的经验让我相信这是一个找到正确jar的问题。我将采用这种方法。如果您想要一些基于tomcat的TomEE可能值得一看:另一个非Spring/非TomEE的变体是这个openjpa+自动托管servlet包装器(免责声明:我是为我的项目做的)