什么是EJB客户端?

4

大家好,我是Java世界EJB的新手。在阅读了一本名为Ejb3.0 in Action的好书后,我对Session Bean有一个问题。什么是Session Bean的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_不能直接从主方法中调用。即非静态变量或方法不能从静态上下文中引用 - Visruth
@ Visruth CV,谢谢。已经完成。 - Joe.wang
2个回答

3

EJBClient 是一个本地程序,可以调用和操作 Remote Bean。

在您的情况下,触发 PlaceOrderBean 的任何内容都是客户端。

对于 Servlet,在 Servlet 调用 EJB 的情况下,它在技术上是客户端,但通常称为 Facade


嗨,@TechExchange,请再次查看更新的内容,这种情况下有多少客户端?谢谢。 - Joe.wang
没有 placeOrder12 是 PlaceOrderBean 的实例/引用。使用它的代码成为客户端。 - TheWhiteRabbit
对不起,我理解有限,不太确定你的意思。using 这个词是指调用 EJB 的方法,而不仅仅是声明 EJB 类型的引用?所以,在我看来,虽然我声明了两个 EJB 类型的引用,但在这个例子中只有一个 EJB 客户端。如果我理解错了,请纠正我。谢谢。 - Joe.wang
我的意思是,唯一的EJB客户端是placeOrder1的引用,而不是placeOrder2。因为我没有使用placeOrder2,谢谢。 - Joe.wang
我自己一直在思考这个问题。这个答案让它变得更清晰了,但还不够。在“无论什么触发器”中,“触发器”的意思是什么,“PlaceOrderBean是客户端”。是PlaceOrderTestClient类触发了这些bean吗? - numfar

0

一个 EJB 客户端是执行服务器端实现的功能/行为的本地程序。

这里的 PlaceOrderTestClient 是 EJB 客户端。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接