2017-02-13 2 views
0

Я новичок в EJB. Я пытаюсь понять функциональность фасованного корпоративного компонента.Понимание функциональности сессионного компонента предприятия без состояния в EJB

Посмотрите на следующий пример:

@Stateless 
@LocalBean 
public class FlightService implements Serializable { 

/** 
* Default constructor. 
*/ 
public FlightService() { 
    // TODO Auto-generated constructor stub 
} 
/** 
* @return the id 
*/ 
public Integer getId() { 
    return id; 
} 
/** 
* @param id the id to set 
*/ 
public void setId(Integer id) { 
    this.id = id; 
} 
/** 
* @return the from 
*/ 
public String getFrom() { 
    return from; 
} 
/** 
* @param from the from to set 
*/ 
public void setFrom(String from) { 
    this.from = from; 
} 
/** 
* @return the to 
*/ 
    public String getTo() { 
     return to; 
    } 
    public void setTo(String to) { 
    this.to = to; 
    } 
/** 
* @return the price 
*/ 
    public Integer getPrice() { 
    return price; 
    } 
/** 
* @param price the price to set 
*/ 
    public void setPrice(Integer price) { 
     this.price = price; 
    } 
/** 
* @return the numOfSeats 
*/ 
    public Integer getNumOfSeats() { 
     return numOfSeats; 
    } 
/** 
* @param numOfSeats the numOfSeats to set 
*/ 
    public void setNumOfSeats(Integer numOfSeats) { 
     this.numOfSeats = numOfSeats; 
    } 
    /** 
    * @return the airplaneModel 
*/ 
    public String getAirplaneModel() { 
     return airplaneModel; 
    } 
/* (non-Javadoc) 
* @see java.lang.Object#toString() 
*/ 
@Override 
public String toString() { 
     return "FlightService [id=" + id + ", from=" + from + ", to=" + to + ", price=" + price + ", numOfSeats=" 
      + numOfSeats + ", airplaneModel=" + airplaneModel + "]"; 
} 
/** 
* @param airplaneModel the airplaneModel to set 
*/ 
public void setAirplaneModel(String airplaneModel) { 
    this.airplaneModel = airplaneModel; 
} 
private Integer id =23467; 
private String from="Los Angles"; 
private String to="London"; 
private Integer price=400; 
private Integer numOfSeats=250; 
private String airplaneModel="Boeing 787"; 

} 

Вот класс, где используется впрыск @EJB зависимость.

@EJB 
private FlightService flightService; 
@EJB 
private FlightService flightService1; 
@EJB 
private FlightService flightService2; 
@EJB 
private FlightService flightService3; 
@EJB 
private FlightService flightService4; 
@EJB 
private FlightService flightService5; 
@EJB 
private FlightService flightService6; 
public FlightDetails() { 
    super(); 
    System.out.println(flightService); 

} 
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
*/ 
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // TODO Auto-generated method stub 
    PrintWriter out = response.getWriter(); 
    response.setContentType("text/html"); 
    flightService.setAirplaneModel("Rishanth"); 
    flightService.setFrom("vijaywada"); 
    flightService.setId(1); 
    flightService.setNumOfSeats(4); 
    flightService.setPrice(4); 
    flightService.setTo("hyderabad");  
    flightService4.setAirplaneModel("cannadian Airlines"); 
    out.println(flightService.getAirplaneModel()); 

} 

Я хочу, чтобы понять, когда я печатать

"flightService.getAirplaneModel()" 

почему я получаю значение, установленное на

"flightService4.setAirplaneModel("cannadian Airlines");" 

Любая помощь будет оценена.

+0

Поскольку фасоль должна быть ** Stateless **, то есть он не имеет никакого разговорного состояния. И BTW, даже если он был один, вы вызываете setAirplaneModel на flightService4 и вызываете getAirplaneModel на flightService. –

+0

@JBNizet Я извиняюсь за Типо. Повторите этот вопрос еще раз. –

+0

Опять же, bean должен быть ** без гражданства **. Поэтому у него не может быть разговорного состояния. Контейнер может повторно использовать любой экземпляр для любого запроса, если два запроса не обрабатываются одновременно одним и тем же экземпляром. –

ответ

2

Это связано с тем, что у J2EE-сервера будет пул для каждого @Statelss EJB, а для каждого отдельного клиента будет создан новый экземпляр. В вашем случае, случается, что только один клиент использует введенные EJB.

Ссылка: http://docs.oracle.com/cd/E13222_01/wls/docs81/ejb/session.html

Похожий вопрос: Difference between @Stateless and @Singleton

Смежные вопросы