EJB-Web 服务


EJB 3.0 提供了将会话 EJB 公开为 Web 服务的选项。@WebService 注释用于将类标记为 Web 服务端点,@WebMethod 用于将方法作为 Web 方法公开给客户端。

@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

按照 EJB - 创建应用程序一章中的说明,在 com.tutorialspoint.entity 包下创建一个名为 EjbComponent 的项目。请使用本章中在 EJB - 持久性一章中创建的项目来理解 EJB 概念中的 clob/blob 对象。

2

在 com.tutorialspoint.stateless 包下创建 LibraryPersistentBean.java。使用 EJB - 持久性章节作为参考。保持其余文件不变。

3

清理并构建应用程序,以确保业务逻辑按照要求运行。

4

最后,将应用程序以jar文件的形式部署在JBoss应用服务器上。如果 JBoss 应用服务器尚未启动,它将自动启动。

库PersistentBean.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 作为 Web 服务访问

在 NetBeans IDE 中,选择“文件”>“新建项目”>。在类别“ Java”下选择项目类型, “项目类型”为“Java 应用程序”。单击下一步 >按钮。输入项目名称和位置。单击完成 >按钮。我们选择名称为 EJBWebServiceClient。

右键单击项目资源管理器窗口中的项目名称。选择新建 > Web 服务客户端

WSDL客户端

使用编译选项卡中的“添加项目”按钮添加之前在 WSDL 和客户端位置下创建的 EJB 组件项目的 LibraryPersistentBean 。

网络服务Bean

单击完成按钮。在项目资源管理器中验证以下结构。

网络服务Bean

创建EJBWebServiceClient.java

package ejbwebserviceclient;

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

选择如下图所示的Web Service getBooks Web方法并将其拖至EJBWebServiceClient的代码窗口中。

Web服务方法拖动

您将看到类似于下图所示的输出。

拖拽Web服务方法

更新 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)