2

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

4

1 回答 1

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
于 2013-08-21T13:06:35.533 回答