EJB2.0 之 HelloWorld

 第一次接触EJB2.0 ,本不想学习,因为EJB2.0的繁琐和复杂已经 有了EJB3.0的替换, 实属项目(http://www.qianxk.com/forum.php?mod=viewthread&tid=1111)需要。

不了解原理,先按照编程惯例,跑个HelloWord试试:

一、环境:

jboss5.0、 myeclipse

二、

代码如下:

//定义远程接口


public interface HelloWorldRemote extends EJBObject{
   String sayHello()throws RemoteException;
}

 

//定义本地接口  这里有点疑问,是否是叫做本地接口还是提供远程接口

public interface HelloWorldHome extends EJBHome{
 HelloWorldRemote create() throws RemoteException, CreateException; 
}

ublic class HelloWorldBean implements SessionBean{

 /**
  *
  */
 private static final long serialVersionUID = 1L;

//这个方法必备,没有的话,在服务器加载的时候 报错:Verification of Enterprise Beans failed, see above for error messages.  就是这个错,害的我现在还没睡,哇哇,为什么既然一定要,不写到sessionBean中间去呢,这不害人吗

 public void ejbCreate() {
          System.out.println("HelloBean: ejbCreate() is called!");
    }
 @Override
 public void ejbActivate() throws EJBException, RemoteException {
  // TODO Auto-generated method stub
  
 }
 @Override
 public void ejbPassivate() throws EJBException, RemoteException {
  // TODO Auto-generated method stub
  
 }

 @Override
 public void ejbRemove() throws EJBException, RemoteException {
  // TODO Auto-generated method stub
  
 }

 @Override
 public void setSessionContext(SessionContext arg0) throws EJBException,
   RemoteException {
  // TODO Auto-generated method stub
  
 }
 public String sayHello() throws RemoteException  
    {  
        return "Welecome to ejb2.0,HXL";  
    }  

}

定义好这些,还需要配置两个文件.ejb-jar.xml 和 jboss.xml然后将其打包成jar文件
ejb-jar.xml文件如下:

<?xml version="1.0" encoding="gb2312"?>   
<!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> 
    <description>ejb</description> 
    <display-name>myEJBTest</display-name> 
 
    <enterprise-beans> 
        <session> 
            <display-name>helloEJB</display-name> 
            <ejb-name>helloEJB</ejb-name> 
            <home>com.time.ejb.bean.HelloWorldHome</home> 
            <remote> 
                com.time.ejb.bean.HelloWorldRemote  
            </remote> 
            <ejb-class> 
                com.time.ejb.bean.HelloWorldBean  
            </ejb-class> 
            <session-type>Stateful</session-type> 
            <transaction-type>Bean</transaction-type> 
        </session> 
    </enterprise-beans> 
</ejb-jar> 
jboss.xml文件:

<?xml version="1.0" encoding="gb2312"?> 
 
<jboss> 
    <enterprise-beans> 
        <session> 
            <ejb-name>helloEJB</ejb-name> 
            <jndi-name>ejb/helloEJB</jndi-name> 
        </session> 
    </enterprise-beans> 
</jboss> 
然后写出测试例子,调用EJB:

 public static void main(String[] args)  
    {  
          
        System.out.println("===========================================================");  
        Properties props = new Properties();  
        props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");  
        props.setProperty("java.naming.provider.url", "localhost:1099");  
        props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");  
        try 
        {  
            InitialContext ctx = new InitialContext(props);  
              
            Object objRef = ctx.lookup("ejb/helloEJB");  
              
            HelloWorldHome home = (HelloWorldHome) PortableRemoteObject.narrow(objRef, HelloWorldHome.class);  
              
            HelloWorldRemote remote = home.create();  
               System.out.println(remote.sayHello());
        }  
        catch (Exception ex)  
        {  
            ex.printStackTrace();  
        }  
    }  

由于上面的错误,发现后在谷歌里寻求解决方案,有说EJB配置文件错误、有说Jar包错误,几经折腾,错误还是存在,后来,还是决定自己研究错误提示,找到了错误的根源,看了,有的时候还是要相信自己,别太依赖谷哥这位大神。

谈谈大概自己对EJB的理解,对于需要提供远程访问服务的,首先需要提供一个对外远程访问的接口(EJBHome),然后定义远程访问对象(EJBOject)接口,最后定义SessionBean实现类,这里进行业务逻辑处理。将对应的对象配置到ejb-jar.xml配置文件中, 当然这个其中实现也就交个EJB容器来进行处理,可用通过代理或者注入 实现,具体内容还得继续深究,努力

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值