会话bean(session bean)会话bean分有状态与无状态两种,因为有状态会话bean的一个实例只供一个用户使用,性能开销较大,所以一般不使用,本次用的是无状态会话bean。先新建一个EJB项目TestEJB,接着建一个接口类//helloEJB.java
package com.test.ejb;
public interface helloEJB {
public String sayHello(String name);
}
再建一个session bean来实现接口,注意这一步需要在eclipse—>properties—>Java Buid Path中导入额外的jar包,否则ejb会报错。因为EJB实例用的是weblogic部署,所以导入的是weblogic安装文件夹下wlserver10.3—>server—>lib文件夹中的wlclient.jar包
//helloEJBBean.java
package com.test.ejb;
import javax.ejb.Remote;
import javax.ejb.Stateless;
@Stateless(mappedName = "helloEJB")
@Remote(helloEJB.class)
public class helloEJBBean implements helloEJB{
public String sayHello(String name) {
return "hello," + name;
}
}
然后把项目打包成jar文件,在weblogic控制台中部署,接着新建java项目进行测试
//hello.java
package com.test.run;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import com.test.ejb.helloEJB;
public class hello {
public static void main(String args[]) throws NamingException{
Properties p=new Properties();p.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
p.put(Context.PROVIDER_URL,"t3://192.168.1.102:7001");
Context cxt = new InitialContext(p);
helloEJB ejb = (helloEJB) cxt.lookup("helloEJB#com.test.ejb.helloEJB");
String str = ejb.sayHello("nike");
System.out.println(str);
}
}
注意,该项目中同样需导入上述的wlclient.jar包,另外还需导入打包好的EJB项目,否则也会报错。在生成ejb后应该已经建立了本地接口和远程接口,在部署ejb时weblogic会根据这两个接口自动生成本地接口类和远程接口类。所以不用实现这两个接口类,但必须在开发客户端程序的时候将这两个接口的类文件放到客户端工程中。
代码中”192.168.1.102”为本机ip地址,weblogic建域的时候监听的地址,也就是进入控制台需要输入的地址。
"helloEJB#com.test.ejb.helloEJB"为EJB项目绑定的JNDI名称,在控制台—>管理服务器—>查看JNDI树。
最后运行结果