2013-12-13 123 views
1

我有一個EJB ear部署到Weblogic。 EJB有一些JMS隊列設置,它通過設計發送消息。 客戶端web應用程序調用EJB是在同一機器上的另一個JVM運行(以模擬遠程呼叫)使用EJB客戶端jar進行遠程EJB訪問

EJB接口

@Remote 
public interface MyLog { 
    public void doSomething(); 
} 

在客戶端

Maven的依賴關係包括以下。我正在使用ejb jar本身。我如何去生成ejb客戶端jar和兩者之間的區別是什麼?

org.ihc.myLog myLog的EJB 1.0 罐子

我使用的是春天來查找EJB和我使用的是EJB JAR(不知道我完全理解之間的區別ejb jar和ejb-client jar)。

<bean id="myLog" parent="MyEjbParent" lazy-init="false"> 
    <property name="jndiName" value="MyLog#org.ihc.My.MyLog"/> 
    <property name="businessInterface" value="org.ihc.audit.AuditLog"/> 
    <property name="lookup-home-on-startup" value="false"/> 
</bean> 

我正在使用Spring DI將myLog連接到類的相應屬性並執行我的操作。

myLog.doSomething();

問題是,當我嘗試部署調用EJB的Web應用程序時,部署失敗,說明未在客戶端應用程序服務器上設置JMS隊列。我不明白爲什麼客戶端應用程序服務器需要安裝JMS隊列,因爲它們已經在運行EJB實例的Weblogic服務器上設置。客戶端不應該只關心調用遠程方法並讓EJB執行它?可能是我的配置是錯誤的或別的?謝謝。

下面是客戶端的Web應用程序,調用EJB

|Exception while loading the app : EJB Container initialization error 
com.sun.appserv.connectors.internal.api.ConnectorRuntimeException: JMS resource 
not created : jms.mylog_queue 
+0

如果我的答案幫你投票;-) – Diversity

回答

1

貴EJB客戶端,或配置文件 罈子EJB的用或它僅包含接口的部署過程中出現了錯誤類。 似乎你的客戶端服務器也嘗試初始化你的bean,這確實不是必需的。

嘗試從服務器代碼中分離客戶端代碼。您的客戶端只需要知道 遠程接口,並且您的客戶端服務器需要所有ejb-client依賴關係 才能調用所有ejb remote - > rmi-iiop的東西。

更新由於評論:

創建一個單獨的WEB項目。僅僅依靠它需要調用 遠程EJBS。在這種情況下,遠程接口。 如果它是一個Web項目,而不是隻放入此WEB-Project所需的 的配置,並將其作爲WAR文件部署,而不是作爲JAR或EAR部署。

+0

客戶端jar包含所有的EJB類。它還有一個帶有ejb-jar.xml文件的META-INF文件夾。這應該在客戶端jar嗎?我認爲你是正確的,它試圖初始化它本不應該的EJB容器本身。我如何去分離客戶端代碼和服務器代碼。我的配置不應該觸發創建一個EJB呢? – user6123723

+0

這裏是問題所在。刪除所有配置文件或註釋的ejb實現。因爲在部署期間,它也會嘗試初始化ejbs,但客戶端服務器中不存在jms配置,因此部署失敗。 – Diversity

+0

有道理。但是我在客戶端代碼中沒有任何註釋或ejb聲明。我有上面提到的用於創建Business接口實例的spring配置。我正在將它注入Spring管理的bean。我使用這個注入的實例來調用業務接口方法。所以這讓我感到困惑,爲什麼在部署客戶端Web應用程序時觸發EJB創建。我錯過了一些鬼鬼祟祟的東西! – user6123723