我们先思考一个问题:EJB有三种会话,如何实现至少其中一种会话呢?使用的开发环境jdk1.7.0_67 + MyEclipse + Weblogic12c
我们以一个无状态会话bean 为例来看实现过程。
① 创建一个JavaProject (你也可以使用MyEclipse直接创建EJBProject),配置Build Path,将wlserver_12.1\server\lib\weblogic.jar 导入classpath
② 创建一个接口
package com;
public interface Helloworld
{
public String sayHello(String name);
}
③ 创建一个实现类
package com.impl;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import com.Helloworld;
@Stateless//该注解指明这是一个无状态的会话bean
@Remote(Helloworld.class)
public class HelloWorldBean implements Helloworld
{
public String sayHello(String name)
{
return "Hello,"+name;
}
}
将该EJB 发布在 Weblogic上有两种方法(前提:已经启动WebLogic)
一、使用MyEclipse 创建的EJB工程,像部署web工程一样部署,单击工具栏【Deploy MyEclipse J2EE Project to Server..】,选择要部署的项目,部署
二、将其打包成jar,可以使用MyEclipse打包,选择工程,点击右键->【Export】->【选择JAR file,单击next 】-> 【选择要打包的工程下面的类,修改JAR file,如D:\HelloEjb.jar,点击finish】。这样jar 包就打好了,名字和路径就是你填的 JAR file了
登陆WebLogic Server 管理控制台,【部署】-> 【安装】 -> 【选择刚才的jar包】->…默认,下一步直至完成…
点【部署】,会看到名称为【HelloEjb】 的工程,这说明我们的Ejb 工程发布成功。额,采用第一种方法自动部署的名称可能是随机产生的……
既然这里已经说EJB工程已经发布,那么我们如何访问它呢?这里写一个客户端代码去访问这个EJB。
创建一个测试类:
package test;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import com.Helloworld;
public class TestEjb
{
public static void main(String[] args)
{
System.out.println("begin ctx");
Hashtable cs = new Hashtable();
cs.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
cs.put(Context.PROVIDER_URL, "t3://localhost:7001");
try
{
Context ctx = new InitialContext(cs);
Helloworld objRef = (Helloworld)ctx.lookup("java:global.HelloEjb.HelloWorldBean");
System.out.println(objRef.getClass());
System.out.println(objRef.sayHello("sell"));
System.out.println("end ctx");
}
catch (NamingException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
注意:① 查看我们刚刚部署的工程的JNDI ,【服务器】->【单击你部署的服务器,如AdminServer】->【选择 配置-一般信息】->【单击 查看JNDI树】,如图,找出该EJB对应的JNDI 名称
② 在客户端编写的测试类,需要导入类 HelloWorld,即刚才所写的类。
测试类运行结果如下:
begin ctx
class com.sun.proxy.$Proxy0
Hello,sell
end ctx
大致就是这样了,我也不知道这中间是否有出错的地方……如果发现错了,请指出。
该贴被panpan.nie编辑于2014-10-20 18:09:33