最近在学习EJB3.0,也自己实际的操作了一把,中间遇到了很多问题,也学习到很多,现在将自己的一些心得分享一下。
首先,我们要知道,什么是EJB,EJB是用来干什么的?
高大上的说法:J2EE将业务逻辑从客户端软件中抽取出来,封装在一个组件中。这个组件运行在一个独立的服务器上,客户端软件通过网络调用组件提供的服务以实现业务逻辑,而客户端软件的功能只是单纯的负责发送调用请求和显示处理结果。在J2EE上,这个运行在一个独立的服务器上,并封装了业务逻辑的组件就是EJB(Enterprise JavaBean)组件。
通俗易懂(low)的说法:把你编写的软件中那些需要执行特定任务的类,不放在客户端软件上,而是给它打个包,单独的放在服务器上。
EJB3.0有3种类型的Bean:分别的会话Bean(Session Bean),实体Bean(Entity Bean)和消息驱动Bean(MessageDriven Bean)。
好了,现在进入正题,那么怎么样部署和实现一个简单的sessionbean呢?我用的是MyEclipse+Weblogic+EJB3.0。
(1)用MyEclipse创建一个EJBProject,配置BuildPath,将wlserve/serve/lib/weblogic.jar导入classpath
(2)创建一个接口类,HelloWorldRemote
package com.ejb3;
import javax.ejb.Remote;
@Remote
public interface HelloWorldRemote {
public String sayHello(String name);
}
(3)创建一个接口的实现类,HelloWorld
package com.ejb3;
import javax.ejb.Remote;
import javax.ejb.Stateless;
@Stateless
@Remote({HelloWorldRemote.class})
public class HelloWorld implements HelloWorldRemote {
public String sayHello(String name){
return name+"say hello.";
}
}
(4)将该EJBProject发布在Weblogic上,有两种方法,需要提前启动weblogic服务器
一:使用MyEclipse创建的EJB工程,像部署web工程一样的,点击run as->MyEclipse Serve Application,就会自动部署到Weblogic服务器上去了。
二:将其打包成jar,可以使用MyEclipse进行打包,选择工程,export->选择jar file,单击next->【选择要打包的工程下面的类,修改JAR file,如C:\Users\server\Desktop\HelloWorld.jar,点击finish】。这样jar 包就打好了,名字和路径就是你填的 JAR file了。
登陆weblogic console,部署->安装->选择刚才的jar包->接下来点下一步,完成就可以了,之后会看到名称为HelloWorld的ejb工程,说明我们发布部署成功,采用第一种发布方式,名称是你的项目名,后面跟一个(自动部署)
(5)通过客户端访问服务器上的EJB
创建一个EJBTest的javaproject客户端,在下面创建一个Test.java的测试类, 用来访问服务器上的EJB。
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import weblogic.jndi.WLInitialContextFactory;
import com.ejb3.HelloWorldRemote;
public class Test {
public static void main(String[] args)throws NamingException {
Properties prop = new Properties();
prop.setProperty(javax.naming.Context.INITIAL_CONTEXT_FACTORY, WLInitialContextFactory.class.getName());
prop.setProperty(javax.naming.Context.PROVIDER_URL, "t3://localhost:7001");
Context cxt=new InitialContext(prop);
HelloWorldRemote h = (HelloWorldRemote)cxt.lookup("java:global.HelloWorld.HelloWorld");
System.out.println(h.sayHello("chenming "));
}
}
*注意要导入ejb组件的jar包和weblogic的webfullclient.jar,不然会报出一系列找不到类,找不到命名名称的错误。
在lookup方法,也就是数据源引用的时候,那个参数我一直配置错误,导致一系列莫名其妙的错误,后来才知道要去查看我们刚刚部署的EJB的JNDI,点击左侧的,服务器->单击你部署的服务器,如AdminServer->选择 配置-一般信息->单击 查看JNDI树,如图,找出该EJB对应的JNDI 名称:
其中的版定名也就是我们lookup方法里需要填写的数据源参数。
运行客户端的Test测试类,输出如下:
至此,一个简单的session bean的部署和实现就完成了,希望抛砖引玉。
该贴被ming.chen编辑于2016-5-18 10:31:02