開發遠程接口的無狀態會話bean

 

開發遠程接口的無狀態會話bean

 

         由於無狀態會話bean不維護會話狀態,這就意味着一個bean實例可以爲多個用戶服務。簡單地說就是:當無狀態會話bean部署到應用服務器時,EJB容器會爲它預先創建一些bean實例放在對象池。無狀態會話bean比有狀態會話bean更具性能優勢,在條件允許的情況下開發人員首先考慮使用無狀態會話bean。

3.1 開發實現遠程接口的無狀態會話bean

 

1、定義一個遠程接口。 

package huizhi.HelloEJBRemote;

public interface HelloEJBRemote {
	public String hello(String name);
}

2、創建這個接口的實現類:

package huizhi.HelloEJBRemote;

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

@Stateless
@Remote( { HelloEJBRemote.class })
public class HelloEJBRemotebean implements HelloEJBRemote {

    public HelloEJBRemotebean() {
        
    }

    public String hello(String name) {
        return new String("你好," + name);
    }

}


對雙面的註釋的介紹:

@Stateless  註釋用來指定bean實現類是無狀態的。該註釋具有一個name屬性可用來爲bean實現類指定EJB名稱,例如:

            @Stateless(name="HelloEJB")

如果不指定該屬性,則默認就是不餓按實現類的類名。

@Remote   註釋用來指定bean實現類的遠程接口。bean實現類可以繼承多個遠程接口,每個接口之間用逗號隔開,例如:

            @Remote({HelloEJBRemote.class,UserEJBRemote.class})

如果只有一個遠程接口則可以省去大括號,本例亦是如此。

通過下面的JSP頁面來測試該會話bean:

<%@ page language="java" pageEncoding="GB2312" import="javax.naming.*, huizhi.HelloEJBRemote.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB2312">
<title>遠程無狀態會話bean遠程接口</title>
</head>
<body>
 <%
  try{
   InitialContext ctx = new InitialContext();
   HelloEJBRemote hr = (HelloEJBRemote)ctx.lookup("HelloEJBRemotebean/remote");
   out.println("<br>通過遠程接口調用EJB<br>" + hr.hello("李小婉"));
  }catch(Exception e){
   out.print("遠程接口調用失敗!");
  }
 %>
</body>
</html>

       上述代碼通過JNDI的方式查找到了HelloEJBRemote接口,並調用了該接口中的hello方法。lookup方法中的參數是會話bean的JNDI名稱,下面是會話bean的JNDI名稱的命名規則。

        當EJB組件發佈到JBoss時,如果我們沒有爲它指定全局JNDI名稱,JBoss就會按照默認的命名規則爲會話bean生成全局的JNDI名稱,默認的命名規則如下:

        (1)  如果把EJB作爲模塊打包進後綴爲*.ear 的Java EE 企業應用文件中,默認的全局JNDI名稱是:

  • 本地接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/local
  • 遠程接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/remote

        EAR-FILE-BASE-NAME 是 ear 文件的名稱,EJB-CLASS-NAMEEJB 的類名。

        例如,把本實例作爲EJB模塊打包進名爲HelloEJBRemote.ear 的企業應用文件中,他的遠程接口的JNDI名稱是:HelloEJBRemote/HelloEJBRemotebean/remote

        (2)  如果把EJB應用打包成後綴爲*.jar 的模塊文件,默認的全局JNDI名稱是:

  • 本地接口:EJB-CLASS-NAME/local
  • 遠程接口:EJB-CLASS-NAME/remote

        本實例打包成HelloEJBRemote.jar文件,它的遠程接口的JNDI名稱是:HelloEJBRemotebean/remote

        我們分別把該實例的會話bean和JSP頁面打包成HelloEJBRemote.jar 和 HelloEJB.war 文件。把這兩個文件複製到JBoss安裝目錄\server\default\deploy文件夾中即完成了部署。

發佈了28 篇原創文章 · 獲贊 4 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章