- EJB 教程
- EJB - 主页
- EJB - 概览
- EJB - 设置环境
- EJB - 创建应用程序
- EJB - 无状态 Bean
- EJB - 有状态 Bean
- EJB - 持久性
- EJB - 消息驱动Bean
- EJB - 注解
- EJB - 回调
- EJB - 定时器服务
- EJB - 依赖注入
- EJB - 拦截器
- EJB - 可嵌入对象
- EJB - Blob/Clob
- EJB - 事务
- EJB - 安全
- EJB - JNDI 绑定
- EJB - 实体关系
- EJB - 访问数据库
- EJB - 查询语言
- EJB - 异常处理
- EJB - 网页服务
- EJB - 封装应用程序
- EJB 有用资源
- EJB - 快速指南
- EJB - 有用资源
- EJB - 讨论
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 和客户端位置下创建的 EJB 组件项目的 LibraryPersistentBean。
单击完成按钮。验证项目资源管理器中的以下结构。
创建 EJBWebServiceClient.java
package ejbwebserviceclient;
public class EJBWebServiceClient {
public static void main(String[] args) {
}
}
选择网页服务 getBooks 网页方法(如下图所示),并将其拖放到 EJBWebServiceClient 的代码窗口中。
您将看到类似于以下内容的输出。
更新 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)