Spring EJB远程接口调用

时间:2013-08-20 09:52:04

标签: spring ejb

我需要帮助从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中)?

1 个答案:

答案 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