→阿童沐

財富==支撐一個人生存多長時間的能力!

导航

<尚学堂><EJB> 4-第一个EJB实例的开发

新建一个EJB项目: (基于MyEclipse 8.6)

开发EJB分为两个步骤:

  1. 开发服务端;

  2. 开发客户端;


 

在MyEclipse中配置JBoss服务器:

  1>

    

  2> 配置完成后, 打开Servers视图:

    

  点击启动, 即可启动服务器;输入http://localhost:8080进行测试:

    

  3> 通过MyEclipse可以很方便的进行EJB项目的部署和测试:

    

    


1. 新建一个EJB Project:    【四-03:00

  1> 

    

  2> 

    

2. 编写EJB:   【四-06:00

  分为两部分, 一个是接口, 另一个是实现类.

  1>  编写EJB接口:

    

  2> 编写具体实现类:

    

  注: 实现类命名规范通常是在接口的末尾加*Bean.

3. 利用注解配置EJB:

  

注意: 必须对已经写好的类进行注解或是配置文件的配置,标志当前类是一个EJB, 否则服务器不会将其视为EJB对象。

4. 部署到JBoss服务器:

    

部署完成后的JBoss目录状态如下:

  (1)目录形式:

    

  (2)jar包形式:

    

  注:部署到服务器中的可以是一个jar包,也可以是一个目录

5. 客户端开发:      【四-10:00

  1> 客户端使用一个Java项目,在MyEclipse中新建一个Java项目即可;

  2> 将EJB项目的接口打包(客户端只需要EJB的接口即可), 并把这个jar包加入到客户端项目的类加载路径中即可;

  具体仅仅将EJB项目中的接口导出为jar包的方式如下:

    

    

    

  客户端和服务端的唯一桥梁就是这个接口所组成的jar包.

  将导出的ejb01.jar包加入到Client项目的类路径中:

    

  3> 将JBoss安装目录下的Client目录里面的所有jar包加入到客户端项目中;    【四-12:00

  为了方便起见, 可以创建一个User Library将经常用到的jar包集合放在一起, 在需要的时候可以直接导入.

    

  创建完成后, 将该EJB3_Client Library 加入到客户端所在的java项目中:

    

    

  4> 编写如下的客户端代码:

package cn.edu.bupt.ejbclient;

import javax.naming.InitialContext;
import javax.naming.NamingException;

import cn.edu.bupt.ejb.FirstEjb;

public class FirstEjbClient
{
    public static void main(String[] args) throws NamingException
    {
        
        InitialContext context = new InitialContext();                // InitialContext对象是JNDI中的对象, JNDI是JBoss服务器提供的一种服务
        FirstEjb stub = (FirstEjb)context.lookup("FirstEjbBean/remote");        // JNDI名称规则(不同的服务器有不同的命名规则,这里以JBoss服务器为例), 第一个名称就是EJB实现类的名称, 例如: FirstEjb
        String s = stub.saySomething("张三");
        System.out.println(s);
        
        
    }
}

 

  InitialContext是JNDI中的对象, JNDI是JBOss服务器提供的一种服务, EJB的名称查询都是通过JNDI服务在服务器端进行查询的.

  对于目标EJB在服务器端的JNDI名称命名规则, 就是他的类名, 例如:"FirstEjbBean", 然后如果是远程调用的话, 使用在加入"/remote"

 

  5> 在客户端源代码目录下添加"jndi.properties"文件, 之所以要求有这个配置, 是因为具体的JNDI实现依赖于具体的服务器, 不同的服务器的JNDI实现是不相同的, 类似于Spring的BeanFactory一样, 需要告诉具体的实现类.

而在main方法中的InitialContext是一个接口, 具体实现类是有jndi.properties配置文件决定的.

#该配置文件的目的是当再客户端调用new InitialContext()的时候,自动加载该配置文件的配置信息
#之所以要求有这个配置, 是因为具体的JNDI实现依赖于具体的服务器, 不同的服务器的JNDI实现是不相同的, 类似于Spring的BeanFactory一样, 需要告诉具体的实现类.
#而在main方法中的InitialContext是一个接口, 具体实现类是有jndi.properties配置文件决定的.
java.naming.factory.inital=org.jnp.interfaces.NamingContextFactory
java.naming.factory.pkgs=org.jboss.naming:org.jnp.interfaces
#jboss服务器所在及其的IP地址
java.naming.provider.url=127.0.0.1

 

注: 如果没有该属性文件也可以执行, 但是需要将相关的信息写入到java代码中.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2012-11-19 13:09  阿童沐  阅读(698)  评论(0)    收藏  举报