Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么是EJB客户端?_Java_Ejb_Ejb 3.0 - Fatal编程技术网

Java 什么是EJB客户端?

Java 什么是EJB客户端?,java,ejb,ejb-3.0,Java,Ejb,Ejb 3.0,总之,我是Java世界EJB的新手,在读了一本好书《会话Bean》之后,我有一个关于会话Bean的问题。会话bean的EJB客户端是什么?假设我们有如下代码 //EJB definition import javax.ejb.Remote; @Remote public interface PlaceOrder { .. void addItem(Long itemId); Long confirmOrder(); .. } @Stateful public class Pl

总之,我是Java世界EJB的新手,在读了一本好书《会话Bean》之后,我有一个关于会话Bean的问题。会话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定义
导入javax.ejb.Remote;
@遥远的
公共界面订单{
..
无效附加项(长项目ID);
长确认人();
..
}
@有状态
公共类PlaceOrderBean实现PlaceOrder{
私人清单项目;
PublicPlaceOrderBean(){
items=newarraylist();
}
公共无效附加项(长项目ID){
items.add(itemId);
}
@除去
公开长期确认人(){
订单=新订单();
...
returnorder.getOrderId();
}
}
//客户
导入javax.ejb.ejb;
公共类PlaceOrderTestClient{
@EJB
私有静态PlaceOrder PlaceOrder 1;
@EJB
私有静态PlaceOrder PlaceOrder 2;
公共静态void main(字符串[]args)引发异常{
System.out.println(“执行PlaceOrder EJB…”);
placeOrder1.addItem(新长(200));
placeOrder1.addItem(newlong(201));
Long orderId=placeOrder1.confirmOrder();
System.out.println(“订单确认号:+orderId”);
}
}
已更新


EJB客户端是指
placeOrder1
placeOrder2
还是主应用程序?这是否意味着有多个EJB客户端?另一个问题是,如果它在
Servlet
中而不是在main方法中,该怎么办?谢谢。

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

这里,在您的场景中,触发
PlaceOrderBean
的是客户端


对于Servlet,如果
Servlet
调用
EJB
,从技术上讲,它是客户端,但通常称为
Facade

EJB客户端是本地程序,用于执行在服务器端实现的功能/行为


此处PlaceOrderTestClient是EJB客户端。

Hi,@TechExchange,请再次查看更新的内容,此场景中有多少客户端?谢谢。没有
placeOrder1
2
是PlaceOrderBean的实例/参考。使用它的代码成为客户原谅我的理解力差,我不知道你的意思。单词
using
意味着调用EJB的方法,而不仅仅是声明EJB类型的引用?因此,在我看来,在这个示例中只有一个EJB客户机,尽管我声明了两个EJB类型的引用。如果我错了,请纠正我。谢谢。我的意思是唯一一个EJB客户端是
placeOrder1
的引用,而不是
placeOrder2
。因为我没有使用
placeOrder2
,谢谢。我自己也一直在想这个问题。这个答案使它更清楚了一点,但不是很清楚。“触发PlaceOrderBean的是客户端”中的“触发器”是什么意思。触发bean的是
PlaceOrderTestClient
类吗?请更正,不能直接在main方法中调用非静态变量placeOrder1。不能从静态上下文引用非静态变量或方法。@Visruth CV,谢谢。好了。