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 可以通过几个不同的接口可见,如示例所示;但是,至少需要有一个。
所以当我在 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 可以通过几个不同的接口可见,如示例所示;但是,至少需要有一个。