2013-08-20 73 views
2

我需要幫助從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.The Spring應用程序上下文包含以下項的Web應用程序:

<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

首先,檢查你的ejb組件的真正的jndi-name,通常是應用服務器在日誌文件中打印一些關於它的信息。 然後嘗試這樣定義

<jee:remote-slsb 
     id="taskStarter" 
     jndi-name="ejb/TaskStarterBean#ru.TaskStarterRemote" 
     business-interface="ru.TaskStarter" 
     lookup-home-on-startup="false" 
    /> 

我表明我的這種結構實現SLSB:

@Remote(TaskStarterRemote.class) 
@Local(TaskStarterLocal.class) 
@Stateless 
public class TaskStarterBean implements TaskStarter 

@Remote 
public interface TaskStarterRemote extends TaskStarter 

public interface TaskStarter