2013-02-05 184 views
4

ALL,我是Java World的EJB的新手,看過好書Ejb3.0 in Action後,我對Session Bean有個疑問。什麼是會話bean的EJB客戶端?假設我們有一些代碼如下所示。什麼是EJB客戶端?

//EJB definition 
import javax.ejb.Remote; 
@Remote 
public interface PlaceOrder { 
    .. 
    void addItem(Long itemId); 
    Long confirmOrder(); 
    .. 
} 

@Stateful 
public class PlaceOrderBean implements PlaceOrder { 
    private List<Long> items; 
    public PlaceOrderBean() { 
    items = new ArrayList<Long>(); 
    } 

    public void addItem(Long itemId) { 
    items.add(itemId); 
    } 

    @Remove 
    public Long confirmOrder() { 
    Order order = new Order(); 
    ... 
    return order.getOrderId(); 
    } 
} 


//Client 
import javax.ejb.EJB; 
public class PlaceOrderTestClient { 
    @EJB 
    private static PlaceOrder placeOrder1; 
    @EJB 
    private static PlaceOrder placeOrder2; 
    public static void main(String [] args) throws Exception { 
    System.out.println("Exercising PlaceOrder EJB..."); 
    placeOrder1.addItem(new Long(200)); 
    placeOrder1.addItem(new Long(201)); 

    Long orderId = placeOrder1.confirmOrder(); 
    System.out.println("Order confirmation number: " + orderId); 
    } 
} 

更新

的EJB客戶端設備placeOrder1placeOrder2或主應用程序?這是否意味着多個EJB客戶端?另一個問題是,如果它在Servlet而不是主要方法?謝謝。

+1

請更正,非靜態變量_placeOrder1_不能直接調用到main method.i.e中。 **非靜態變量或方法不能從靜態上下文**中引用。 – Visruth

+0

@Visruth簡歷,謝謝。已完成。 –

回答

3

EJBClient是一個本地程序,它可以調用和操作Remote

在這裏,您的方案無論觸發PlaceOrderBean是客戶

櫃面的Servlet,如果Servlet調用EJB它在技術上是客戶端,但通常稱爲Facade

+0

嗨,@TechExchange,請再次查看更新的內容,在這種情況下有多少客戶?謝謝。 –

+0

否'placeOrder1'和'2'是PlaceOrderBean的實例/引用。使用它的代碼成爲客戶端 – TheWhiteRabbit

+0

原諒我的不理解,我不確定你的意思。 「using」這個詞的意思是調用EJB的方法,而不是隻聲明EJB類型的引用?所以,在我看來,這個例子中只有一個EJB客戶端,儘管我聲明瞭2個EJB類型的引用。如果我錯了,請糾正我。謝謝。 –

0

EJB客戶端是本地程序,用於執行在服務器端實現的功能/行爲。

這裏PlaceOrderTestClient是EJB客戶端。