EJB - 網頁服務



EJB 3.0 提供一個選項,將會話 EJB 公開為網頁服務。使用 @WebService 註解標記一個類作為網頁服務端點,使用 @WebMethod 公開方法作為客戶端的網頁方法。

@Stateless
@WebService(serviceName="LibraryService")
public class LibraryPersistentBean implements LibraryPersistentBeanRemote {
	
   ...
   @WebMethod(operationName="getBooks")
   public List<Book> getBooks()  {    
      return entityManager.createQuery("From Books").getResultList();
   }
   ...
}

示例應用程式

讓我們建立一個 EJB 測試應用程式,以測試 EJB 3.0 中的 Blob/Clob 支援。

步驟 說明
1

在包 com.tutorialspoint.entity 下建立一個 EjbComponent 名稱的專案,如 EJB 中所解釋的 - 建立應用程式章節。請使用 EJB 中建立的專案 - 永續性章節,以瞭解 EJB 概念中的 Clob/Blob 物件。

2

使用 EJB - 永續性章節作為參考,在包 com.tutorialspoint.stateless 下建立 LibraryPersistentBean.java。保持其他檔案不變。

3

清理並構建應用程式,確保業務邏輯按要求工作。

4

最後,以 jar 檔案的形式在 JBoss 應用程式伺服器上部署該應用程式。如果 JBoss 應用程式伺服器尚未啟動,它將自動啟動。

LibraryPersistentBean.java

package com.tutorialspoint.stateless;

import com.tutorialspoint.entity.Book;
import java.util.List;
import javax.ejb.Stateless;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Stateless
@WebService(serviceName="LibraryService")
public class LibraryPersistentBean implements LibraryPersistentBeanRemote {
    
   public LibraryPersistentBean() {
   }

   @PersistenceContext(unitName="EjbComponentPU")
   private EntityManager entityManager;         

   public void addBook(Book book) {
      entityManager.persist(book);
   }    
   
   @WebMethod(operationName="getBooks")
   public List <Book> getBooks() {
      return entityManager.createQuery("From Book").getResultList();
   }
}

JBoss 應用程式伺服器日誌輸出

10:51:37,271 INFO  [EJBContainer] STARTED EJB: com.tutorialspoint.stateless.LibraryPersistentBean ejbName: LibraryPersistentBean
10:51:37,287 INFO  [JndiSessionRegistrarBase] Binding the following Entries in Global JNDI:

	LibraryPersistentBean/remote - EJB3.x Default Remote Business Interface
	LibraryPersistentBean/remote-com.tutorialspoint.stateless.LibraryPersistentBeanRemote - EJB3.x Remote Business Interface

10:51:37,349 INFO  [EJBContainer] STARTED EJB: com.tuturialspoint.messagebean.LibraryMessageBean ejbName: BookMessageHandler
10:51:37,443 INFO  [DefaultEndpointRegistry] register: jboss.ws:context=EjbComponent,endpoint=LibraryPersistentBean
10:51:38,191 INFO  [WSDLFilePublisher] WSDL published to: file:/D:/Jboss-5.0.1/server/default/data/wsdl/EjbComponent.jar/
LibraryService3853081455302946642.wsdl

建立客戶端以訪問 EJB 作為網頁服務

在 NetBeans IDE 中,選擇“檔案 > 新建專案 >”。在類別“Java”下選擇專案型別,在“Java 應用程式”下選擇專案型別。單擊“下一步 >”按鈕。輸入專案名稱和位置。單擊“完成 >”按鈕。我們選擇了 EJBWebServiceClient 作為名稱。

在專案資源管理器視窗中右鍵單擊專案名稱。選擇“新建 > WebService 客戶端”。

WSDL Client

在“編譯”選項卡中,使用“新增專案”按鈕新增之前在 WSDL 和客戶端位置下建立的 EJB 元件專案的 LibraryPersistentBean。

Web Service Bean

單擊完成按鈕。驗證專案資源管理器中的以下結構。

Web Service Bean

建立 EJBWebServiceClient.java

package ejbwebserviceclient;

public class EJBWebServiceClient {
   public static void main(String[] args) {   
   }
}

選擇網頁服務 getBooks 網頁方法(如下圖所示),並將其拖放到 EJBWebServiceClient 的程式碼視窗中。

Web Service Method drag

您將看到類似於以下內容的輸出。

Web Service Method dragged

更新 EJBWebServiceClient 程式碼以使用該方法。

package ejbwebserviceclient;

public class EJBWebServiceClient {

   public static void main(String[] args) {
      for(com.tutorialspoint.stateless.Book book:getBooks()) {
         System.out.println(book.getName());
      }       
   }

   private static java.util.List
   <com.tutorialspoint.stateless.Book> getBooks() {
      com.tutorialspoint.stateless.LibraryService service = 
         new com.tutorialspoint.stateless.LibraryService();
      com.tutorialspoint.stateless.LibraryPersistentBean port = 
         service.getLibraryPersistentBeanPort();
      return port.getBooks();
   }      
}

執行客戶端

在專案資源管理器視窗中右鍵單擊專案名稱。選擇“執行”。Netbeans 將構建客戶端並執行它。驗證以下輸出。

ant -f D:\\SVN\\EJBWebServiceClient run
init:
Deleting: D:\SVN\EJBWebServiceClient\build\built-jar.properties
deps-jar:
Updating property file: D:\SVN\EJBWebServiceClient\build\built-jar.properties
wsimport-init:
wsimport-client-LibraryPersistentBean:
files are up to date
classLoader = java.net.URLClassLoader@4ce46c
SharedSecrets.getJavaNetAccess()=java.net.URLClassLoader$7@182cdac
wsimport-client-generate:
Compiling 1 source file to D:\SVN\EJBWebServiceClient\build\classes
compile:
run:
learn java
Learn Spring
learn JSF
Learn HTML
Learn JBoss
Learn EJB
Learn Hibernate
Learn IBatis
Times Now
learn html5
Learn images
Learn Testing
Forbes
test1
BUILD SUCCESSFUL (total time: 1 second)
廣告