Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Sinhronizacija objekta s tabelom (ejb3 / jpa1), kako?

[es] :: Java :: Sinhronizacija objekta s tabelom (ejb3 / jpa1), kako?

[ Pregleda: 3374 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

branecns
Branislav Černić
Novi Sad

Član broj: 28805
Poruke: 40
*.dialup.neobee.net.



Profil

icon Sinhronizacija objekta s tabelom (ejb3 / jpa1), kako?15.07.2008. u 21:15 - pre 192 meseci
Pozdrav svima,

ucim ejb3 pa radim jedan mali inf sistem o izvestajima za zaposlene. Koristim javu 1.5.15, radim u netbeansu 6.1 i glassfishu koji je dosao uz njega. I imam oracleovu bazu 10 express, tako da koristim sequence i triggere za auto primary key.

Imam tabele User i Report koje su u vezi tako da jedan korisnik moze da ima vise izvestaja, dok izvestaj pripada tacno jednom korisniku. Tako da tabela Report ima kompozitni primarni kljuc (iduser, idreport). Mapiranje sam uradio tako da koristim anotaciju idclass u entitiju Report, dok entiti User ima List kolekciju userReports:
Code:

@OneToMany(cascade = {CascadeType.ALL})
@JoinTable(name="REPORTS_REPORT", joinColumns={@JoinColumn(name="idUser")})
private List <Report> userReports = new ArrayList<Report>();
public List<Report> getUserReports() {
    return userReports;
}

public void setUserReports(List<Report> userReports) {
    this.userReports = userReports;
}


Za prezentacioni sloj koristim jsf. Imam fajl users.jsp gde datatable komponenta prikazuje korisnike. Svaka vrsta te tabele se zavrsava dugmetom "Izvestaji" koje vodi na novu stranicu userReport.jsp, a koja prikazuje izvestaje izabranog korisnika. Na njoj takodje imam datatable koji prikazuje te izvestaje.

Buduci da nikad ovo nisam radio, cini mi se da je ok da u momentu kada odem na stranicu za izvestaje (za kliknutog korisnika), povucem iz baze sve informacije za tog korisnika, tako da, dokle god sam na stranici za izvestaje, imam jednu promenljivu, selectedUser, koja cuva u sebi sve sto se inace nalazi u bazi za tog korisnika. Ne znam uopste da li je to dobar nacin. Tako sam krenuo da radim da bi mi se forme lakse ucitavale, da ne mora da se pravi round trip do baze svaki put, vec da u memoriji sve cuvam. Ako to tako ne treba da se radi, onda ovo sto sledi mozda i ne vredi.

Uglavnom, datatable na stranici izvestaja vuce svoje podatke iz promenljive reportsModel koja je tipa DataModel, da bih mogao da se sluzim sa getRowData itd. Znaci, u backing beanu imam metod getReportsModel, kao i getFullUser. Evo kako oni izgledaju:
Code:

public User getFullUser() {
    int idUser = (Integer) Utilities.getSessionObj("idUser");
    UserRemote uR = Utilities.getUserRemote();
    return uR.getFullUser(idUser);
  }

public DataModel getReportsModel() {
    if (reportsModel == null) {
      reportsModel = new ListDataModel();
    }
    if (selectedUser == null) {
      selectedUser = new User();
      selectedUser = getFullUser();
    }
    reportsModel.setWrappedData(selectedUser.getUserReports());
    return reportsModel;
  }


Kada se sa stranice izvestaja vracam na roditeljsku o korisnicima, postavio sam da je selectedUser = null, cime sam obezbedio da obrnuto, kada sa korisnika ponovo odem na izvestaje, zaista bude selectedUser = null i onda se izvrsi onaj if deo. U ostalim slucajevima ne treba da mi se izvrsi metod getFullUsers. Inace, on se nalazi u istom backing beanu i ima za zadatak samo da pozove istoimeni metod iz Report session beana koji ce mi ucitati iz baze izabranog korisnika i povuci sve njegove izvestaje:
Code:

public User getFullUser(int idUser){
    User user = em.find(User.class, idUser);
    user.getUserReports().size();
    return user;
  }


Da bi poziv size() ucitao sve kako treba, moj entiti treba da je managed u persitence contextu. Ovde se desavaju neke cudne stvari :). Recimo, svaki red datatable komponente izvestaja ima dugme "Izbrisi" kojim uspesno izbrisem slog i iz baze i iz selectedUsera:
Code:

public String delReport() {
    ReportRemote rR = Utilities.getReportRemote();
    Report selReport = (Report) reportsModel.getRowData();
    selectedUser.getUserReports().remove(selReport);
    rR.removeReport(selReport);
    return "userReport";
  }


Kad odem na to dugme, dogodi se postback, ucita se ponovo stranica, dakle ponovo se pozove metod getReportsModel, selectedUser != null ovaj put, preskoci se if blok, reportsModel se napuni onim sto je ostalo u selectedUser posle brisanja, i to sve lepo izgleda i na ekranu i u bazi, kad proverim bazu kroz oracle manager stvarno je sve ok.

Medjutim, kad ugasim brauzer, pokrenem aplikaciju ponovo i dodjem na izvestaje, ovaj put je selectedUser = null i izvrsi se if blok. Ode se na getFullUser i iz ne znam cega se izvuku podaci koji uopste vise ne postoje u bazi posle prethodnog brisanja. Iz nekog glassfishovog kesha mozda?

Sta bih ovde trebalo da uradim pa da sve lepo proradi? Kada izmenim getFullUser tako da ne koristi tu problematicnu liniju user.getUserReports().size();, vec umesto toga uradim klasican sql kojim povucem sve izvestaje korisnika preko ref integriteta, sve je ok. Ali nije poenta u tome, vec je poenta da koristim bas taj collection atribut iz entitija, ciju sam definiciju naveo na pocetku.
 
Odgovor na temu

anon315

Član broj: 315
Poruke: 1657
*.adsl-a-1.sezampro.yu.



+13 Profil

icon Re: Sinhronizacija objekta s tabelom (ejb3 / jpa1), kako?15.07.2008. u 23:40 - pre 192 meseci
Koja implementacija JPA specifikacije je u pitanju, da nije mozda Oracle Toplink?
 
Odgovor na temu

branecns
Branislav Černić
Novi Sad

Član broj: 28805
Poruke: 40
*.dialup.neobee.net.



Profil

icon Re: Sinhronizacija objekta s tabelom (ejb3 / jpa1), kako?16.07.2008. u 00:41 - pre 192 meseci
Citat:
Vanja Petreski: Koja implementacija JPA specifikacije je u pitanju, da nije mozda Oracle Toplink?


Jeste, upravo ta.
 
Odgovor na temu

anon315

Član broj: 315
Poruke: 1657
*.adsl-a-1.sezampro.yu.



+13 Profil

icon Re: Sinhronizacija objekta s tabelom (ejb3 / jpa1), kako?16.07.2008. u 08:54 - pre 192 meseci
E pa da, to su ti problemi. Ja sam se ranije isto mucio sam tim dok sam koristio Oracle-ova sranja (ne mislim na bazu). Toplo ti preporucujem da predjes na Hibernate, ne samo zbog ovoga, vec zbog gomile drugih problema na koje ces naici. A i JSF bi mog'o da batalis

Nego, da ne skrecem sa teme - problem koji imas je to sto Toplink sve zivo kesira. Ako ubijes aplikacioni server u medju-koraku, opet ga dignes i pokusas da iscitas, videces da je sve u redu. Resenje lezi u tome da podesis persistence.xml koliko se secam. Tu moras da ugasis kes. Pogledaj (nesrecnu) Toplink dokumentaciju, tamo ces naci kako se to radi
 
Odgovor na temu

branecns
Branislav Černić
Novi Sad

Član broj: 28805
Poruke: 40
*.dialup.neobee.net.



Profil

icon Re: Sinhronizacija objekta s tabelom (ejb3 / jpa1), kako?16.07.2008. u 13:18 - pre 192 meseci
Citat:
Vanja Petreski: E pa da, to su ti problemi. Ja sam se ranije isto mucio sam tim dok sam koristio Oracle-ova sranja (ne mislim na bazu). Toplo ti preporucujem da predjes na Hibernate, ne samo zbog ovoga, vec zbog gomile drugih problema na koje ces naici. A i JSF bi mog'o da batalis :D

Nego, da ne skrecem sa teme - problem koji imas je to sto Toplink sve zivo kesira. Ako ubijes aplikacioni server u medju-koraku, opet ga dignes i pokusas da iscitas, videces da je sve u redu. Resenje lezi u tome da podesis persistence.xml koliko se secam. Tu moras da ugasis kes. Pogledaj (nesrecnu) Toplink dokumentaciju, tamo ces naci kako se to radi ;)


E hvala ti na pomoci. Nazalost sam jos uvek na dial-upu tako da cu se snaci da skinem hibernate pa cu javiti kako je proslo sve, ali valjda ne bi trebalo da bude problema. Batalio sam toplink tako da necu ni iskljucivati kesh, promenio sam persistence.xml i undeployovao aplikaciju. Inace, nije bilo potrebno cak ni da ubijem server, bilo je dovoljno da uradim undeploy / deploy i kesh se resetovao.

Nego da ne gubim vreme dok trazim hibernate, imam jos jedno pitanje. Radi se o transakcijama. Ni u jednom backing beanu se nisam pozivao na entity manager, vec to uvek ostavljam za session beanove. Racunam, oni se nalaze u ejb kontejneru, i onda on brine o transakcijama. Znaci, jedino o cemu ja treba da razmisljam na klijentu je kako preko jndi-a pozvati remote interfejs i to je sve. Ne znam uopste da li je to ispravan nacin? Recimo, sad se dvoumim oko nekih stvari, pa evo jednog primera.

Imam tabelu Report koje vuce kljuc idstatus iz tabele Status, tako da u aplikaciji, kad punim izvestaj, iz select liste biram njen status. Zbog toga sam u tabeli Report dodao:
Code:

@ManyToOne
@JoinColumn(name="IDSTATUS", nullable=false)
private Status status;

public Status getStatus() {
    return status;
}

public void setStatus(Status status) {
    this.status = status;
}


Na jsp stranici imam dugme "Kreiraj izvestaj" koje preko jsf actiona poziva metod iz backing beana:
Code:

public String createReport() {
    ReportRemote rR = Utilities.getReportRemote();
    Report report = new Report();
    Status status = new Status();
    status.setIdstatus(idstatus);
    report.setIduser((Integer) Utilities.getSessionObj("idUser"));
    report.setTitle(title);
    report.setStatus(status);
    rR.createReport(report);
    selectedUser.getUserReports().add(report);
    return "userReport";
}


Tabela Report ima primarni kljuc (idreport, iduser), a entiti u sebi ima referencu na Status, kao sto sam napisao. U session beanu (koji je stateless) imam metode:
Code:

public int getLastID() {
    try {
      Query q = em.createQuery("SELECT MAX(r.idreport) FROM Report r");
      return (Integer) q.getSingleResult();
    } catch (NoResultException nre){
      return 0;
    } catch (NullPointerException nre){
      return 0;
    }
}

public void createReport(Report report) {
    report.setIdreport(getLastID()+1);
    try {
      em.persist(report);
    } catch (EntityExistsException eee){
      report.setIdreport(0);
    }
}


Sad mene zanima da li je ovakav pristup ok, ako nije, sta sve ne valja i kako menjati.
Eto, hvala na pomoci, bice posle jos koje pitanje :)
 
Odgovor na temu

anon315

Član broj: 315
Poruke: 1657
*.adsl-a-1.sezampro.yu.



+13 Profil

icon Re: Sinhronizacija objekta s tabelom (ejb3 / jpa1), kako?16.07.2008. u 15:01 - pre 192 meseci
Dobro razmisljas. Dakle, web akcije ili kako god to zoves treba samo da pozovu "servis" koji uradi posao i to je sve. JNDI je jedan nacin da dodjes do servisa, ne toliko popularan. Ono sto je fancy je IoC/DI, odnosno upumpavanje zavisnosti. To je onaj Holivudski princip "Don't call us, we'll call you ". Spring nudi tako nesto. Cini mi se da je to moguce postici u web sloju ako koristis servlete 2.5, ima anotacija za to valjda, da upumpas EJB.

Sto se tice tvog primera, nisam detaljno gledao, ali postoji jedna stvar koje treba da budes svestan. Servis jeste lepa stvar, ali cesto ces imati potrebu ili jednostavno neces odoleti da iz akcije pozivas vise servisnih metoda, sto je diskutabilno da li je ok. Zasto? Pa zasto ti je prakticno svaki poziv servisne metode jedna tx. Jedan nacin da se ovo razresi je da imas servisne metode koje interno zovu vise svojih, ali time prljas servis. Ja sam uveo takvu politiku gde se preferira jedna akcija - jedan servisni poziv, ali ako se desi potreba da imam vise servisnih poziva iz akcije koji samo citaju, a samo jedan koji pise, to mi je ok. Ono sto je problem i sto nikad ne radim je da imam vise servisnih poziva iz akcije koji pisu, jer to onda prestaje da bude 1 tx. Najsmesnije od svega je sto sam video da neki veliki igraci ne brinu o tome i ladno krljaju vise poziva iz akcije...

Tu imas i jos jedan problem oko lazy loadinga, ako ti se tx zatvara na kraju servisa. Tacnije, ako ti se sesija (hibernate) zatvara tu. Jedno gotivno resenje je da se prosiri OSIV koncept tako da funkcionise uvek, a ne samo iz web sloja ;)
 
Odgovor na temu

branecns
Branislav Černić
Novi Sad

Član broj: 28805
Poruke: 40
*.dialup.neobee.net.



Profil

icon Re: Sinhronizacija objekta s tabelom (ejb3 / jpa1), kako?16.07.2008. u 20:42 - pre 192 meseci
Citat:
Vanja Petreski: Dobro razmisljas. Dakle, web akcije ili kako god to zoves treba samo da pozovu "servis" koji uradi posao i to je sve. JNDI je jedan nacin da dodjes do servisa, ne toliko popularan. Ono sto je fancy je IoC/DI, odnosno upumpavanje zavisnosti. To je onaj Holivudski princip "Don't call us, we'll call you ". Spring nudi tako nesto. Cini mi se da je to moguce postici u web sloju ako koristis servlete 2.5, ima anotacija za to valjda, da upumpas EJB.


Mislim da osim Springa to nudi i ejb3, bar ako koristis glassfish, mislim da postoji anotacija @ejb koja sluzi bas za to...?

Citat:
Sto se tice tvog primera, nisam detaljno gledao, ali postoji jedna stvar koje treba da budes svestan. Servis jeste lepa stvar, ali cesto ces imati potrebu ili jednostavno neces odoleti da iz akcije pozivas vise servisnih metoda, sto je diskutabilno da li je ok. Zasto? Pa zasto ti je prakticno svaki poziv servisne metode jedna tx. Jedan nacin da se ovo razresi je da imas servisne metode koje interno zovu vise svojih, ali time prljas servis. Ja sam uveo takvu politiku gde se preferira jedna akcija - jedan servisni poziv, ali ako se desi potreba da imam vise servisnih poziva iz akcije koji samo citaju, a samo jedan koji pise, to mi je ok. Ono sto je problem i sto nikad ne radim je da imam vise servisnih poziva iz akcije koji pisu, jer to onda prestaje da bude 1 tx. Najsmesnije od svega je sto sam video da neki veliki igraci ne brinu o tome i ladno krljaju vise poziva iz akcije...


E taj pristup - njih vise cita, a jedan pise - mi deluje bas ok. Tako nesto i postoji kod mene. Ali sta ako je potrebno da imas i vise pisanja da bi se zavrsila jedna velika operacija? Npr, imas neka pisanja u bazu na osnovu kojih se inicijalizuje neki veliki objekat na klijentu, a potom i sam taj objekat treba da se upise u bazu, npr tako sto ga prosledis nekom session beanu koji uradi posao? A sve treba da bude jedna velika transakcija. Kako onda raditi?

Ili druga stvar, sto je kod mene slucaj. Parce kooda koje sam vec naveo, sa malom izmenom (ovo je metod iz backing beana, ne iz sessiona):
Code:

public String createReport() {
    ReportRemote rR = Utilities.getReportRemote();
    Report report = new Report();
    report.setIduser((Integer) Utilities.getSessionObj("idUser"));
    report.setTitle(title);
    report = rR.createReport(report, idstatus);
    selectedUser.getUserReports().add(report);
    return "userReport";
}


Session bean uradi upis u bazu (kad se izvrsi linija: report = rR.createReport(report, idstatus);), a posle toga se updateuje i selectedUser. Jel bi ove 2 operacije trebalo da budu atomicne, tj da se selectedUser osvezi akko se desi upis u bazu? Znaci, ako treba ovaj metod iz backing beana da ugnjezdim u transakciju, sta tacno treba da uradim?:)

Citat:
Tu imas i jos jedan problem oko lazy loadinga, ako ti se tx zatvara na kraju servisa. Tacnije, ako ti se sesija (hibernate) zatvara tu. Jedno gotivno resenje je da se prosiri OSIV koncept tako da funkcionise uvek, a ne samo iz web sloja ;)


Ovo mi bas nije jasno, ako mozes malo da mi pojasnis. Kolko znam, lazy loading pali samo ako imam entiti koji je managed u persistence contextu, ali te verovatno ne pratim...

Inace, stavio sam hibernate u aplikaciju i sad sve ono sto nije radilo kako treba, radi! :) Hvala ti jos jednom!
 
Odgovor na temu

anon315

Član broj: 315
Poruke: 1657
*.adsl-a-1.sezampro.yu.



+13 Profil

icon Re: Sinhronizacija objekta s tabelom (ejb3 / jpa1), kako?16.07.2008. u 21:38 - pre 192 meseci
Citat:

Mislim da osim Springa to nudi i ejb3, bar ako koristis glassfish, mislim da postoji anotacija @ejb koja sluzi bas za to...?


E to, to!

Citat:

Ali sta ako je potrebno da imas i vise pisanja da bi se zavrsila jedna velika operacija? Npr, imas neka pisanja u bazu na osnovu kojih se inicijalizuje neki veliki objekat na klijentu, a potom i sam taj objekat treba da se upise u bazu, npr tako sto ga prosledis nekom session beanu koji uradi posao? A sve treba da bude jedna velika transakcija. Kako onda raditi?


U tom slucaju bih ceo taj proces stavio u jednu zasebnu servisnu metodu, a onda on interno radio posao, eventualno delegirajuci neke delove posla drugim servisima/metodama. A to i ima smisla, jer ti je to biznis logika koja ti je procurela nepotrebno u web sloj. Posto pretpostavljam da ti web sloj nista pemtno ne radi sa tim "inicijalizovanim velikim objektom", sto ne moze i servis da uradi (ako mu prosledis potrebne parametre).

Pretpostavljam da koristis deklaritivne transakcije, ustvari to je valjda u EJB po defaultu. Tu moras da pazis ukoliko ti jedna servisna metoda poziva drugu koja je u istom servisu (EJB-u). Ne znam sta se kod EJB-a tu desava, ali kod Spring servisa, ako zelis da imas nested transakcije ili ces morati da padnes na programske transkacije ili da se dovijas, posto Spring otvara novu tx, samo ako se gadja spolja. Pomenuti problem se, navodno, moze resiti aspectj weavingom, ali meni to nikad nije uspelo.

Citat:

Session bean uradi upis u bazu (kad se izvrsi linija: report = rR.createReport(report, idstatus);), a posle toga se updateuje i selectedUser. Jel bi ove 2 operacije trebalo da budu atomicne, tj da se selectedUser osvezi akko se desi upis u bazu? Znaci, ako treba ovaj metod iz backing beana da ugnjezdim u transakciju, sta tacno treba da uradim?:)


E pa vidis, to je interesantno pitanje. Ja sam se na srecu na vreme izvukao iz te cele heavy EJB price, pa pravo da ti kazem, ne znam tacno kako sve funkcionise, ali odma mogu da ti kazem kako izgleda to radi ispod, ako ti to parce koda koje si dao stvarno radi posao.

Kada vidim ovo "rR.createReport", za mene je to jedna tx. To bi trebalo lako da mozes da proveris (uradi ispod toga throw new NullPointerException, pa vidi oce li ostati u db).

E sad, problematicno je ovo: "selectedUser.getUserReports().add(report);"

Ovde prvo moras da mi odgovoris da li su ti userReporti lazy ili eager? Ako su eager, onda ti uspesno dodas. Ako su lazy (a trebalo bi tako da ti bude), a ovo ti radi, to onda znaci da ti je otvorena sesija u tom trenutku i da radis lazy loading. I to je upravo OpenSessionInView. Ako to nisi podesio, a radi ti onda ili ideas eager ili tu ima neke magije jos.

Add je nejasan. To ne bi trebalo da moze da ti se snimi u bazu. Taj deo koda bi ti radio ako si u transakciji, a ti nisi. Ponavljam, ako ti to radi, tu je neka magija ispod - tipa automatski ti se otvara tx, mada ne vidim kako bi to radilo.

Resenje je da createReport dobije jos jedan argument (selectedUser), a onda interno uradi selectedUser.getUserReports().add(report);

Citat:

Ovo mi bas nije jasno, ako mozes malo da mi pojasnis. Kolko znam, lazy loading pali samo ako imam entiti koji je managed u persistence contextu, ali te verovatno ne pratim...


Pa jeste, tako je, ali cesto postoji potreba da mozes da procitas jos nesto lazy, tipa pri rendanju strane. E sad, by the book imas 2 opcije. Jedna je da radis dinamicki HQL fetching, a druga da radis lazy loading. Meni je bilo smislenije da idem na prvu varijantu, jer mi se lazy loading kao koncept u smislu OSIVa nije dopadao jer tako gubim na slojevitosti (citaj: sta da rade drugi klijenti koji nemaju filter). Na kraju se ispotavilo da dinamicki HQL fecing predstavlja poprilican problem u smislu kolicine metoda koje se nalazo u DAO. Lazy loading te resava te bede. Ostao je problem sta da rade ostali klijenti pored web sloja.

E sad, malo ljudi (ja ne znam nikog) se bavi ovim problemom, jednostvno svi prihvate osiv zdravo za gotovo, a ovamo satro slojeviti su. Primera radi - sta da radi moj scheduler koji zove servis i takodje ocekuje lazy loading kao i web sloj. Ili recimo test case?

Resenje je u implementaciji anotacije i aspekta koji hvata metode sa ovom anotacijom i onda radi istu magiju kao i filter ;)

Citat:

Inace, stavio sam hibernate u aplikaciju i sad sve ono sto nije radilo kako treba, radi! :)


Reko' ti ja ;)
 
Odgovor na temu

branecns
Branislav Černić
Novi Sad

Član broj: 28805
Poruke: 40
*.dialup.neobee.net.



Profil

icon Re: Sinhronizacija objekta s tabelom (ejb3 / jpa1), kako?17.07.2008. u 00:15 - pre 192 meseci
Citat:
Pretpostavljam da koristis deklaritivne transakcije, ustvari to je valjda u EJB po defaultu. Tu moras da pazis ukoliko ti jedna servisna metoda poziva drugu koja je u istom servisu (EJB-u). Ne znam sta se kod EJB-a tu desava, ali kod Spring servisa, ako zelis da imas nested transakcije ili ces morati da padnes na programske transkacije ili da se dovijas, posto Spring otvara novu tx, samo ako se gadja spolja. Pomenuti problem se, navodno, moze resiti aspectj weavingom, ali meni to nikad nije uspelo.


Nikad cuo :). Za ejb znam da servisne metode mogu bez problema da pozivaju druge, iz istog ili nekog drugog session beana (sve dok se on npr anotacijom ubaci u kontekst), ukoliko je session bean statefull. Ako je stateless (a moj jeste), nisam siguran sta se desava...

Citat:
Kada vidim ovo "rR.createReport", za mene je to jedna tx.


Jeste, svaki metod u stateless sessionu je jedna tx.

Citat:
E sad, problematicno je ovo: "selectedUser.getUserReports().add(report);" ...
Add je nejasan. To ne bi trebalo da moze da ti se snimi u bazu. Taj deo koda bi ti radio ako si u transakciji, a ti nisi. Ponavljam, ako ti to radi, tu je neka magija ispod - tipa automatski ti se otvara tx, mada ne vidim kako bi to radilo.


userReport jeste lazy, tako sam namestio u entitiju. Ne vidim tu bas neku magiju. Prosto, selectedUser je referenca na detached entiti i to se zaista ne snima u bazu. Ejb kaze da, sve dok imam referencu na managed entiti, dotle linija kooda kao sto je selectedUser.getUserReports().add(report); vrsi upis i u bazu, a ukoliko je selectedUser referenca na detached entiti, onda ce se upis izvrsiti samo u java kolekciji (userReports) i to nece biti sinhronizovano sa bazom.

Sad, da li to znaci da bih konacno imao referencu na managed entiti, ukoliko bih selectedUser u mom koodu nafilovao pomocu persistence contexta kome je type namesten na extended? Recimo, u momentu kad dodjem na stranicu izvestaja, uradim inicijalizaciju selectedUsera preko extended contexta za promenu. A kad odlucim da se sa izvestaja vratim na roditeljsku stranicu korisnika, pozovem metod istog session beana koji ce nad selectedUser pomocu entiti menadzera odraditi jedan refresh (to bi valjda trebalo da detachuje entiti). Ako ovo sve radi kako bih ja zeleo, onda bih u svom medjuvremenu selectedUser bila referenca na managed entiti, i uopste ne bih morao da razmisljam o metodama koje izvrsavaju sql, vec bi to sve em uradio iza scene, a ja bih imao utisak da sve vreme koristim samo obican pojo i nista vise.

Jel ima smisla da se batrgam malo sa koodom i probam da uposlim extended context? Meni je sve ovo stvarno novo, ali mi lici da bi moglo da sljaka...
 
Odgovor na temu

[es] :: Java :: Sinhronizacija objekta s tabelom (ejb3 / jpa1), kako?

[ Pregleda: 3374 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.