EJB初体验

## 使用eclipse和wildfly-10.1.0.Final感受EJB的魅力 ##

EJB的设计目标与核心应用是部署分布式应用程序。就是把已经编写好的程序打包放在服务器上执行。凭借java跨平台的优势,用EJB技术部署的分布式系统可以不限于特定的平台。
下面我们来一起来体验一下EJB吧!
工欲善其事,必先利其器。
首先需要下载eclipse(笔者使用的是j2ee):下载地址
其次需要下载jboss服务器(笔者使用的是wildfly-10.1.0.Final)下载地址(注:不需要下载jbossEAP(Enterprise Application Platform)版本,下载完成后解压缩即可)


1.开发HelloWorldEJB

1)首先File->New->Java Project创建EJB程序,name:HelloWorld,选择合适的JRE后点击Finish,如下图所示:
这里写图片描述

2)Project Explorer->HelloWorldEJB->src->new->package,包名为com.jacksenma.ejb,点击Finish,如下图所示:
这里写图片描述

3)在编写EJB代码前,需要先引入一个jar包(笔者使用的是javax.ejb-3.1.2.2.jar)下载地址,下载完成后HelloWorldEJB->Build Path->Configure Build Path->add External JARs引入javax.ejb-3.1.2.2.jar,点击OK即可,如下图所示:
这里写图片描述

4)在com.jacksenma.ejb包中建立一个名为HelloWorldRemote的接口文件,声明一个返回值为String的sayHello(String s)方法,代码如下:

package com.jacksenma.ejb;

import java.io.Serializable;

import javax.ejb.Remote;

@Remote
public interface HelloWorldRemote extends Serializable {
    public String sayHello(String s);
}

此处需要注意的是,由于我们定义的是@Remote(远程访问方式),客户端和服务器之间进行通信的时候,数据需要序列化之后以传值的方式传输。与@Loacl(本地访问方式)的传址方式不同。

5)在com.jacksenma.ejb包中建立一个名为HelloWorld的class文件实现HelloWorldRemote接口,实现sayHello方法,代码如下:

package com.jacksenma.ejb;

import javax.ejb.Stateless;

/**
 * Session Bean implementation class HelloWorld
 */
@Stateless
public class HelloWorld implements HelloWorldRemote  {

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

    /**
     * Default constructor. 
     */
    public HelloWorld() {
        // TODO Auto-generated constructor stub
    }

    @Override
    public String sayHello(String s) {
        // TODO Auto-generated method stub
        return "Hello World! My name is "+s;
    }


}

5)至此,HelloWorldEJB(即EJB代码部分)就完成了,接下来将HelloWorldEJB部署到jboss服务器上。部署的方式有两种,一种是将HelloWorldEJB项目add到eclipse的jboss中再start,但是要装jboss的相关tools,这里介绍第二种:HelloWorldEJB->Export->JAR file->Next->Browse(选择路径为jboss安装目录的standalone下的deployments文件夹中,如D:\wildfly-10.1.0.Final\standalone\deployments\HelloWorldEJB.jar)取名为HelloWorldEJB(这里jar包的名称在客户端查询EJB的时候要用到),点击Finish完成,如下图所示:
这里写图片描述

2.开发HelloWorldClient

完成了HelloWorldEJB部分的代码编写和部署,接下来编写HelloWorldClient客户端程序来调用部署好的HelloWorldEJB
1)和之前一样,先创建一个名为HelloWorldClient程序,在src中建立名为client的包,如下图所示:
这里写图片描述

2)在client包中建立EJBFactory文件,用来通过jndi查找获得EJB,代码如下:

package client;

import java.util.Hashtable;

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

public class EJBFactory {
    public static Object getEJB(String jndipath) {
        try {
            final Hashtable<String, Object> jndiProps = new Hashtable<String, Object>();
            jndiProps.put("jboss.naming.client.ejb.context", true);

            jndiProps.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");



            final Context context = new InitialContext(jndiProps);
            return context.lookup(jndipath);

        } catch (NamingException e) {
            e.printStackTrace();
        }
        return null;
    }
}

3)建立客户端和HelloWorldEJB之间的联系,即将HelloWorldEJB中的He’llWorldRemote接口文件导出成JAR file,然后在HelloWorldClient中的Build Path中add External JARs来引入刚刚导出的jar文件(导出和引入jar文件上文已经提及,这里不再赘述),如图所示:
这里写图片描述

4)导入JNDI Remote Client需要的JAR包,位置在jboss安装目录下\bin\client\jboss-client.jar,如图所示:
这里写图片描述
这里写图片描述

5)在类路径(这里是src)下创建JNDI Remote EJB Client需要的properties(jboss-ejb-client.properties),如下图所示:
这里写图片描述

jboss-ejb-client.properties中的内容如下:

endpoint.name=client-endpoint
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default
remote.connection.default.host=localhost
remote.connection.default.port=8080
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
remote.connection.two.host=localhost
         remote.connection.two.port = 8080
         remote.connection.two.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false

6)在client包中创建testEJB文件,代码如下:

package client;

import com.jacksenma.ejb.HelloWorldRemote;

public class testEJB {
    public static void main(String[] args) {
        HelloWorldRemote hello = (HelloWorldRemote)EJBFactory.getEJB("ejb:/HelloWorldEJB/HelloWorld!com.jacksenma.ejb.HelloWorldRemote?stateless");
        System.out.println(hello.sayHello("jacksenma"));

    }
}

注意这里EJBFactory.getEJB(“ejb:/HelloWorldEJB/HelloWorld!com.jacksenma.ejb.HelloWorldRemote?stateless”)中括号内的内容可以概括成:ejb:/[导入到deployments文件夹下的jar包名称]/[Bean名称]![接口全名]?[bean类型]

3.启动jboss,运行客户端

1)启动jboss,双击jboss安装目录\bin\standalone.bat,运行jboss,如下图所示:
这里写图片描述
这里写图片描述

2)运行客户端的testEJB,显示成功信息如下图所示:
这里写图片描述

3)到此我们的EJB初体验就结束了,感兴趣的小伙伴可以自己体验一下哦^_^

Files contained in javax.ejb.jar: META-INF/MANIFEST.MF javax.ejb.AccessLocalException.class javax.ejb.AccessTimeout.class javax.ejb.ActivationConfigProperty.class javax.ejb.AfterBegin.class javax.ejb.AfterCompletion.class javax.ejb.ApplicationException.class javax.ejb.Asynchronous.class javax.ejb.AsyncResult.class javax.ejb.BeforeCompletion.class javax.ejb.ConcurrencyManagement.class javax.ejb.ConcurrencyManagementType.class javax.ejb.ConcurrentAccessException.class javax.ejb.ConcurrentAccessTimeoutException.class javax.ejb.CreateException.class javax.ejb.DependsOn.class javax.ejb.DuplicateKeyException.class javax.ejb.EJB.class javax.ejb.EJBAccessException.class javax.ejb.EJBContext.class javax.ejb.EJBException.class javax.ejb.EJBHome.class javax.ejb.EJBLocalHome.class javax.ejb.EJBLocalObject.class javax.ejb.EJBMetaData.class javax.ejb.EJBObject.class javax.ejb.EJBs.class javax.ejb.EJBTransactionRequiredException.class javax.ejb.EJBTransactionRolledbackException.class javax.ejb.embeddable.EJBContainer.class javax.ejb.EnterpriseBean.class javax.ejb.EntityBean.class javax.ejb.EntityContext.class javax.ejb.FinderException.class javax.ejb.Handle.class javax.ejb.HomeHandle.class javax.ejb.IllegalLoopbackException.class javax.ejb.Init.class javax.ejb.Local.class javax.ejb.LocalBean.class javax.ejb.LocalHome.class javax.ejb.Lock.class javax.ejb.LockType.class javax.ejb.MessageDriven.class javax.ejb.MessageDrivenBean.class javax.ejb.MessageDrivenContext.class javax.ejb.NoMoreTimeoutsException.class javax.ejb.NoSuchEJBException.class javax.ejb.NoSuchEntityException.class javax.ejb.NoSuchObjectLocalException.class javax.ejb.ObjectNotFoundException.class javax.ejb.PostActivate.class javax.ejb.PrePassivate.class javax.ejb.Remote.class javax.ejb.RemoteHome.class javax.ejb.Remove.class javax.ejb.RemoveException.class javax.ejb.Schedule.class javax.ejb.ScheduleExpression.class javax.ejb.Schedules.class javax.ejb.SessionBean.class javax.ejb.SessionContext.class javax.ejb.Session
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值