首先,我们看一下下面这张图片,了解一下通过远程调用接口的过程,从而知道远程调用接口和本地调用的区别,从而能够更好的 根据不同的情况而不同的方式调用EJB。
前面我们已经说了怎么开发远程调用的无状态的会话bean,所以现在我们就讲一下本地接口的无状态bean的开发吧。首先我们可以直接套用前面的例子,稍微做一下修改,让大家在了解开发本地调用接口的同时能够更好的发现他们之间的区别。
(1)当然,一开始我们就应该先新建一个java项目,然后我们新建一个本地接口,继承前面的远程接口HelloWorld.java的方法。让不管是本地接口调用或者是远程接口调用,其效果保持一致。
package com.ejb;
public interface HelloWorldLocal extends HelloWorld{
}
(2)新建一个EJB。
package com.ejb.impl;
import javax.ejb.Local;
import javax.ejb.Stateless;
import com.ejb.HelloWorldLocal;
import com.ejb.Other;
@Stateless //表示无状态会话 , 一定要记得这两个注解
@Local(HelloWorldLocal.class)//标识本地接口,默认也是为本地接口,括号中说明的是此时实现的是哪个接口
public class HelloWorldBean implements HelloWorldLocal {
@Override
public String sayHello(String name) {
return name + "说:Hello,世界!" ;
}
}
3)新建一个web项目EJB_HelloWorldClient,然后新建一个jsp文件。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ page import="javax.naming.*, com.ejb.*" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>EJB本地客户端调用</title> </head> <body> <% try { //在new这个工厂的时候,他会自动寻找jndi.properties InitialContext ctx = new InitialContext(); HelloWorldLocal helloWorld = (HelloWorldLocal) ctx.lookup("HelloWorldBean/local");//调用本地接口 out.println(helloWorld.sayHello("本地人")); } catch (NamingException e) { e.printStackTrace(); } %> </body> </html>
4)此时因为项目没有包含那些接口,肯定会报错,所以需要把之前的java项目引入。
5)然后两个项目都部署到同一个jboss中。然后在浏览器中访问。
本地无状态会话Bean开发就是这么简单。