0

我们正在使用 JPA(eclipselink 2.5.2 并且还尝试了 2.6.2)并且面临一个奇怪的问题:

我们有一些类,它们是通过自身的代理访问的(如本文所述(标记的解决方案):在调用其他方法时调用方法

现在,我们面临以下问题:当在我们的命名查询上调用 getResultList() 时,我们现在得到了这个异常:

Caused by: java.lang.NoClassDefFoundError: Could not initialize class java.lang.reflect.Proxy$ProxyAccessHelper
at java.lang.reflect.Proxy.newProxyInstance(Proxy.java:746)
at com.sap.core.persistence.jdbc.trace.ResultSetProxy.createProxy(ResultSetProxy.java:27)
at com.sap.core.persistence.jdbc.trace.TraceablePreparedStatement.executeQuery(TraceablePreparedStatement.java:78)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeSelect(DatabaseAccessor.java:1007)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:642)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:558)
at org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:1991)
at org.eclipse.persistence.sessions.server.ServerSession.executeCall(ServerSession.java:570)
at org.eclipse.persistence.sessions.server.ClientSession.executeCall(ClientSession.java:250)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:242)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:228)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeSelectCall(DatasourceCallQueryMechanism.java:299)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.selectAllRows(DatasourceCallQueryMechanism.java:694)
at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllRowsFromTable(ExpressionQueryMechanism.java:2738)
at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllRows(ExpressionQueryMechanism.java:2691)
at org.eclipse.persistence.queries.ReadAllQuery.executeObjectLevelReadQuery(ReadAllQuery.java:495)
at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:1168)
at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:899)
at org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1127)
at org.eclipse.persistence.queries.ReadAllQuery.execute(ReadAllQuery.java:403)
at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:1215)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2896)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1793)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1775)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1740)
at org.eclipse.persistence.internal.jpa.QueryImpl.executeReadQuery(QueryImpl.java:258)
at org.eclipse.persistence.internal.jpa.QueryImpl.getResultList(QueryImpl.java:469)

我调试了很长时间无济于事。jpa using 方法与定义代理的上下文相同,因此基本上应该存在实际的代理类。

编辑:我刚刚注意到问题与 JPA 无关。在代理中运行 method.getAnnotations() 时,我遇到了同样的问题。我在 java stacktrack 深处得到了与上面相同的异常(parseAnnotations 和其他东西,可惜我今天下午没有编辑,当时我可以访问 stacktrace)。这意味着这是一些类加载器问题,我无法理解。

如果有人有线索,请赐教。

谢谢和问候,凯

4

1 回答 1

0

发现了问题,它与类加载器、可见性和其他东西完全无关:

由于某些原因,我仍然没有弄清楚我的 tomcat 中的 webapps 文件夹在重新部署我的包时没有得到清理,并且那里有旧文件和包等,这导致了上面看到的异常。

手动清理它,将它全部部署到 tomcat -> 像魅力一样工作......

我讨厌它,当这样的任意问题导致错误时。

于 2016-04-13T06:29:19.070 回答