簡體   English   中英

使用遠程獨立客戶端調用EJB 3.1會話Bean

[英]Invoking EJB 3.1 session Bean using remote standalone client

盡管我以前使用過EJB,但是我想再次向自己保證我了解它的真正工作原理。

因此,我創建了一個簡單會話Bean EJB(3.1),並將其打包為.ear(也具有客戶端jar)。 以下是代碼段:

會話Bean實現:

package com.example;
import javax.ejb.Stateless;

    @Stateless
    public class FirstSessionEJB implements FirstSessionEJBRemote {

    public FirstSessionEJB() {

    }

    @Override
    public String print() {

        return "Hello";
    }
}

遠程接口:

package com.example;

import javax.ejb.Remote;

@Remote
public interface FirstSessionEJBRemote {
    public String print();
}

我將此EJB部署為.ear,並將其成功部署到Wildfly 10.x

現在,我想使用在單獨的JVM中運行的獨立Java客戶端來訪問它。

這是客戶端代碼(由於我主要由於JNDI不清楚如何調用,因此可能未完成)。

package com.example.main;

import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import com.example.FirstSessionEJBRemote;

public class Main {

    public static void main(String[] args) throws NamingException {

        String GLOBAL_JNDI_NAME="java:global/FirstEJBProjEAR/FirstEJBProj/FirstSessionEJB!com.example.FirstSessionEJBRemote";

        Hashtable<String,String> jndiProperties = new Hashtable<>();
        jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");

        InitialContext ic = new InitialContext(jndiProperties);

        FirstSessionEJBRemote ejbRemote = null;
        ejbRemote = (FirstSessionEJBRemote)ic.lookup(GLOBAL_JNDI_NAME);
        ejbRemote.print();
    }
}

我提到這個就怎么做JNDI查找鏈接(什么在所有參數使用,但它無法正常工作。)

在鏈接中提到它具有特定於Wildfly的jar,無需JNDI查找即可工作。

誰能幫我理解:

1)查找需要為JNDI設置的所有屬性是什么?

2)客戶端應用程序中是否需要存在任何特定的jar?

我不想使用任何特定的Wildfly jar,也就是說,我想使用傳統的JNDI查找,所以有人可以指導我嗎?

僅僅編寫一個簡單的“ Hello world”類型的EJB感到非常沮喪。 我指的是一些不錯的書,但是它們提供的只是“查找”代碼,而沒有實際告訴JNDI需要包括所有屬性以及要包含的任何jar。

當您鏈接到文章的各州時,盡管隱藏在那堆文字中,但您確實需要在Wildfly服務器安裝(bin / client / jboss-client.jar)中找到的jboss-client.jar; 它必須在客戶端的運行時類路徑上。 它包含從代碼中引用的org.jboss.ejb.client.naming包開始。

該jar包含了一些額外的魔力,使客戶端能夠使用Wildfly服務器設置和維護EJB遠程調用,只是使用JNDI不會減少它。 而且沒有一個罐可以將它們全部統治,每個容器(Wildfly,Glassfish,Weblogic等)都有自己的客戶端庫實現。


請注意,從客戶端應用程序調用EJB是非常古老的做法(請閱讀:您不想這樣做)。 EJB技術的更現實和現代的觀點是在企業容器本身中使用它,例如從Web應用程序/戰爭中使用-例如,作為RESTful服務的一部分。 您可能甚至不需要EAR文件的額外層,您可以將所有內容整齊地打包到一個war應用程序中。

在那種情況下,如果您確實有一個客戶端應用程序,則該客戶端可以與RESTful服務進行通信-一個更簡單,跨服務器,跨平台的通信接口。

暫無
暫無

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

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