EJB 随笔<一>

来源:互联网 发布:速读记忆训练软件. 编辑:程序博客网 时间:2024/04/25 23:11

       之前学习过EJB,但是好久没有使用了,由于项目关系,所以重操旧业。但是发现突然间对EJB使用不是很顺手,所以重新了解了一下EJB,这次记录下来吧。

基础知识这里就不在赘述了,google一把一把的,就说一下我比较困惑的几点


1、同一个interface,不可以在同一个实现中,既使用@Remote,又使用@Local

2、同一interface,可以在不同实现中,及使用@Remote,又使用@Local

例子:


public interface IReportDaoLocal {
public void saySomething();
}


实现1

import javax.ejb.Stateless;
@Stateless
public class ReportDaoLocal implements IReportDaoLocal {
@Override
public void saySomething() {
System.out.println("I am in ReportDaoLocal");
}
}

实现2

import javax.ejb.EJB;
import javax.ejb.Remote;
import javax.ejb.Stateless;

@Stateless
@Remote({IReportDaoLocal.class})
public class ReportDaoremote implements IReportDaoLocal {
@EJB(name="ReportDaoLocal")
private IReportDaoLocal reportlocal;

@Override
public void saySomething() {
System.out.println("i am local interface of reportDao Local");
reportlocal.saySomething();
}
}


这样实现是没有问题的,下边这种实现方式是错误的

import javax.ejb.Stateless;
@Stateless

@Local({IReportDaoLocal .class})

@Remote({IReportDaoLocal .class})
public class ReportDaoLocal implements IReportDaoLocal {
@Override
public void saySomething() {
System.out.println("I am in ReportDaoLocal");
}
}


3、如果interface 没有继承其他interface,则不可以使用@Stateless,@Local,@Remote,如果有其他继承接口,没有试验

例如:

@Stateless
public interface IReportDaoLocal {
public void saySomething();
}

这是错误的,虽然没有写@Local,只写@Stateless默认是Local端口

4、如果一个实现类,继承了另一个实现类,而另一个实现类被标注了@Stateless或者@Remote标注,在Jboss 5服务器中,第一个实现类是不会被JNDI注册的,即是说,第一个实现类不会成为服务,只是一个普通的类