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