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スタックトラックの奥深くで上記と同じ例外が発生します(parseAnnotationsなど、スタックトレースにアクセスできたときに、今日の午後に編集しなかったのは悪いことです)。これは、クラスローダーの問題であり、私には理解できないことを意味します。

誰かが手がかりを持っている場合は、私に教えてください。

ありがとう、よろしく、 ケイ

4

1 に答える 1

0

問題が見つかりました。クラスローダー、可視性などとはまったく関係ありません。

何らかの理由で、Tomcat の webapps フォルダーがパッケージを再デプロイするときにクリーンアップされず、そこに古いファイルやバンドルなどがあり、上記の例外が発生することをまだ理解していません。

手動でクリーンアップし、すべてをTomcatにデプロイしました->魅力のように機能します...

そのような恣意的な問題がエラーを引き起こすのは嫌いです。

于 2016-04-13T06:29:19.070 に答える