EJB系列(二)---开发

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010121883/article/details/52039895

    上篇对EJB进行了简单的介绍:EJB系列(一)---简介

    本篇,我们来做一个小demo简单介绍EJB开发的步骤。

    开发环境:eclipse +Jboss 6.2 + jdk 1.8

    开发环境搭建好之后,进入正式的编程阶段。

服务器端

(1)新建一个EJB Project项目


(2)定义一个远程接口

    可以在接口上,加上@Remote。也可以在接口的实现类上加上这个注解。(@Local表示本地)

<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;">package com.tgb.ejb;

public interface FirstEjb {
	public String saySomething(String name);
}</span></span>

(3)定义一个接口的实现类

    @Stateless表示的是无状态会话bean,@Statefull表示的是有状态会话bean,区别是前者比后者效率高,但是不能保留后者那种在会话中的数据。

<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;">package com.tgb.ejb;

import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.jws.WebMethod;
import javax.jws.WebService;

@Stateless
@Remote
public class FirstEjbBean implements FirstEjb {
	@Override
	public String saySomething(String name) {
		return "你好, " + name;
	}
}
</span></span>

(4)将其部署到jboss上。

客户端

(1) 新建一个Java Project项目

(2)引入%jboss_home%/client/下的jar包

(3)编写测试类

<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;">package com.tgb.ejb;

import javax.naming.InitialContext;

public class FirstEjbClient {

        //测试类
	public static void main(String[] args) throws Exception {
		//初始化上下文-----不同的应用服务器初始化上下文的工厂类是不同的,协议也可能不一样。
		InitialContext ctx = new InitialContext();
		FirstEjb ejb = (FirstEjb)ctx.lookup("FirstEjbBean/remote");
		String s = ejb.saySomething("baby");
		System.out.println(s);
	}
}
</span></span>
    InitialContext主要方法的使用:

    void bind(String name,Object object);    //将名称绑定到对象。如果已经存在,则抛出异常。

    void rebind(String name,Object object);    //将名称绑定到对象。如果对象存在,则重写所有绑定

    void rename(String oldName,String newName);    //把某一个已经绑定的旧名称改成新名称

    void unbind(String name);    //取消指定对象的绑定

    Object lookup(String name);    //查找指定对象

    Jboss下配置JNDI名称

   当EJB发布到Jboss时,如果没有为它指定全局的JNDI名称或修改过其默认EJB名称,Jboss就会按照默认的命名规则为EJB生成全局JNDI名称,默认的命名规则如下:

  如果把EJB作为模块打包进后缀为*.ear的JavaEE企业应用文件,默认的全局JNDI名称是

本地接口:ear-file-base-name/ejb-class-name/local

远程接口:ear-file-base-name/ejb-class-name/remote

ear-file-base-name为ear文件的名称,ejb-class-name为EJB的非限定类名。

例如:把HelloWorld应用作为EJB模块打包进名为HelloWorld.ear的企业应用文件,它的远程接口的JNDI名称是:HelloWorld/HelloWorldBean/remote

  如果把EJB应用打包成后缀为*.jar的模块文件,默认的全局JNDI名称是

本地接口:ejb-class-name/local

远程接口:ejb-class-name/remote

例如:把HelloWorld应用打包成HelloWorld.jar文件,它的远程接口的JNDI名称是:HelloWorldBean/remote

(4)设置JNDI访问环境信息

    JNDI为JavaEE平台提供了一个通过名字查找网络中一切对象的标准机制,是一套为开发者提供通过名字方便查找用户、机器、网络、对象和服务的Java API,JNDI实现了EJB对象位置的透明性,客户端只要能方位JNDI服务,便可以调用EJB服务。设置JNDI访问环境信息,主要是设置JNDI驱动的类名(java.naming.factory.initial)和命名服务提供者的URL(java.naming.provider.url):

    方式一:设置系统属性,此部分需要写在测试类中。

<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;">Properties props=new Properties();

props.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");  
    //可以将"java.naming.factory.initial"替换成Context.INITIAL_CONTEXT_FACTORY,环境属性名,用于指定InitialContext工厂(JNDI驱动),
    //它雷速与JDBC指定数据库驱动类,因为本例子连接的是JbossNS,所以使用Jboss提供的驱动类:org.jnp.interfaces.NamingContextFactory

props.setProperty("java.naming.provider.url","localhost:1009");         //”localhost:1009”也可以写成”jnp://127.0.0.1:1009”

    //可以将"java.naming.provider.url"替换成Context.PROVIDER_URL,环境属性名,包含提供命名服务的主机地址和端口号。它类似于JDBC指定数据库的连接URL。
    //连接到JbossNS的URL格式为:jnp://host:port,改URL的“jnp”部分是指使用的协议,Jboss使用的是基于Socket/RMI的协议。
    //Host为主机的地址,port为JNDI服务的端口。除了host之外,其他部分都是可以选择写的。

props.setProperty("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");</span></span>

    方式二:src下添加jndi.properties

<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;">java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory

java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces               

java.naming.provider.url=jnp://localhost:1009</span></span>

    方式三:通过命令行设置。

服务器端与客户端交互

    (1)将服务器端的接口导出成jar包。选中接口---右键----选择“Export....”

    (2)将服务器端导出的jar包,引入到客户端。

运行测试,客户端就可以成功调用服务器端了。

猜你喜欢

转载自blog.csdn.net/u010121883/article/details/52039895
EJB