G
Gast2
Gast
Hallo zusammen,
da nicht genau weiß wo das Problem ist oder ob das Verhalten normal ist. Hole ich mal etwas weiter aus und mache auch konkrete Beispiele.
Ich hab folgende Klassen:
Entitity
Dao
Ich habe um das Problem mal zu erklären 2 gleiche Services gemacht:
Service 2
Service 1
Ich injekte einen Service in einen anderen also. Der EntityManager ist immer die gleiche Instanz. Aber ich habe 2 verschiedene DAO Instanzen, deshalb werden im 2ten Service andere Instanzen von dem Angebot geladen als im 1 (siehe 2ter if).
Ich würde gern für den einen Aufruf immer das gleiche DAO verwenden, damit die Instanzen auch die gleiche aus dem EntityManager sind. Wie macht man sowas besser, damit für alle calls und subcalls die gleichen Instanzen geladen werden, damit sowas wie im 1. if funktioniert?
Einen Wrapper um den DAO bauen? Oder gibt es irgendwo eine Annotation in CDI oder EJB die gewährleistet, dass man so ein shared DAO hat?
da nicht genau weiß wo das Problem ist oder ob das Verhalten normal ist. Hole ich mal etwas weiter aus und mache auch konkrete Beispiele.
Ich hab folgende Klassen:
Entitity
Java:
@Entity
public class HibAngebot implements Serializable {
@Id
private Long id;
public Long getId() {
return this.id;
}
public void setId(Long pk) {
this.id = pk;
}
Dao
Java:
@Stateful
public class MyDAOImpl implements MyDAO{
@PersistenceContext(unitName = "MyUnit", type=PersistenceContextType.EXTENDED)
private EntityManager entityManager;
@Override
public Angebot findAngebotById(long angebotsId) {
return entityManager.find(Angebot.class, angebotsId);
}
}
Service 2
Java:
public class AngebotService2Impl implements AngebotService2 {
@Inject
private MyDAO myDAO;
@Override
public Set<Angebot> getAngebote() {
Set<Angebot> angebote = new HashSet<Angebot>();
angebote.add(myDAO.findAngebotById(265593));
return angebote;
}
}
Service 1
Java:
public class AngebotRemoteServiceImpl implements AngebotRemoteService {
@Inject
private MyDAO myDAO;
@Inject
private AngebotService2 angebotService2;
@Override
public Set<HibAngebot> getAngebote() {
Set<Angebot> angebote = new HashSet<Angebot>();
HibAngebot angebot = myDAO.findAngebotById(265593);
angebote.add(findAngebotById(265593));
HibAngebot angebot2 = myDAO.findHibAngebotById(265593);
System.out.println(angebot2.equals(angebot)); -->true
Set<Angebot> angebote2 = angebotService2.getAngebote();
System.out.println(angebote2.contains(angebot));--> false =(
return angebote ;
}
}
Ich injekte einen Service in einen anderen also. Der EntityManager ist immer die gleiche Instanz. Aber ich habe 2 verschiedene DAO Instanzen, deshalb werden im 2ten Service andere Instanzen von dem Angebot geladen als im 1 (siehe 2ter if).
Ich würde gern für den einen Aufruf immer das gleiche DAO verwenden, damit die Instanzen auch die gleiche aus dem EntityManager sind. Wie macht man sowas besser, damit für alle calls und subcalls die gleichen Instanzen geladen werden, damit sowas wie im 1. if funktioniert?
Einen Wrapper um den DAO bauen? Oder gibt es irgendwo eine Annotation in CDI oder EJB die gewährleistet, dass man so ein shared DAO hat?