Zdravim,
mam problem s implementaci Factory Patternu. Nevim tedy, jestli zrovna
tohle je tedy idealni zpusob.
Pr.:
Mam nejakou beanu, ktera na zaklade predaneho parametru v metode vraci
danou instanci jine beany:
@EJBs({
@EJB(name="ejb/P1", beanInterface=Interface1.class),
@EJB(name="ejb/P2", beanInterface=Interface2.class),
@EJB(name="ejb/P3", beanInterface=Interface3.class),
@EJB(name="ejb/P4", beanInterface=Interface4.class)})
@Stateless
class MyBean implements ... {
public Object getBean(int bean) {
try {
return context.lookup("ejb/P" + modul); }
catch (Exception e) {
throw new FactoryException("Chyba pri dochledavani tridy. " +
e.getMessage()); }
}
}
Jinymi slovy, podle daneho cisla, coz je ve finale nejaky PK z databaze,
potrebuji vratit tu danou beanu.
Problem neni ani tak s vracenim, jako s udrzenim instance.
Zavola se jedna beana, po chvili jina a tam je problem. Potreboval bych
nejak tu prvni ukoncit.
Samotne beany implementuji interface, ktery dedi jiny interface, ktery
obsahuje metody pro nejakou akci, jedna se nejakou praci s daty.
Problem ovsem je, ze po prvnim zavolani se mi uchova PersistenceUnit a
pote, kdyz napodruhe pracuji s entitami, ktere byly pouzite i v prvni
fazi, tak se mi neaktualizuji podle DB,
ale jsou uchovany v EM podle posledniho stavu.
Problem potom nastava v tom, ze i kdyz provedu nejake smazani, tak se mi
stejne uchovavaji v EM. Po pokusu o persist se mi vyhodi hlaska o
'Cannot persist detached entity'. Podle toho, co jsem cetl v EJB3 In
Action, tak v EM se uchovavaji bud po dobu transakce
(vesmes pouziva, requires_new nebo not_supported, jedna se o davku,
takze to v transakci udrzovat nemuzu),
nebo po dobu existence Persistence Unit, respektive pri existenci
instance, ktera obsahuje:
@PersistenceContext(unitName="default") private EntityManager em;
Da se nejak zaridit, aby se prvni instance ukoncila? Zejmena potom, co
se zavola jina z factory.
S tim souvisi jeste jedna otazka. Da se nejak dedit jedna beana do druhe?
V knize jsem nasel, ze takova moznost existuje, ale kdyz to pouziji v
netbeans, hlasi mi to chybu o tom, ze extendovat jinou beanu nesmim :(
@Stateless
class Bean1 implements Bean1Interface {
}
@Stateless
class Bean2 extends Bean1 implements Bean2Interface {
}
Diky moc za nakopnuti :)
________ Information from NOD32 ________
This message was checked by NOD32 Antivirus System for Linux Mail Servers.
http://www.eset.com