Hallo zusammen,
ich habe Schwierigkeit, den Sinn einer Stateful Ejb zu verinnerlichen. Ich habe verstanden, dass der Zustand der Bean gemerkt wird, aber bei einem Java-Objekt wird der Zustand doch auch gemerkt. Warum möchte man Stateful statt normalem Java-Objekt verwenden? Beispiel:
service = (EmployeeServiceRemote) new InitialContext().lookup("EmployeeBean/remote");
service.addItem("item", 10);
service.removeItem("item", 1);
service.checkout(10
...
Ich habe im Internet den obigen Code gefunden. EmployeeBean wird als Stateful-Bean definiert:
public class EmployeeBean implements EmployeeServiceLocal, EmployeeServiceRemote {
public EmployeeBean() {
}
private HashMap<String,Integer> items = new HashMap<String,Integer>();
public void addItem(String item, int quantity) {
Integer orderQuantity = items.get(item);
if (orderQuantity == null) {
orderQuantity = 0;
}
orderQuantity += quantity;
items.put(item, orderQuantity);
}
public void removeItem(String item, int quantity) {
Integer orderQuantity = items.get(item);
if (orderQuantity == null) {
return;
}
orderQuantity -= quantity;
if (orderQuantity > 0) {
items.put(item, orderQuantity);
} else {
items.remove(item);
}
}
public Map<String, Integer> getItems() {
return items;
}
@Remove
public void checkout(int paymentId) {
System.out.println("checkout");
}
@Remove
public void cancel() {
}
}
Ganz konkrett:
wenn wir hier auf @Stateful verzichten würden und in dem Client-Code einfach new EmployeeBean(); verwenden, geht das doch auch oder?
Wo ist hier mein Denkfehler?
Vielen lieben Dank aus Rheinland,
Eure Ratna:)