簡體   English   中英

遠程客戶端訪問JBOSS AS中部署的EJB的JNDI循環(最終版7.1.1)

[英]JNDI loopup for a remote client accessing an EJB deployed in JBOSS AS (7.1.1 final)

我創建了一個簡單的EJB 3.0應用程序,該應用程序最終部署在JBOSS 7.1.1中。

這是代碼:

EJB 1:

接口

package com.example.server.local.bean;

import javax.ejb.Local;

@Local
public interface UtilLocalBeanLocal {

    public String addString();
}

實現此接口的類:

package com.example.server.local.bean;

import javax.ejb.Local;
import javax.ejb.Stateless;

@Stateless
@Local(value=UtilLocalBeanLocal.class)
public class UtilLocalBean implements UtilLocalBeanLocal {

    public UtilLocalBean() {

    }

   @Override
   public String addString() {

        return "Added from Local bean"; 
    }
}

因此,我正在創建該EJB以供另一個EJB使用“本地”。

EJB 2:

接口

package com.example.bean.session;

import javax.ejb.Remote;

@Remote
public interface FirstBeanRemote {

    public String callMe();
}

實現此接口的類。

package com.example.bean.session;

import javax.ejb.EJB;
import javax.ejb.Remote;
import javax.ejb.Stateless;

import com.example.server.local.bean.UtilLocalBeanLocal;

@Stateless
@Remote(value=FirstBeanRemote.class)
public class FirstBean implements FirstBeanRemote {

    @EJB
    private UtilLocalBeanLocal utilLocalBeanLocal;

    public FirstBean() {

    }

    @Override
    public String callMe() {

        return "Hi there!" + utilLocalBeanLocal.addString();
    }
}

當我啟動JBOSS時,我得到的JNDI綁定是這樣的:

00:34:15,928 INFO  [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-5) JNDI bindings for session bean named FirstBean in deployment unit subdeployment "EJB30TestProj.jar" of deployment "EJB30TestProjEAR.ear" are as follows:

java:global/EJB30TestProjEAR/EJB30TestProj/FirstBean!com.example.bean.session.FirstBeanRemote
java:app/EJB30TestProj/FirstBean!com.example.bean.session.FirstBeanRemote
java:module/FirstBean!com.example.bean.session.FirstBeanRemote
java:jboss/exported/EJB30TestProjEAR/EJB30TestProj/FirstBean!com.example.bean.session.FirstBeanRemote
java:global/EJB30TestProjEAR/EJB30TestProj/FirstBean
java:app/EJB30TestProj/FirstBean
java:module/FirstBean

但是,在遠程客戶端中,當我嘗試使用上述JNDI綁定值中的任何一個時,它不起作用,並且實際起作用的(在大量google之后)是:

ejb:EJB30TestProjEAR/EJB30TestProj//FirstBean!com.example.bean.session.FirstBeanRemote

很難理解這個JNDI綁定是如何工作的。 JBOSS輸出不同的JNDI,而實際上起作用的是不同的JNDI。

有人可以揭開這個神秘面紗嗎? (如何確定哪些JNDI綁定將在不同的場景下工作以及任何其他指針)

您提到的綁定值已准備就緒,可以在本地查找,比如說在您發布ejb的服務器中。 全局,模塊,應用程序是作用域限制,您可以在其中使用每個限制。 例如,您可以使用模塊作用域從同一ejb模塊的其他ejb查找一個ejb,但是即使是同一應用程序(ear或war)的模塊,也無法從另一個ejb模塊進行查找,您必須至少使用應用范圍,您可以在兩種情況下使用appglobal

我強烈建議您花些時間閱讀Jboss AS7 JNDI Referencia,但要了解遠程查找,請轉至“ 遠程JNDI”部分

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM