Hallo Community,
ich bin ein Anfänger in J2EE und probiere gerade mich mit SessionBeans auseinander zusetzen. Ich habe dabei probiert ein simples Beispiel zu programmieren.
In der Methode "login" setze ich in der 2.Stateful SessionBean eine Variable = AccountTO. Was ich nicht verstehen kann wenn ich dann die Abfrage mache "sessionLocal.isAvailable()" in der das Object AccountTO aufgerufen wird, erhalte ich den Wert NULL! Entweder ich verstehe die Technology noch nicht oder hier ist irgendwo der wurm drin?!
Die Stateful SessionBean speichert einfach nicht mein AccountTO object ab?!
Wäre nett wenn mir jemand helfen könnte
Mfg mavinatic
ich bin ein Anfänger in J2EE und probiere gerade mich mit SessionBeans auseinander zusetzen. Ich habe dabei probiert ein simples Beispiel zu programmieren.
Code:
@Stateful public class ServerService implements IServer { private ServiceLocator sLocator = ServiceLocator.getInstance(); @EJB(name="SessionService") ISessionLocal sessionLocal; @PersistenceContext(unitName="openflowDS") private EntityManager em; /** * Default constructor. */ public ServerService() { // TODO Auto-generated constructor stub } @Override public ISession login(String user, String pass) { // TODO Auto-generated method stub AccountTO acc = getAccount(user); if(user.equals(acc.getUserid()) && pass.equals(acc.getPassword())) { ISession sessionRemote = sLocator.getSessionRemote(); sessionLocal.setAccount(acc); if(sessionLocal.isSessionAvailable()) { return sessionRemote; } else { sessionLocal.setAccount(acc); sessionLocal.createSession(); return sessionRemote; } } return null; } @Override public void addAccount(String user, String pass) { // TODO Auto-generated method stub AccountTO acc = new AccountTO(); acc.setUserid(user); acc.setPassword(pass); em.persist(acc); } @Override public List<AccountTO> listUsers() { // TODO Auto-generated method stub Query q = em.createQuery("SELECT x FROM AccountTO x"); return q.getResultList(); } @Override public AccountTO getAccount(String userid) { // TODO Auto-generated method stub Query q = em.createQuery("SELECT x FROM AccountTO x WHERE x.userid='"+userid+"'"); return (AccountTO) q.getResultList().get(0); }
Code:
package com.openflow.session; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import javax.ejb.Stateful; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.Query; import com.openflow.dto.AccountTO; import com.openflow.dto.SessionTO; import com.openflow.tools.Common; import com.openflow.tools.IDProducter; /** * Session Bean implementation class SessionService */ @Stateful public class SessionService implements ISession, ISessionLocal { @PersistenceContext(unitName="openflowDS") private EntityManager em; private SimpleDateFormat sdf = new SimpleDateFormat(Common.OPENFLOW_FORMAT); private IDProducter id = new IDProducter(); private AccountTO account = null; public SessionService() { // TODO Auto-generated constructor stub } @Override public void createSession() { // TODO Auto-generated method stub- try { if(account!=null) { SessionTO sesEntity = getSessionByEntity(); if(sesEntity==null) { this.createSessionTO(); } else { if(!isSessionAvailable()) { this.createSessionTO(); } } } } catch(Exception e) { e.printStackTrace(); } } private void createSessionTO() { SessionTO session = new SessionTO(); session.setUserId(account.getUserid()); session.setSessionId(id.getID()); Date date = new Date(); session.setSessionStart(sdf.format(date)); long now = date.getTime(); Date sessionEnd = new Date(); sessionEnd.setTime(now+Common.OPENFLOW_SESSION_DURATION); session.setSessionEnd(sdf.format(sessionEnd)); em.persist(session); } @Override public boolean isSessionAvailable() { // TODO Auto-generated method stub try { SessionTO sessionEntity = getSessionByEntity(); if(sessionEntity!=null) { Date now = new Date(); Date start = sdf.parse(sessionEntity.getSessionStart()); Date end = sdf.parse(sessionEntity.getSessionEnd()); if(now.after(start) && now.before(end)) { return true; } else { if(sessionEntity!=null) { em.remove(sessionEntity); } return false; } } } catch(Exception e) { e.printStackTrace(); } return false; } @Override public void setAccount(AccountTO acc) { // TODO Auto-generated method stub this.account=acc; } @Override public SessionTO getSessionByEntity() { // TODO Auto-generated method stub if(account!=null) { Query q = em.createQuery("SELECT x FROM SessionTO x WHERE x.userId='"+account.getUserid()+"'"); if(q.getResultList().size()==0) { return null; } return (SessionTO) q.getResultList().get(0); } else { throw new RuntimeException("No account defined!"); } } @Override public AccountTO getAccount() { // TODO Auto-generated method stub return account; } }
Wäre nett wenn mir jemand helfen könnte
Mfg mavinatic
Comment