• EJB3 学习笔记四


    开发有状态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<a href="mailto:zhenhuayue@sina.com">Retacn</a>

     * @since 2015-1-14

     */

    // 指定为无状态会话bean

    @Stateless

    // 指定有状态bean

    // @Stateful

    // 指定远程接口

    @Remote(RemoteHelloWorld.class)

    // 指定为本地接口

    @Local(LocalHelloWorld.class)

    publicclass HelloWorldBean implements 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;

       }

     

    }

     

  • 相关阅读:
    H3C-路由器密码恢复
    H3C-交换机密码恢复
    H3C-端口镜像
    [洛谷P4234]最小差值生成树
    [BZOJ4003]城池攻占
    [BZOJ1058]报表统计
    [BZOJ1584]Cleaning Up 打扫卫生
    [BZOJ3733]Iloczyn
    [HDU5709]Claris Loves Painting
    [BZOJ5109]大吉大利,晚上吃鸡!
  • 原文地址:https://www.cnblogs.com/retacn-yue/p/6194214.html
Copyright © 2020-2023  润新知