我目前正在升级我们的业务javaee环境。应该实现一个新特性,它允许管理影响同一服务器上其他web应用程序的web框架中的维护通知。通知应该使用EJB传输(要么是框架将它们发送到应用程序,要么是应用程序请求它们)。
我试图基于接口实现它。这些接口用于方法签名,而这些接口的具体实现仅由are框架分别知道--应用程序。但是,所有调用都会在ClassNotFoundException (当框架向应用程序发送通知时)或ClassCastException (当应用程序请求新的维护时)失败。
问题是:是否不可能使用接口来实现这个功能?我总是需要双方的具体实现吗?前面的EJB查找使用接口(@Remote注释)工作,那么为什么我有这些异常呢?
提前感谢!
我将给您简要介绍我的课程,以便您了解更多关于我正在做什么的信息:
当RemoteMaintenanceEJBImpl向MaintenanceInfoImpl发送MaintenanceInfoImpl时,将使用以下方法:
public interface IApplicationImpl {
public void announceMaintenance(IMaintenanceInfo maintenanceInfo);
}调用
remoteApplication.announceMaintenance(new MaintenanceInfoImpl(date/*, ...*/))当应用程序端尝试查找仅在webframework端可用的MaintenanceInfoImpl时,应用程序端会出现ClassNotFoundException故障。
由: package.webapp.wf.framework.MaintenanceInfoImpl从模块"deployment.CommonDBFrontend.war:main“发出,来自服务模块加载器,在org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190),在org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468),在org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456),在org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398),在org.jboss.modules.ConcurrentClassLoader。org.jboss.marshalling.cloner.ClassLoaderClassCloner.clone(ClassLoaderClassCloner.java:49) at org.jboss.marshalling.cloner.SerializingCloner.clone(SerializingCloner.java:157) at org.jboss.marshalling.cloner.SerializingCloner.clone(SerializingCloner.java:134) at org.jboss.marshalling.cloner.SerializingCloner.clone(SerializingCloner.java:186) at java.lang.Class.forName(未知来源)在org.jboss.marshalling.cloner.SerializingCloner.clone(SerializingCloner.java:134) at org.jboss.as.ejb3.remote.LocalEjbReceiver.clone(LocalEjbReceiver.java:267)
再次引发此异常(JBoss为7.1.2)
java.lang.RuntimeException: JBAS014154:未能封送EJB参数
当ApplicationEJBImpl向RemoteMaintenanceEJBImpl请求新的维护时,将使用以下方法:
public interface IRemoteMaintenanceEJB {
pubilc List<IMaintenanceInfo> getMaintenances();
}异常时调用失败。
由: package.webapp.wf.framework.MaintenanceInfoImpl : package.webapp.ejb.impl.ApplicationEJBImpl.announceMaintenance(ApplicationEJBImpl.java:187)无法转换为package.webapp.ejb.IMaintenanceInfo at package.webapp.ejb.impl.ApplicationEJBImpl.initialize(ApplicationEJBImpl.java:96) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) rt.jar:1.7.0_11 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) rt.jar:1.7.0_11在sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown来源) rt.jar:1.7.0_11 at java.lang.reflect.Method.invoke(未知来源) rt.jar:1.7.0_11 .
发布于 2014-11-11 09:29:31
为类java.io.Serializable实现MaintenanceInfoImpl,并确保为相同的类设置serialVersionUID。
https://stackoverflow.com/questions/14687878
复制相似问题