如何在 Resin 4.0.42 中类加载 Java EE 7 而不使用默认加载的 Default Javaee-16.jar 类

Posted

技术标签:

【中文标题】如何在 Resin 4.0.42 中类加载 Java EE 7 而不使用默认加载的 Default Javaee-16.jar 类【英文标题】:How to classload Java EE 7 in Resin 4.0.42 and not use the Default Javaee-16.jar classloaded by default 【发布时间】:2015-06-05 15:09:33 【问题描述】:

我正在使用最新的 Spring 框架 4.1.5 和 Hibernate-Entity-Manager 4.3.8 以及 Javax.Persistence-api 1.0.2 以及 JPA 2.1。该规范依赖于 Java EE 7。我注意到在 Resin 4.0.42 中,它使用“javaee-16.jar”。问题是我收到以下异常:

Caused by: java.lang.NoSuchMethodError: javax.persistence.Table.indexes()   
[Ljavax/persistence/Index; 
    at 
    org.hibernate.cfg.annotations.EntityBinder.processComplementaryTableDefinitions(EntityBinder.java:973) 
    at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:824) 
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3845) 


Method javax.persistence.Table.indexes() only exists in Java EE 7     
(Javax.Persistence-api 1.0.2) as a JPA 2.1 spec and NOT in Java EE 6 as a 
JPA  2.0 spec. 

问题是我的代码基于 JPA 2.1。反正我可以上课吗

<dependency> 
<groupId>javax</groupId> 
<artifactId>javaee-api</artifactId> 
<version>7.0</version> 
</dependency> 

即使在 Resin 类加载后:javaee-16.jar first?

【问题讨论】:

【参考方案1】:

让它在我首先加载子库的地方工作,而不是相反。 Resin 正在加载 Parent-first。我注意到其他人在仅实现 JPA 2.0 的应用服务器上实现 JPA 2.1 时遇到了同样的挑战。关键是每个应用服务器都有自己特定的方式来首先配置子库(或您的应用程序的库)。

在我的例子中,在 Resin.xml 中,添加以下内容:

<class-loader>
    <servlet-hack/>
</class-loader>

【讨论】:

嗨,我试过了,但是树脂的琥珀(树脂的 JPA 1.0 实现)在 persistence.xml 中抱怨 &lt;persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"&gt; is an unexpected top-level tag。它是 JPA 2.1 的命名空间。你是怎么摆脱它的? (树脂 4.0.43)【参考方案2】:

我有类似的错误,因为树脂有 jpa 2.0 并且应用程序需要 jpa 2.1

通过将 lib 添加到树脂配置文件中的树脂类路径来修复

<server-default>
   <jvm-classpath>path/to/lib/hibernate-jpa-2.1-api-1.0.2.Final.jar</jvm-classpath>
   ....
<server-default>

【讨论】:

以上是关于如何在 Resin 4.0.42 中类加载 Java EE 7 而不使用默认加载的 Default Javaee-16.jar 类的主要内容,如果未能解决你的问题,请参考以下文章

javascript中类式继承和原型式继承的实现方法和区别

Java中类加载机制和反射技术

PHP中类的自动加载

PHP中类的自动加载

PHP中类自动加载的方式

[resin] idea启动resin错误 illegal utf8 encoding at xxx