在weblogic中开发EJB2的HelloWorld小例子
最近在项目中需要用到EJB2,虽然以前学过EJB3,但是发现EJB2跟EJB3还是有些不同,下面写了一个HelloWorld的无状态的SessionBean,部署到webllogic10中,开发工具是Eclpise3.6。
首先看下EJB的相关知识,EJB作为JAVA EE的核心规范,其实就是一个分布式组件。简单说就是一个可以远程调用的JavaBean,它与普通的JavaBean主要有两点不同:第一是远程调用;第二是事务的处理,由EJB容器来帮我们处理。
EJB作为一种服务器端组件,有三种类型:
1.SessionBean:代表一个可处理应用中业务逻辑的完整组件,包含各种业务逻辑的实现代码
2.Entity Bean:处理数据
3.Message Driven Bean:实现消息的异步消费者
那么EJB由谁来调用呢?它是放在Server端的一个能够远程调用的JavaBean,它不仅可以被Java语言如Servlet、jsp等调用,还可以被C++语言调用。
那么这个远程调用的过程是如何的呢?Java是通过RMI协议来调用的,EJB也是基于RMI实现的,C++是通过Corba协议来调用的,Corba是公共对象请求代理服务。
分布式调用的基本过程:客户端发送一个请求给服务器,首先传给stub代理类,它发送参数给skeleton委托类,然后委托类调用实现类取得结果再原路返回,这样一个分布式处理就完成了。
下面介绍编写一个SessionBean的步骤:
1.写一个接口继承EJBObject:该接口作为远程接口
2.写一个接口继承EJBHome:该接口的create方法返回1中的接口类型
3.写一个实现类继承SessionBean:该类中实现业务方法
4.编写一个ejb-jar.xml文件:将上述三个文件联系起来
5.编写一个weblogic-ejb-jar.xml:用来连接查找资源
上面两个xml文件都需要在META-INF目录中,并且和上述的这些类文件一起打包到一个jar文件中,然后部署到Server中,至此就完成了EJB的部署。
远程接口HelloWorld
HelloWorld.java
package com.weibo.ejb;
import java.rmi.RemoteException;
import javax.ejb.EJBObject;
public interface HelloWorld extends EJBObject{
public String sayHello() throws RemoteException ;
}
远程home接口HelloWorldHome
HelloWorldHome.java
package com.weibo.ejb;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;
public interface HelloWorldHome extends EJBHome{
public HelloWorld create() throws RemoteException,CreateException;
}
实现类HelloWorldBean
HelloWorldBean.java
package com.weibo.ejb;
import java.rmi.RemoteException;
import javax.ejb.EJBException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
public class HelloWorldBean implements SessionBean {
public void ejbCreate(){
System.out.println("===ejbCreate()方法被调用===");
}
public void ejbActivate() {
System.out.println("===ejbActivate()方法被调用===");
}
public void ejbPassivate() {
System.out.println("===ejbPassivate()方法被调用===");
}
public void ejbRemove() {
System.out.println("===ejbRemove()方法被调用===");
}
public void setSessionContext(SessionContext ctx) throws EJBException,RemoteException {
System.out.println("===setSessionContext()方法被调用===");
}
public String sayHello() {
return "hello world,"+new java.util.Date();
}
}
ejb-jar.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
<ejb-jar id="ejb-jar_ID">
<enterprise-beans>
<session id="helloWorldEJB">
<ejb-name>HelloWorld</ejb-name>
<home>com.weibo.ejb.HelloWorldHome</home>
<remote>com.weibo.ejb.HelloWorld</remote>
<ejb-class>com.weibo.ejb.HelloWorldBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
</ejb-jar>
weblogic-ejb-jar.xml
<?xml version="1.0"?>
<!DOCTYPE weblogic-ejb-jar PUBLIC "-//BEA Systems, Inc.//DTD WebLogic 8.1.0 EJB//EN"
"http://www.bea.com/servers/wls810/dtd/weblogic-ejb-jar.dtd">
<weblogic-ejb-jar>
<weblogic-enterprise-bean>
<ejb-name>HelloWorld</ejb-name>
<jndi-name>HelloWorldName</jndi-name>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>
使用ant来进行编译打包:
build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="ejb" default="package" basedir="..">
<property name="app.dir" value="${basedir}/EJB2"/>
<property name="src.dir" value="${app.dir}/src"/>
<property name="weblogic.home" location="C:\BEA\wlserver_10.3"/>
<property name="build.dir" value="${app.dir}/build"/>
<property name="build.classes.dir" value="${build.dir}/classes"/>
<property name="build.classes.metainf" value="${build.classes.dir}/META-INF"/>
<path id="build.classpath">
<fileset dir="${weblogic.home}/server/lib">
<include name="*.jar"/>
</fileset>
<pathelement location="${build.classes.dir}"/>
</path>
<target name="prepare" depends="clean">
<mkdir dir="${build.dir}"/>
<mkdir dir="${build.classes.dir}"/>
<mkdir dir="${build.classes.metainf}"/>
</target>
<target name="compile" depends="prepare">
<javac srcdir="${src.dir}" destdir="${build.classes.dir}" debug="on" deprecation="on"
optimize="off" includes="com/**">
<classpath refid="build.classpath"/>
</javac>
<copy todir="${build.classes.metainf}">
<fileset dir="${app.dir}/META-INF">
<include name="ejb-jar.xml,weblogic-ejb-jar.xml"/>
</fileset>
</copy>
</target>
<target name="package" depends="compile">
<jar jarfile="${app.dir}\helloworld.jar">
<fileset dir="${build.classes.dir}">
<include name="**/*.*"/>
</fileset>
</jar>
</target>
<target name="clean">
<delete dir="${build.dir}"/>
</target>
</project>
将打包后的helloworld.jar部署到weblogic中,一种简易方法就是直接放入域的autodeploy目录中。本机的目录为:
C:\BEA\user_projects\domains\kacaric\autodeploy。此时ejb的部署就完成了。下面测试该EJB
下面编写客户端测试类:
HelloWorldClient.java
package com.weibo.client;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import com.weibo.ejb.HelloWorld;
import com.weibo.ejb.HelloWorldHome;
public class HelloWorldClient {
public static void main(String[] args) throws Exception{
Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
props.put(Context.PROVIDER_URL, "t3://localhost:7001");
InitialContext context = new InitialContext(props);
HelloWorldHome home = (HelloWorldHome)context.lookup("HelloWorldName");
HelloWorld hello = home.create();
System.out.println(hello.sayHello());
}
}
运行结果:hello world,Sun July 17 17:07:21 CST 2011
客户端测试类中的Properties是初始化weblogic中的xml信息,t3://localhost:7001是weblogic的特殊协议指向的ip位置,然后根据weblogic-ejb-jar.xml中配置的jndi名称找到EJB组件,即HelloWorldHome接口,随即通过它的create方法得到HelloWorld实例,调用sayHello方法。
分享到:
相关推荐
HelloWorld helloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote"); out.println(helloworld.SayHello("佛山人")); 5.用ant或eclipse,把客户端文件打成war包,发布到jboss上 6.输入...
这是EJB3.0的第一个例子HelloWorld
EJB3 基于maven项目测试,适合初学者,需要自行瞎子安装jboss5
一个简单的ejb,helloworld例子,里面有注释。
初学ejb,一个入门例子。 两个project,一个为ejb,一为客户端。 软件版本:jboss-4.2.3.GA,Jdk1.6.0,myeclipse 10.0 部署ejb后,客户端导入jboss的client下的所有jar包。
EJB2.0一个完整的Helloworld
(8):JBoss EJB3(HelloWorld)备忘记 15 摘要: 15 备忘记开始: 16 [1] 安装 jdk 5: 16 [2] 安装 JBoss EJB3: 16 [3] 第一次启动 JBoss: 18 [4] 安装 Eclipse WTP: 18 [5] 安装 JBoss IDE: 18 [6] 使用 ...
JBoss7.1与eclipse(indigo)集成,创建EJB3.x项目(HelloWorld)非常详细的图解步骤,内容包含下载连接地址,包含常见错误解答,新版本注意事项等
1,下载安装JDK1.6; 2,下载安装MyEclispse8.5; 3,下载安装JBoss4; 4,在MyEclispse8.5环境下配置JBoss4;...5,新建一个EJB3项目; 6,新建一个远程的无状态的SessionBean; 远程接口代码如下:
HELLOWORLD,学习EJB1 代码
NULL 博文链接:https://taoistwar.iteye.com/blog/344186
工程源代码 博文链接:https://hintcnuie.iteye.com/blog/243520
把文件用weblogic部署上去,然后反编译jar中的bind类 执行主方法weblogic就有打印出hello ejb的字样了,很好的一个ejb实例。
如果你想少走一些弯路,可以快速搭建出EJB3.0项目就从这里开始。因为第一次学习EJB3.0在网上找了一些实例却不是那么完整,索性自己动手配置了一边上传上来大家一起共享。
Java EJB简单例子,这是HelloWorldBean的Home接口,... HelloWorld hello= home.create(); //调用EJB对象方法printHelloWorld(),EJB对象把调用委派给Bean System.out.println (hello.printHelloWorld()); }
3. 把该项目导出为EJB格式的jar包到jboss-4.2.1.GA\server\default\deploy\目录 4. 在Eclipse中启动服务器 5. 运行app.Test客户端测试类 使用Eclipse 3.4 Ganymede开发EJB3.0的JavaEE应用比较简化和方便。该示例使用...
一个简单的EJB,helloworld,很适合初学者
心动不如行动,赶快说声HelloWorld 吧。 虽然使用EJB3 做项目非常好,但如果你的团队里没有一个对实体Bean 熟悉的人,最好先熟悉完了再开展项目, 否则将会给项目带有巨大的性能问题。 作者对一些新的概念...
如果运行一切正常,那么你会看到使用EJB 3.0组件与JPA技术层技术完成的Hello world演示应用。 注意:配置JBoss服务器和调试的动作参见readme.txt文档,有详细说明怎样匹配连接池,以及可能遇到的问题及解决办法。该...
这是ejb3.1用jboss7.1.1开发的HelloWorld文档,网上有一个和这个差不多,但是有些错误,这个是修正版的