首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EJB:方法调用和接口

EJB:方法调用和接口
EN

Stack Overflow用户
提问于 2013-02-04 13:33:40
回答 1查看 3.8K关注 0票数 1

我目前正在升级我们的业务javaee环境。应该实现一个新特性,它允许管理影响同一服务器上其他web应用程序的web框架中的维护通知。通知应该使用EJB传输(要么是框架将它们发送到应用程序,要么是应用程序请求它们)。

我试图基于接口实现它。这些接口用于方法签名,而这些接口的具体实现仅由are框架分别知道--应用程序。但是,所有调用都会在ClassNotFoundException (当框架向应用程序发送通知时)或ClassCastException (当应用程序请求新的维护时)失败。

问题是:是否不可能使用接口来实现这个功能?我总是需要双方的具体实现吗?前面的EJB查找使用接口(@Remote注释)工作,那么为什么我有这些异常呢?

提前感谢!

我将给您简要介绍我的课程,以便您了解更多关于我正在做什么的信息:

  • 接口: IMaintenanceInfo:这个接口将用于EJB方法调用,并包含有关单个维护的信息。
  • 接口: IRemoteMaintenanceEJB:这个接口是RemoteMaintenanceEJB的@远程接口。这是应用程序用来要求新的维护。
  • 接口: IApplicationEJB:这个接口用于接收来自webframework的维护通知。是“遥控器”。
  • 类: MaintenanceInfoImpl:这个类实现了IMaintenanceInfo
  • 类: RemoteMaintenanceEJBImpl:这个类实现了IRemoteMaintenanceEJB
  • 类: ApplicationEJBInfo:这个类实现了IApplicationEJB

RemoteMaintenanceEJBImplMaintenanceInfoImpl发送MaintenanceInfoImpl时,将使用以下方法:

代码语言:javascript
复制
public interface IApplicationImpl {
    public void announceMaintenance(IMaintenanceInfo maintenanceInfo);
}

调用

代码语言:javascript
复制
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参数

ApplicationEJBImplRemoteMaintenanceEJBImpl请求新的维护时,将使用以下方法:

代码语言:javascript
复制
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 .

EN

回答 1

Stack Overflow用户

发布于 2014-11-11 09:29:31

为类java.io.Serializable实现MaintenanceInfoImpl,并确保为相同的类设置serialVersionUID。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14687878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档