EJB总结一

概念理解

EJB是sun的服务器端组件模型,设计目标与核心应用是部署分布式应用程序。凭借java跨平台的优势,用EJB技术部署的分布式系统可以不限特定的平台。定义了一个用于开发基于组件的企业多重应用程序的标准。

企业Bean

在J2EE中,Enterprise Java Beans(EJB)称为Java 企业Bean,是Java的核心代码,分别是会话Bean(Session Bean),实体Bean(Entity Bean)和消息驱动Bean(MessageDriven Bean)。

企业Bean

1.Session Bean:有状态和无状态

       有状态的会话Bean:即Ejb能够为同一个客户端在多次请求方法调用之间保持状态信息。

       无状态的会话Bean:EJB容器不会对EJB的状态做管理,容器会使用实例池的方式或者单例的方式来实现无状态的SessionBean

由:Struts2中的Action,是有状态(prototype);Spring管理的业务逻辑类,是无状态的(Singleton)

这篇博客挺好:有状态sessionbean无状态sessionbean

2.Entity Bean:是持久数据组件,代表存储在外部介质中的持久(Persistence)对象或者已有的企业应用系统资源。简单地讲,一个Entity Bean可以代表数据库中的一行记录,多个客户端应用能够以共享方式访问表示该数据库记录的Entity Bean。

3.MessageDriven Bean是基于JMS消息,一种异步的无状态SessionBean。

JMS下一篇将详细介绍。      

SSH架构在整个Java EE架构中的位置

EJB的依赖注入:

第一:通过JNDI来获取HelloWord

public interface Jndi {
    public String sayHello();
}

@Stateless
@Remote( { Jndi.class })
@RemoteBinding(jndiBinding = "com/wkc/jndi")
public class JndiBean implements Jndi {

    @Override
    public String sayHello() {
        HelloWorld helloworld = getHelloWorld();
        return helloworld.sayHello("jndi");
    }

    public HelloWorld getHelloWorld() {
        try {
            InitialContext ctx = new InitialContext();
            HelloWorld helloworld = (HelloWorld) ctx
                    .lookup("com/wkc/helloworld");//通过jndi来获取HelloWorld
            return helloworld;
        } catch (NamingException e) {
            e.printStackTrace();
        }
        return null;
    }
}

第二:通过@Ejb()注释来存取HelloWord

public interface Injection {
    String sayHello();
}

第一种方式:

@Stateless
@Remote( { Injection.class })
@RemoteBinding(jndiBinding = "com/wkc/injection")
public class InjectionBean implements Injection {

    @EJB(beanName="HelloWorldBean")//beanName指定EJB的名称(如果@Stateless或@Stateful没有设置过name属性,默认为不带包名的类名)
    private HelloWorld helloworld;

    @Override
    public String sayHello() {
        return helloworld.sayHello("注入者");
    }
}

第二种方式:

@Stateless
@Remote( { Injection.class })
@RemoteBinding(jndiBinding = "com/wkc/injection")
public class InjectionBean implements Injection {

    private HelloWorld helloworld;

    @EJB(beanName = "HelloWorldBean")//容器会在属性第一次使用之前,自动的用正确的参数调用bean的Setter方法
    public void setHelloWorld(HelloWorld helloworld) {
        this.helloworld = helloworld;
    }

    @Override
    public String sayHello() {
        return helloworld.sayHello("注入者");
    }
}

第三种方式:

@Stateless
@Remote( { Injection.class })
@RemoteBinding(jndiBinding = "com/wkc/injection")
public class InjectionBean implements Injection {

    @EJB(mappedName="com/wkc/helloworld")//mappedName指定EJB的全局JNDI名
    private HelloWorld helloworld;

    @Override
    public String sayHello() {
        return helloworld.sayHello("注入者");
    }
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值