EJB3 学习笔记四

来源:互联网 发布:eclipse js编辑器插件 编辑:程序博客网 时间:2024/05/17 07:24

开发有状态bean,示例代码如下:

// 指定有状态bean

@Stateful

无状态bean使用实例池管理bean

有状态bean使用激活(activation)管理bean(为每一个用户创建一个bean,应用求场景:如购物车)

 

 

在ejb中调用其他ejb有以两种方式:

1 通过jndi查找的方式

????????????未实现,需查找jndi查找方法

 

2 通过注解方式注入并使用其他ejb或者服务,示例代码如下:

/**

 * Copyright (C) 2016

 *

 * FileName:Second.java

 *

 * Author:<a href="mailto:zhenhuayue@sina.com">Retacn</a>

 *

 * CreateTime: 2016-7-21

 */

// Package Information

 

package cn.yue.ejb.bean;

 

/**

 * 测试其他 ejb的调用,被调用接口

 *

 * @version

 * @Description:

 * @author <ahref="mailto:zhenhuayue@sina.com">Retacn</a>

 * @since 2016-7-21

 */

public interface Second {

   public String saySecond();

}

 

 

 

/**

 * Copyright (C) 2016

 *

 * FileName:SecondBean.java

 *

 * Author:<ahref="mailto:zhenhuayue@sina.com">Retacn</a>

 *

 * CreateTime: 2016-7-21

 */

// Package Information

 

package cn.yue.ejb.bean;

 

import javax.ejb.Local;

import javax.ejb.Stateless;

 

/**

 * 测试调用其他ejb,被调用bean

 *

 * @version

 * @Description:

 * @author <ahref="mailto:zhenhuayue@sina.com">Retacn</a>

 * @since 2016-7-21

 */

// 指定为无状态 bean

@Stateless

// 指定为本地接口

@Local(Second.class)

public class SecondBean implementsSecond {

 

   @Override

   public String saySecond() {

       return "second";

   }

 

}

 

 

 

 

/**

 * Copyright (C) 2015

 *

 * FileName:HelloWorldBean.java

 *

 * Author:<a href="mailto:zhenhuayue@sina.com">Retacn</a>

 *

 * CreateTime: 2015-1-14

 */

// Package Information

 

package cn.yue.ejb.bean;

 

import java.util.Hashtable;

 

import javax.ejb.EJB;

import javax.ejb.Local;

import javax.ejb.Remote;

import javax.ejb.Stateless;

import javax.naming.Context;

import javax.naming.InitialContext;

import javax.naming.NamingException;

 

//import javax.ejb.Stateless;

 

/**

 * 实现业务接口 并添加两个注释 测试调用其他ejb

 *

 * @version

 * @Description:

 * @author<ahref="mailto:zhenhuayue@sina.com">Retacn</a>

 * @since 2015-1-14

 */

// 指定为无状态会话bean

@Stateless

// 指定有状态bean

// @Stateful

// 指定远程接口

@Remote(RemoteHelloWorld.class)

// 指定为本地接口

@Local(LocalHelloWorld.class)

publicclass HelloWorldBeanimplements LocalHelloWorld, RemoteHelloWorld {

@EJB(beanName = "SecondBean")

   Second second;

 

@Override

public String SayHello(String name) {

// try {

// Properties props = newProperties();

//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");

//

// InitialContext ctx;

// ctx = newInitialContext(props);

// HelloWorld helloworld =(HelloWorld)

//ctx.lookup("HelloWorldBean/romote");

// // out.println(helloworld.SayHello("retacn"));

// } catch (NamingException e) {

// e.printStackTrace();

// }

 

// 调用其他ejb有两种方式:

// 1 通过jndi查找

 

// try {

//System.out.println("start-----");

// System.out.println("调用其他ejb: " + callByJndi().saySecond());

// } catch (NamingException e) {

//System.out.println("exception-----");

// e.printStackTrace();

// }

//System.out.println("end----");

// 2 通过依赖注入

 

return name +" say:hello world! this ismy first EJB test! " +second.saySecond();

   }

 

@Override

public String localSay(String name) {

return"local---" + name +" say:hello world! this ismy first EJB test!";

   }

 

@SuppressWarnings("unchecked")

public Second callByJndi()throws NamingException {

@SuppressWarnings("rawtypes")

final Hashtable jndiProperties =new Hashtable();

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

final Context context =new InitialContext(jndiProperties);

 

// 如果服务器布署的是.ear包,则appname为.ear之后的包名,如果的war或是jar包,appName可以为空

final String appName ="";

final String moduleName ="HelloWorldEJB";

final String distinctName ="";

final String beanName ="SecondBean";

final String viewClassName = Second.class.getName();

 

final String namespace ="ejb: " + appName + "/" + moduleName + "/" + distinctName

                + "/"

                + beanName + "!" + viewClassName;

        System.out.println("调用其他ejb,namespace:" + namespace);

        Second second = (Second)context.lookup(namespace);

return second;

   }

 

}

 

0 0
原创粉丝点击