EJB总结一

来源:互联网 发布:淘宝小二介入卖家赢 编辑:程序博客网 时间:2024/05/16 09:00

概念理解

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("注入者");    }}

原创粉丝点击