我需要帮助从Spring调用EJB远程接口。
我在JBoss中部署了遗留EJB。
Ejb-jar.xml列于下方。
<session>
<display-name>ServiceBean</display-name>
<ejb-name>ServiceBean</ejb-name>
<home>com.ejbproject.ejb.ServiceHome</home>
<remote>com.ejbproject.ejb.Service</remote>
<ejb-class>com.ejbproject.ejb.impl.ServiceBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
我有一个使用Spring的Web应用程序.Spring应用程序上下文包含以下条目:
<jee:remote-slsb id="myServiceBean"
jndi-name="ejb/ServiceBean"
business-interface="com.myproject.account.ejb.ServiceBean"
resource-ref='true'></jee:remote-slsb>
我在web项目中创建了业务接口ServiceBean,并添加了在ejb-jar.xml中定义的远程接口中定义的所有方法。
Web应用程序部署在同一JBoss服务器中。 但是当我尝试部署时,我得到一个命名异常'ServiceBean'没有绑定。我是否必须在web.xml中添加环境条目才能访问EJB(即使EJB和Web应用程序都部署在同一个JBoss中)?
答案 0 :(得分:1)
首先,检查ejb组件的真实jndi-name,通常应用程序服务器在日志文件中打印一些有关它的信息。 然后尝试定义像这样的slsb
<jee:remote-slsb
id="taskStarter"
jndi-name="ejb/TaskStarterBean#ru.TaskStarterRemote"
business-interface="ru.TaskStarter"
lookup-home-on-startup="false"
/>
我展示了我对这种结构的认识:
@Remote(TaskStarterRemote.class)
@Local(TaskStarterLocal.class)
@Stateless
public class TaskStarterBean implements TaskStarter
@Remote
public interface TaskStarterRemote extends TaskStarter
public interface TaskStarter