EJBConfigurationException IBM websphere 9.0.11

EJBConfigurationException IBM websphere 9.0.11

所以当我在 whebersphere 9.0.11 中部署我的应用程序时,我遇到了这个异常: 我需要在 ejb-jar.xml

中添加任何配置吗
com.ibm.ejs.container.ContainerException: Bean class xxxxxxxxxxx could not be found or loaded; nested exception is: 
    com.ibm.ejs.container.EJBConfigurationException: Configured xxxxxxxxx interface is not an interface : java.lang.Object of bean xxxxxxxxxxx

有人知道我错过了什么吗?

ps 一开始我还有一个例外:

[4/20/21 14:13:35:582 CET] 000000ab EJBWrapper    E   CNTR5011E: The java.lang.Object class has been configured as a business or component interface for the xxxxxxxx bean. However, the class is not an interface.

很可能,您的应用程序中的企业 bean 编码如下:

@Stateless
@Local
public class MyBean {...)

问题是存在 @Local 注释表示存在本地业务接口,但该接口并未在任何地方指定。本地接口最终默认为 Object,这不是有效的接口。 @Remote.

会出现类似的错误

启动应用程序时,服务器会检测到配置错误,并首先在日志中记录CNTR5011E错误信息。然后,服务器将抛出 EJBConfigurationException 以响应访问应用程序的尝试,稍后将其包装在 ContainerException 中。错误消息和异常都是针对同一个问题。

Enterprise Bean 规范提供了多种配置 bean 接口的方法:

无界面视图

@Stateless
public class MyBean {...)

只需删除 @Local 注释(或替换为 @LocalBean),bean class (MyBean) 将成为接口。类似于本地业务界面。

业务界面

@Stateless
@Local(Cart.class)
public class MyBean {...)

添加一个接口作为@Local注解的属性,它就成为了本地业务接口。同样,您可以使用 @Remote,或同时使用两者,但同一接口不能既是本地接口又是远程接口。如果愿意,您可以指定多个本地或远程接口。

业务接口 - 已实现

@Stateless
@Remote
public class MyBean implements RemoteCart {...)

改变class实现一个接口,然后变成remote/local业务接口,取决于注解。如果两个注释都不存在,实现的接口将默认为本地业务接口。

业务界面 - 注释界面

@Stateless
public class MyBean implements RemoteCart {...)

@Remote
public interface RemoteCart {...)

当接口被注解 @Local@Remote 时,如果 bean class 实现它,它就成为本地或远程业务接口。

组件接口(EJB 2.x API)

@Stateless
@LocalHome(CartLocalHome.class)
public class MyBean {...)

使用 @LocalHome@RemoteHome 注释提供 EJB 2.x API 组件接口。注解上指定了EJBLoclHome/EJBHome接口class,定义了组件home接口,然后根据[=33的return值确定组件接口=] 主页界面上的方法。

ejb 中声明的接口-jar.xml

<session>
    <ejb-name>MyBean</ejb-name>
    <remote-home>CartRemoteHome</remote-home>
    <remote>CartRemote</remote>
    <local-home>CartLocalHome</local-home>
    <local>CartLocal</local>
    <business-local>Cart</business-local>
    <business-remote>RemoteCart</business-remote>
    <local-bean/>
    <ejb-class>MyBean</ejb-class>
    <session-type>Stateless</session-type>
</session>

所有可以用注释完成的事情也可以在 XML 中完成。请注意,@Local 对应于 <business-local>,而 @Remote 对应于 <business-remtoe>。一个 bean 可以通过几个不同的接口可见,如示例所示;但是,至少需要有一个。