Java JPA IllegalArgumentException,但预期类型和实际类型相同
最近,我和一位同事开始在我们的WebLogic开发环境中遇到问题。突然,我们不能再部署我们的项目了 应用程序在Eclipse中构建,但当我们部署到本地WebLogic实例时,我们会收到一个Java JPA IllegalArgumentException,但预期类型和实际类型相同,java,jpa,eclipselink,weblogic11g,Java,Jpa,Eclipselink,Weblogic11g,最近,我和一位同事开始在我们的WebLogic开发环境中遇到问题。突然,我们不能再部署我们的项目了 应用程序在Eclipse中构建,但当我们部署到本地WebLogic实例时,我们会收到一个IllegalArgumentException SEVERE: Critical error during deployment: com.sun.faces.config.ConfigurationException: CONFIGURATION FAILED! java.util.concurrent.
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)
严重:部署期间出现严重错误:
com.sun.faces.config.ConfigurationException:配置失败!java.util.concurrent.ExecutionException:java.lang.ExceptionInInitializeError
原因:javax.faces.FacesException:java.util.concurrent.ExecutionException:java.lang.ExceptionInInitializerRor
原因:java.util.concurrent.ExecutionException:java.lang.ExceptionInInitializerError
原因:java.lang.ExceptionInInitializeError
原因:java.lang.IllegalArgumentException:您试图为参数1设置类型为class ca..domain.FolderTransactionType的值,预期类型为class ca..domain.FolderTransactionType from查询字符串选择result from TransactionFee result,其中result.FolderTransactionType=?1。
位于org.eclipse.persistence.internal.jpa.EJBQueryImpl.setParameterInternal(EJBQueryImpl.java:1202)
对我来说,关键的混淆点是“调度”类型和“预期”类型是相同的
(可能是转移注意力)我不确定这是否相关,但两个受影响的系统都在不同的开发分支上(我们一周前就分道扬镳了),但我们今天都开始遇到问题。与我在同一分支上的另一个开发人员没有遇到这个问题。正如@kocko所建议的,这很可能是类加载器问题 对象类型的真正运行时标识取决于类以及加载它的类加载器 如果您的运行时框架有多个(不相关的)类加载器,并且您在其中的两个或多个中加载同一个类,那么最终结果是具有相同名称的不同类。即使类的两个“版本”的代码相同 请注意,同一JVM中的不同“webapps”可能有不同的类加载器。如果一个webapp创建对象并将其传递给另一个webapp,则可能会遇到类型不兼容的问题
你能告诉我一些关于如何追踪这类事情的资源吗 以下是一些提示:
- 掌握比较中涉及的
对象,以及 确认它们是否相等。如果没有,请检查它们各自的 类名和类加载器都是可用的类
- 检查所有JAR文件,查看是否存在有问题的类 多个罐子
- 阅读Weblogic文档,了解它如何管理 类装入器。然后检查配置它们的方式