尝试对同一appModule类进行实例化时发生ClassCast异常

时间:2019-04-21 16:08:26

标签: java java-ee oracle-adf weblogic12c

我正在尝试以编程方式实例化AppModule

但是我得到了classCastException

DefaultContext适合用于此用途。如果自动初始化为,则可能发生内存泄漏和/或意外行为。  执行不当。通过执行以下操作可以避免此消息  使用getCurrent()之前先使用initADFContext。>

  

java.lang.ClassCastException:com.oracle.ocs.adaa.model.AppModuleImpl无法转换为com.oracle.ocs.adaa.model.AppModuleImpl   在com.oracle.ocs.adaa.services.TreeTraverse.postTree(TreeTraverse.java:53)               在com.oracle.ocs.adaa.restwebservice.Client.postStrategyTree(Client.java:35)               在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处               在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)               在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)               在java.lang.reflect.Method.invoke(Method.java:498)               在org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory $ 1.invoke(ResourceMethodInvocationHandlerFactory.java:81)               在org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher $ 1.run(AbstractJavaResourceMethodDispatcher.java:144)               在org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:161)               在org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider $ ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:160)处               在org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:99)处               在org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:389)               在org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:347)               在org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:102)               在org.glassfish.jersey.server.ServerRuntime $ 2.run(ServerRuntime.java:326)               在org.glassfish.jersey.internal.Errors $ 1.call(Errors.java:271)               在org.glassfish.jersey.internal.Errors $ 1.call(Errors.java:267)               在org.glassfish.jersey.internal.Errors.process(Errors.java:315)               在org.glassfish.jersey.internal.Errors.process(Errors.java:297)               在org.glassfish.jersey.internal.Errors.process(Errors.java:267)               在org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317)               在org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305)               在org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154)               在org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:473)               在org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427)               在org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388)               在org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341)               在org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:228)               在weblogic.servlet.internal.StubSecurityHelper $ ServletServiceAction.run(StubSecurityHelper.java:286)               在weblogic.servlet.internal.StubSecurityHelper $ ServletServiceAction.run(StubSecurityHelper.java:260)               在weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:137)               在weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:350)               在weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25)               在weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)               在com.thetransactioncompany.cors.CORSFilter.doFilter(CORSFilter.java:198)               在com.thetransactioncompany.cors.CORSFilter.doFilter(CORSFilter.java:244)               在weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)               在oracle.security.jps.ee.http.JpsAbsFilter $ 3.run(JpsAbsFilter.java:174)               在java.security.AccessController.doPrivileged(本机方法)               在oracle.security.jps.util.JpsSubject.doAsPrivileged(JpsSubject.java:315)               在oracle.security.jps.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:650)               在oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:112)               在oracle.security.jps.ee.http.JpsAbsFilter.doFilterInternal(JpsAbsFilter.java:292)               在oracle.security.jps.ee.http.JpsAbsFilter.doFilter(JpsAbsFilter.java:149)               在oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:94)               在weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)               在oracle.security.wls.filter.SSOSessionSynchronizationFilter.doFilter(SSOSessionSynchronizationFilter.java:294)               在weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)               在oracle.dms.servlet.DMSServletFilter.doFilter(DMSServletFilter.java:248)               在weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78)               在weblogic.servlet.internal.WebAppServletContext $ ServletInvocationAction.wrapRun(WebAppServletContext.java:3706)               在weblogic.servlet.internal.WebAppServletContext $ ServletInvocationAction.run(WebAppServletContext.java:3672)               在weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:328)               在weblogic.security.service.SecurityManager.runAsForUserCode(SecurityManager.java:197)               在weblogic.servlet.provider.WlsSecurityProvider.runAsForUserCode(WlsSecurityProvider.java:203)               在weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:71)               在weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2443)               在weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2291)               在weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2269)               在weblogic.servlet.internal.ServletRequestImpl.runInternal(ServletRequestImpl.java:1705)               在weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1665)               在weblogic.servlet.provider.ContainerSupportProviderImpl $ WlsRequestExecutor.run(ContainerSupportProviderImpl.java:272)               在weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:352)               在weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:337)               在weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:57)               在weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41)               在weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:652)               在weblogic.work.ExecuteThread.execute(ExecuteThread.java:420)               在weblogic.work.ExecuteThread.run(ExecuteThread.java:360)

这是代码

private static AppModuleImpl am = null;
private static final String AM_CONFIG_NAME = "AppModuleLocal";
private static final String AM_DEF_NAME =     "com.oracle.ocs.adaa.model.AppModule";

public static void postTree(JSONObject json) throws Exception{

    am = (AppModuleImpl) Configuration.createRootApplicationModule(AM_DEF_NAME, AM_CONFIG_NAME);
    }

更新#1: 在google上出现此异常时,它说是因为同一类在运行时已由不同的类加载器加载了很多次

,我的应用程序结构如下: 1个示范项目 和 项目1具有model.jpr输出作为依赖项// 项目2还具有model.jpr输出作为依赖项

和应用程序的Ear包含项目1和war项目2的war文件 在每场战争中,都有一个用于该模型的.jar文件

我不确定这是否是原因(通过多次放置模型jar) 但是有没有办法为两个项目制作一个共享的jar?

1 个答案:

答案 0 :(得分:0)

首先,我们不需要整个堆栈跟踪,前十行左右就足够了。第二个始终指示产品的版本。第三,这是在ADF BC自定义代码中还是在ADF Faces Backing Bean中?我假设用户界面支持bean /代码吗?然后下一个问题是为什么要在客户端中实例化AM?这是非常不好的做法,您被告知不要执行此操作,因为与ADF BC的所有交互都应通过绑定容器以及AM或VO的公开方法进行。