Ejb értetlenség

Fórumok

Sziasztok!

Próbáltam kideríteni egy dolgot, de sehol nem találtam erre vonatkozóan semmit, ezért kérnélek meg benneteket segítsetek feltárni a szemem. Az állás a következő. Van egy Account entitásom, ami tartalmaz egy AccountData entitást. SOAP service keresztül ellenőrzöm, hogy van-e jogosultsága a usernek a belépéshez, viszont a SOAP service nem adja vissza csak az Accountot.
így működik csodálatosan:
Service
//...
@EJB
private AccountSoapServiceLocal ejbRef;

@WebMethod(operationName = "login")
public Account login(@WebParam(name = "email") String email, @WebParam(name = "password") String password) {
       Account account = ejbRef.login(email, password);
       account.setAccountData(null);
       return account;
}
//...
SessionBean
//...
public Account login(String email, String password) {
       Account account = new Account();

       try {
              Account checkAccount = this.accountHandler.getAccountByEmail(email);

              if (checkAccount.getAccountIsActive() && checkAccount.getPassword().equals(Digest.MD5(password))) {
                     account = checkAccount;
                     //...
              }
       } catch (Exception e) {}

       return account;
}
//...

Ellenben hogyha a account.setAccountData(null); parancsot a SessionBeanben adom ki akár a return account; előtt, tehát nem mergelem az EntityManagerrel, akkor vannak helyzetek, amikor elszáll, és mindeféle EJBException meg EJBTransactioRollbackException (vagy mi) exceptionoket dob null-os messagekkel. Lehet, hogy én tudok valamit rosszul, de nem úgy van, hogy amíg nem mergelem az entitást, addig szabadon módosíthatom.

Köszönöm a segítő válaszokat.

Hozzászólások

legyszi code tagek koze rakd mar, mert gusztustalan igy ranezni. meg valami pontosabb logot, mert igy nem erteni mit akarsz ;]

(btw, EM merge utan miert ne modosithatnad az entitast? meg hogy jon ide a merge? :-) persistre gondolsz? [minthogy uj entitast csinalsz...])

A kódot javítottam bocsesz. Logot vadásznom kell, de addig is leegyszerűsítve, ha az alábbi sorok szerepelnek a sessionbeanban :

Account account = this.accountHandler.getAccountByEmail(email);
account.setAccountData(null); //ahol az account data egy másik objektum, mivel hozzákapcsolt adatbázis tábláról van szó
return account;

van olyan eset, ami után a következő this.accountHandler.getAccountByEmail(email); már exception-t dob, és itt jön a merge, pedig a null-os AccountDatás Account-omat nem mergelem, tehát nem szabadna, hogy ez a 3 sor EJBException-t generáljaon. Kínomban már arra is gondoltam, hogy van valami szabály amit még nem olvastam sehol, hogy sessionbean-ben nem csinálhatok ezt vagy azt az entitásommal büntetlenül, hisz amikor a account.setAccountData(null); a webservice kódjában fut le a hiba megszűnik, tehát annak az egyetlen sornak az áthelyezésével megoldódik a helyzet.

Köszi a segítséget.