`

(转)ejb3学习之HelloWorld

阅读更多
在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方法。
分享到:
评论

相关推荐

    EJB3.0之HelloWorld

    **EJB3.0之HelloWorld** EJB(Enterprise JavaBeans)是Java平台企业版(Java EE)的一部分,主要用于构建可扩展、可移植和可信赖的企业级应用。EJB3.0是EJB规范的一个重要版本,它在之前的基础上进行了重大改进,...

    EJB3 maven helloworld项目

    总结起来,"EJB3 Maven HelloWorld"项目是一个很好的学习起点,它涵盖了EJB3基本概念,如无状态会话Bean、接口定义、注解驱动开发,以及Maven的项目管理和部署功能。通过这个项目,初学者可以快速理解和实践EJB3和...

    EJB HelloWorld

    HelloWorld helloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote"); out.println(helloworld.SayHello("佛山人")); 5.用ant或eclipse,把客户端文件打成war包,发布到jboss上 6.输入...

    ejb_helloworld

    在本示例中,我们探讨的是一个简单的EJB2.0 HelloWorld程序,主要涉及EJB的三个核心部分:Bean类、组件接口和Home接口,以及配置文件ejb-jar.xml。 1. **Bean类**: Bean类是EJB的核心,它实现了业务逻辑。在这个...

    EJB2.0一个完整的Helloworld

    **企业级JavaBeans(EJB)2.0详解——基于Helloworld示例** EJB(Enterprise JavaBeans)是Java EE(Java Platform, Enterprise Edition)平台的核心组成部分,它为开发分布式、事务处理、安全和可扩展的企业级应用...

    ejb3.0 helloworld例子

    初学ejb,一个入门例子。 两个project,一个为ejb,一为客户端。 软件版本:jboss-4.2.3.GA,Jdk1.6.0,myeclipse 10.0 部署ejb后,客户端导入jboss的client下的所有jar包。

    1.EJB的HelloWorld!

    "1.EJB的HelloWorld!" 是一个入门级别的教程,旨在帮助初学者理解EJB的基本概念和使用方式。在这个例子中,我们将探讨如何创建并运行一个简单的EJB HelloWorld应用。 EJB的核心概念包括会话bean、实体bean和消息...

    MyEclipse+EJB3+JBoss4部署EBJ+web项目HelloWorld详解

    ### MyEclipse+EJB3+JBoss4部署EJB+Web项目HelloWorld详解 #### 一、环境搭建 ##### 1. 安装 JDK 1.6 在开始之前,请确保您的开发环境中已经安装了 Java 开发工具包 (JDK) 1.6 版本。如果尚未安装,请访问 Oracle ...

    HelloWorld1_初识javaee_

    通过"HelloWorld1"的学习,开发者可以了解JavaEE的基本开发环境和流程,为进一步学习JavaEE的其他高级特性,如JPA(Java Persistence API)、JSF(JavaServer Faces)、CDI(Contexts and Dependency Injection)...

    完整EJB3.0第一个HelloWord,

    在EJB3.0的第一个"Hello, World"项目中,我们将学习如何创建和配置一个简单的EJB组件。首先,我们需要了解EJB的基本概念。EJB分为三种类型:会话bean(Session Beans)、实体bean(Entity Beans)和消息驱动bean...

    Ejb学习

    **EJB(Enterprise JavaBeans)学习指南** EJB(Enterprise JavaBeans)是Java EE平台中的核心组件,主要用于构建可扩展的、安全的、事务处理的分布式企业级应用程序。EJB技术经历了从早期版本到现代EJB 3.x的演变...

    complete working ejb3 helloworld session bean jbos

    工程源代码 博文链接:https://hintcnuie.iteye.com/blog/243520

    ejb3 第8讲 --通过注解方式注入并使用其他EJB或者服务

    通过学习和实践这个ejb3HelloWorld项目,你可以更好地理解EJB 3的注解注入机制,以及如何在实际项目中运用这些知识。 总之,EJB 3的注解注入功能极大地简化了Java EE应用的开发,使我们可以更加专注于业务逻辑,而...

    EJB client调用EJB3 .doc

    HelloWorld helloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote"); ``` 这里,`ctx.lookup()`方法用于根据EJB的JNDI名称查找并实例化EJB。由于在同一个JVM内,无需显式设置`InitialContext`的环境属性...

    eclipse + JBoss 5 + EJB3开发指南

    #### (8):JBoss EJB3(HelloWorld)备忘记 这部分提供了一个简单的HelloWorld示例,用于演示如何从头开始构建EJB项目。 总结起来,这篇教程涵盖了从配置开发环境到编写和测试Session Bean的所有基本步骤。它不仅...

    weblogic JNDI helloworld实例

    把文件用weblogic部署上去,然后反编译jar中的bind类 执行主方法weblogic就有打印出hello ejb的字样了,很好的一个ejb实例。

    学习EJB1

    通常,这个示例会创建一个简单的EJB组件,例如一个HelloWorld Session Bean,实现一个返回问候信息的方法。客户端可能通过RMI调用这个方法,展示EJB的基本使用流程。 学习EJB1对于理解后来的EJB版本和整个Java EE...

    Seam 例子 Hello World

    - **访问URL**:通过`http://localhost:8080/helloworld/`访问应用。 #### 九、总结 通过这个简单的Hello World示例,我们可以看到Seam框架如何简化了Java Web应用程序的开发过程。从实体定义到页面处理,再到事件...

Global site tag (gtag.js) - Google Analytics