① EJB無狀態的bean(建立EJB的基礎教程)

吳濤_1618發表於2020-11-30

① EJB無狀態的bean

1.定義

無狀態會話bean是一種企業bean,它通常用來做獨立操作。無狀態會話Bean根據其名字沒有任何關聯的客戶端的狀態,但它可能會保留其例項的狀態。就相當於我們spring中的單例物件,能夠儲存資訊,服務於多個請求連線。

2.建立過程

2.1 建立服務端程式(EJBServer)

選擇Java Enterprise,同時勾選(EJB),注意選擇的jdk一定要是1.7.選擇jboss伺服器進行開發。
在這裡插入圖片描述
在這裡插入圖片描述

建立完成後,會自動在lib下面下載javax.ejb-api.jar,我們新建Hello World介面和HelloWorldBean實現類。
在這裡插入圖片描述

HelloWorldBean:

public interface HelloWorld {
    String sayHello(String name);
}

HelloWorldBean:

@Stateless(name = "HelloWorldBean")
@Remote
public class HelloWorldBean implements HelloWorld {
    @Override
    public String sayHello(String name) {
        System.out.println("吳濤濤最可愛!!!");
        return "hello"+name;
    }
}

Stateless:表示該bean為無狀態的bean。後面的name就是暴露出去的名稱。(預設為我們的方法名稱)
配置Jboss伺服器(注意是選擇war包的方式進行打包,若是失敗或者其他原因,可重新編譯或者重啟伺服器):
在這裡插入圖片描述
啟動伺服器成功(下圖所示是我們的訪問字串):
在這裡插入圖片描述

訪問字串(JNDI的命名規則):

"ejb:" + appName + "/" + moduleName + "/" + beanName + "!" + viewClassName;
部署檔案的名字
final String appName = ""; (as:EJBServerStateFul_war_exploded)
訪問模組的名字
final String moduleName = ""; (as:LibraryStatefulSessionBean)
介面類的全名
final String viewClassName = ""; (as:pers.jhl.session.stateless.LibraryStatefulSessionBeanRemote)
狀態值(適用於有狀態的情況,無狀態可不選)
stateful = "xxx"

完整示例(有狀態的情況之下)

ejb:/EJBServerStateFul_war_exploded/LibraryStatefulSessionBean!pers.jhl.session.stateless.LibraryStatefulSessionBeanRemote?stateful=TMingYi

2.2 建立客戶端程式(EJBClient)

建立普通的java程式。把jbossxxx/bin/client中的jboss-client.jar加入該客戶端的依賴之中。
在src目錄下建立 jboss-ejb-client.properties 配置檔案。
jboss-ejb-client.properties:

endpoint.name=client-endpoint
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default
remote.connection.default.host=localhost
remote.connection.default.port=4447
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
remote.connection.default.username=TMingYi
remote.connection.default.password=root

目錄架構圖如圖所示。(HelloWorld介面就是server端的介面,在maven中我們可以直接依賴,在這裡的官方的做法是吧介面檔案打成jar然後放入client進行依賴,但是這裡沒得必要,我們只要在同一包目錄下,建立這樣一個Hello World介面,效果和打成jar的效果一樣)。
在這裡插入圖片描述

編寫主程式(HelloWorldClient):

import pers.jhl.session.stateless.HelloWorld;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import java.util.Properties;

public class HelloWorldClient {
    public static void main(String[] args) {
        try{
            Properties pro = new Properties();
            pro.put(Context.URL_PKG_PREFIXES,"org.jboss.ejb.client.naming");
            pro.put("jboss.naming.client.ejb.context",true);

            Context context = new InitialContext(pro);
            HelloWorld h = (HelloWorld) context.lookup("ejb:/EJBServer_war_exploded/HelloWorldBean!pers.jhl.session.stateless.HelloWorld");
            System.out.println( h.sayHello("Medlen"));
        }catch(NamingException e){
            e.printStackTrace();
        }
    }
}

在伺服器執行的情況下,在執行此程式,即可看到列印:
在這裡插入圖片描述

相關文章