JPA IllegalArgumentException,但预期和实际类型相同

时间:2014-02-04 15:10:49

标签: java jpa eclipselink weblogic11g

最近,一位同事和我开始遇到WebLogic开发环境的问题。突然间,我们无法再部署我们的项目。

应用程序在Eclipse中构建,但是当我们部署到本地WebLogic实例时,我们收到IllegalArgumentException

SEVERE: Critical error during deployment: 
com.sun.faces.config.ConfigurationException: CONFIGURATION FAILED! java.util.concurrent.ExecutionException: java.lang.ExceptionInInitializerError
Caused by: javax.faces.FacesException: java.util.concurrent.ExecutionException: java.lang.ExceptionInInitializerError
Caused by: java.util.concurrent.ExecutionException: java.lang.ExceptionInInitializerError
Caused by: java.lang.ExceptionInInitializerError
Caused by: java.lang.IllegalArgumentException: You have attempted to set a value of type class ca.<orgdomain>.domain.FolderTransactionType for parameter 1 with expected type of class ca.<orgdomain>.domain.FolderTransactionType from query string select result from TransactionFee result where result.folderTransactionType = ?1 .
    at org.eclipse.persistence.internal.jpa.EJBQueryImpl.setParameterInternal(EJBQueryImpl.java:1202)

对我来说,关键的混淆点是“计划”类型和“预期”类型是相同的。

(可能的Red-Herring)我不确定它是否相关,但是两个受影响的系统都在不同的开发分支上(我们在一周前分叉),但我们都开始遇到问题。与我在同一分支上的另一位开发人员没有遇到问题。

1 个答案:

答案 0 :(得分:0)

正如@kocko建议的那样,这很可能是一个类加载器问题。

对象类型的真正运行时标识取决于类和加载它的类加载器。

如果运行时框架具有多个(不相关的)类加载器,并且在两个或更多个类中加载相同的类,则最终结果是具有相同名称的不同类。即使该类的两个“版本”的代码相同。

请注意,同一JVM中的不同“webapps”可能具有不同的类加载器。如果您遇到一个Web应用程序正在创建对象并将其传递给另一个Web应用程序的情况,则可能会遇到不兼容类型的问题。


  

你能指点一下如何跟踪这样的事情吗?

以下是一些提示:

  • 掌握比较中涉及的Class个对象,以及 确认它们是否为equal。如果没有检查他们各自的 类名和类加载器是。

  • 检查所有JAR文件以查看是否存在违规类 多个JAR。

  • 阅读Weblogic文档,了解它如何管理 类加载器。然后检查您配置它们的方式。