Можно ли хранить объекты в структуре данных на время работы сервера приложений? По сути, я хочу 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 Remote :
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();
}
Вот сессионный компонент:
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;
}
}
Таким образом, я хочу, чтобы любой клиент, который хочет манипулировать картой животных, прошел через этот EJB и чтобы каждый клиент имел доступ к одной и той же карте объектов.
Этот пример не работает достаточно хорошо. Через некоторое время все животные будут стерты (я полагаю, когда EJB будет заменен из пула бинов). Может ли это быть каким-то образом внедрено как ресурс?