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支持.
Step | 描述 |
---|---|
1 | 在EJB-Create Application章节中解释,在com.it1352.entity包下创建一个名为EjbComponent的项目.请使用在EJB - Persistence章节中创建的项目本章来理解EJB概念中的clob/blob对象. |
2 | 在com.it1352.stateless包下创建LibraryPersistentBean.java.使用EJB - Persistence章节作为参考.保持其余文件不变. |
3 | 清理并构建应用程序以确保业务逻辑按照要求运行. |
4 | 最后,在JBoss Application Server上以jar文件的形式部署应用程序.如果JBoss应用服务器尚未启动,它将自动启动. |
package com.it1352.stateless; import com.it1352.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(); } }
10:51:37,271 INFO [EJBContainer] STARTED EJB: com.IT屋.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.IT屋.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
在NetBeans IDE中,选择,文件>新项目> .在类别下选择项目类型, Java ,项目类型为 Java应用程序.点击下一步> 按钮.输入项目名称和位置.点击完成> 按钮.我们选择了名称作为EJBWebServiceClient.
在Project explorer窗口中右键单击项目名称.选择新建> WebService客户端.
添加EJB组件使用编译选项卡中的添加项目按钮在WSDL和客户端位置下创建的项目的LibraryPersistentBean.
单击"完成"按钮.验证项目资源管理器中的以下结构.
package ejbwebserviceclient; public class EJBWebServiceClient { public static void main(String[] args) { } }
选择Web Service getBooks web方法,如下图所示,并将其拖到EJBWebServiceClient的代码窗口.
您将看到类似于下图所示的输出.
更新EJBWebServiceClient代码以使用此方法.
package ejbwebserviceclient; public class EJBWebServiceClient { public static void main(String[] args) { for(com.it1352.stateless.Book book:getBooks()) { System.out.println(book.getName()); } } private static java.util.List <com.it1352.stateless.Book> getBooks() { com.it1352.stateless.LibraryService service = new com.it1352.stateless.LibraryService(); com.it1352.stateless.LibraryPersistentBean port = service.getLibraryPersistentBeanPort(); return port.getBooks(); } }
右键单击Project中的项目名称资源管理器窗口.选择运行. 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)