EJB 隨筆

       之前學習過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註冊的,即是說,第一個實現類不會成爲服務,只是一個普通的類

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章