App Serverの稼働時間の間、オブジェクトをデータ構造に格納することは可能ですか?基本的には、このデータ構造とインターフェースするEJBが必要ですが、完全なデータベースソリューションは必要ありません。データ構造内のEJBと格納オブジェクト(マップ、リストなど)
例として、私はこのダミー動物オブジェクトを作った:
package com.test.entities;
public class Animal implements java.io.Serializable {
private static final long serialVersionUID = 3621626745694501710L;
private Integer id;
private String animalName;
public Integer getId() {
// TODO Auto-generated method stub
return id;
}
public void setId(Integer id){
this.id=id;
}
public String getAnimalName(){
return animalName;
}
public void setAnimalName(String animalName){
this.animalName=animalName;
}
}
だからここEJBリモートインタフェースである:ここでは
package com.test.beans;
import java.util.Map;
import javax.ejb.Remote;
import com.test.entities.Animal;
@Remote
public interface MapBeanRemote {
public void addAnimal(Animal a);
public void removaAnimal(Integer id);
public Animal getAnimalById(Integer id);
Map<Integer, Animal> getAllAnimals();
}
はセッションBeanです:
package com.test.beans;
import java.util.ConcurrentHashMap;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.ejb.Stateless;
import com.test.entities.Animal;
@Stateless(mappedName="ejb/MapBean")
public class MapBean implements MapBeanRemote{
Map<Integer, Animal> animalStore;
@PostConstruct
public void initialize(){
animalStore = new ConcurrentHashMap<Integer,Animal>();
}
@Override
public void addAnimal(Animal a) {
if(a.getId()!=null){
animalStore.put(a.getId(), a);
}
}
@Override
public Animal getAnimalById(Integer id) {
return animalStore.get(id);
}
@Override
public void removaAnimal(Integer id) {
animalStore.remove(id);
}
@Override
public Map<Integer, Animal> getAllAnimals() {
return animalStore;
}
}
は、
だから基本的に私はtを操作したいクライアント彼はAnimal Mapを使ってこのEJBを調べ、各クライアントがオブジェクトの同じ正確なマップにアクセスするようにします。
この例は十分に機能しません。しばらくすると、すべての動物が消去されます(EJBがBeanプールから置き換えられると仮定しています)。これをリソースとして注入することはできますか?
ありがとうございました。ステートフルセッションBeanは、アプリケーションサーバー全体ではなく、特定のクライアントで状態を維持するためのものです。 – systemoutprintln
はい、あなたの正しい、申し訳ありませんが明らかにしている必要があります。 – Karl