Web服务(Web Services)
优质
小牛编辑
134浏览
2023-12-01
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();
}
...
}
</book>
例子 Example Application
让我们创建一个测试EJB应用程序来测试EJB 3.0中的blob/clob支持。
步 | 描述 |
---|---|
1 | 在EJB-Create Application章节中解释,在cn.xnip.entity包下创建一个名为EjbComponent的项目。 请使用在EJB - Persistence章节中创建的项目,以便本章了解EJB概念中的clob/blob对象。 |
2 | 在cn.xnip.stateless包下创建LibraryPersistentBean.java。 使用EJB - Persistence章节作为参考。 保持其余文件不变。 |
3 | 清理并构建应用程序以确保业务逻辑按照要求运行。 |
4 | 最后,在JBoss Application Server上以jar文件的形式部署应用程序。 如果JBoss Application服务器尚未启动,它将自动启动。 |
LibraryPersistentBean.java
package cn.xnip.stateless;
import cn.xnip.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: cn.xnip.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-cn.xnip.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
创建客户端以作为Web服务访问EJB
在NetBeans IDE中,选择,File 》 New Project 》 。选择类别下的项目类型, Java ,项目类型为Java Application 。 单击“ Next 》按钮。输入项目名称和位置。 单击“ Finish 》按钮。 我们选择了名称作为EJBWebServiceClient。
在Project explorer窗口中右键单击项目名称。 选择“ New 》 WebService Client 。
使用compile选项卡中的“ Add Project按钮Add Project先前在WSDL和客户端位置下创建的EJB组件项目的LibraryPersistentBean。
单击完成按钮。 验证项目资源管理器中的以下结构。
Create EJBWebServiceClient.java
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(cn.xnip.stateless.Book book:getBooks()){
System.out.println(book.getName());
}
}
private static java.util.List
<cn.xnip.stateless.Book> getBooks() {
cn.xnip.stateless.LibraryService service =
new cn.xnip.stateless.LibraryService();
cn.xnip.stateless.LibraryPersistentBean port =
service.getLibraryPersistentBeanPort();
return port.getBooks();
}
}
运行客户端
在Project explorer窗口中右键单击项目名称。 选择Run 。 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)