开发第一个EJB组件-Hello

前两天开始学习EJB,想学的很久了,一直总认为自己的水平学起来会很困难,其实不过是给自己找了一个接口罢了,无论怎么样,终于开始学习了,昨天开始写Hello,根据精通EJB书上所说的例子,写好了代码需要如何编译,编译完了又怎么样,可惜书上面说的不是很清楚,有好多的细节多给省略了,所以只有自己取google了啊。

最后还是部署成功了,过程如下:

一, 编写EJB组件代码

1 远程接口

远程接口支持EJB组件暴露的所有业务方法,当客户同EJB对象交互时,需要使用这一接口,容器厂商会实现这一接口,而相应的实现对象就是EJB对象

package examples;

public interfact Hello extends javax.ejb.EJBObject{  // 继承于EJBObject,容器生成的EJB对象实现了远程接口

   public String hello() throws java.rmi.RemoteException;// 仅实现了单个业务方法,Bean类需要实现hello方法,由于该接口是RMI-IIOP类型的远程接口(间接继承javarmi Remote)因此必须抛出远程异常,远程异常表明了网络问题或其他致命问题

}

2 本地接口 为访问EJB组件的业务方法,本地客户应该使用本地接口,而不是远程接口,本次接口是远程接口的效率提升,当本地客户同EJB本地对象交互时,需要使用这接口,相应的实现对象就是EJB本地对象,EJB本地对象会将客户请求委派给实际的EJB BEAN 类,本地接口继承于EJBLocalObject接口,不需要抛出RemoteException

package examples;

public interface HelloLocal extends javax.ejb.EJBLocalObject{

public String hello();

}

3 Home接口,为创建和销毁EJB对象,开发者需要使用Home接口,Home接口的实现是Home对象,而Home对象有EJB服务器提供的工具生成, 该接口存在create()方法,它对应于HelloBean中的ejbCreate()方法,Home对象充当了创建EJB对象的工厂

package examples;

public interface HelloHome extends javax.ejb.EJBHome{

Hello create() throws java.rmi.RemoteException,javax.ejb.CreateException;// 创建EJB对象

}

为获得EJB对象的引用,客户需要使用create方法,create方法还能完成EJB组件的初始化工作,该接口继承于EJBHome

4 本地Home接口,本地Home接口是Home接口的高性能版本

package examples;

public interface HelloLocalHome extends javax.ejb.EJBLocalHome{ //继承于LocalHome

HelloLocal create() throws javax.ejb.CreateException;

}

5 Bean类 HelloBean实现了javax ejb SessionBean接口,供实现会话Bean使用,HelloBean的ejbCreate方法和Home对象的create方法一致,当个业务方法hello 返回HELLO EJB,无状态会话bean不会使用到ejbActivate和ejbPassivate方法ejbRemove 当销毁HelloWorld ejb实例时,不需要清楚任何资源

package examples;
import javax.ejb.SessionContext;
public class HelloBean implements javax.ejb.SessionBean
{
 private SessionContext ctx;

// EJB 规范定义的方法

 public void ejbCreate()
 {
  System.out.println("ejbCreate()");
 }
 
 public void ejbRemove()
 {
  System.out.println("ejbRemove");
 }

 public void ejbActivate()
 {
  System.out.println("ejbActivate");
 }

 public void ejbPassivate()
 {
  System.out.println("ejbPassivate()");
 }

 public void setSessionContext(javax.ejb.SessionContext ctx)
 {
  this.ctx=ctx;
 }

//业务方法

 public String hello()
 {
  System.out.println("hello()");
  return "Hello World";
 }

}

6 部署描述符

这个地方有点不是太好理解了啊,或许因为本人对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 version="2.1" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:msi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd">-->
<ejb-jar>  
      <description>Hello Ejb</description>  
      <display-name>Hello</display-name>
<enterprise-beans>
 <session>
  <ejb-name>Hello</ejb-name>
  <home>examples.HelloHome</home>
  <remote>examples.Hello</remote>
  <local-home>examples.HelloLocalHome</local-home>
  <local>examples.HelloLocal</local>
  <ejb-class>examples.HelloBean</ejb-class>
  <session-type>Stateless</session-type>
  <transaction-type>Container</transaction-type>
 </session>
</enterprise-beans>
</ejb-jar>

就是上面的去掉doctype那段,加上下面那段的,可是部署的时候却一直错,后来查了查资料改过来的,一会还要研究下,

7编译java文件

编译java文件首先要取得java文件中用到的外部包,好像这个包可以从JBOSS中获得吧,我是从eclipse里面拷出来的,本来的从网上down的j2ee。jar没有用,将编译好的class文件进行打包

jar cvf hello.jar examples META-INF

其中examples目录底下是刚才编译的类了,META-INF下面放的是ejb-jar.xml,打包的时候会生成一个MANIFEST.MF在META-INF下面,打包完成

8部署HELLO.JAR

我用的服务器是JBOSS3.2.6,感觉版本问题不是很大吧,cmd到jboss的bin下面,然后run -c all 启动服务器,把hello.jar 拷到all下面的deploy,jboss就会给出消息了啊,如果成功的话会出现如下信息

[EJBModule] Deploying hello

[EJBDeployer]deployed :file xxxxxx.xxxx/xxx/hello.jar

这样就部署成功了,呵呵!坚持学习。下面准备客户端调用去

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值