Thanks Eelco,
will try that out.

/peter

On 2/6/07, Eelco Hillenius <[EMAIL PROTECTED]> wrote:
> There is no standard facility for this. One way is to do this
> independent of Wicket by configuring a session listener:
> http://java.sun.com/products/servlet/2.3/javadoc/javax/servlet/http/HttpSessionListener.html
>
> A Wicket specific way for this would be to use a custom session store.
> This is an example:
>
> /**
>  * Session store that keeps attributes in memory instead of putting them in 
> the
>  * [EMAIL PROTECTED] HttpSession}.
>  *
>  * @author hillenius
>  */
> public final class Ts4SessionStore extends AbstractHttpSessionStore
> implements Serializable {
>
>         private static final class ANONYMOUS extends User {
>                 public ANONYMOUS() {
>                         setUsername("[ANONYMOUS]");
>                 }
>         }
>
>         /** Log. */
>         private static final Log log = 
> LogFactory.getLog(Ts4SessionStore.class);
>
>         /** Hibernate session factory. */
>         @SpringBean
>         private SessionFactory sessionFactory;
>
>         /**
>          * Map of session ids to store objects.
>          */
>         private final HashMap<String, Map<String, Serializable>>
> sessionIdToStore = new HashMap<String, Map<String, Serializable>>();
>
>         /**
>          * Construct.
>          */
>         public Ts4SessionStore() {
>
>         }
>
>         /**
>          * @see wicket.session.ISessionStore#createPageMap(java.lang.String,
>          *      wicket.Session)
>          */
>         public IPageMap createPageMap(String name, Session session) {
>                 return new AccessStackPageMap(name, session);
>         }
>
>         /**
>          * @see ISessionStore#getAttribute(Request, String)
>          */
>         public Object getAttribute(Request request, String name) {
>                 Map<String, Serializable> store = getStore(request);
>                 return store.get(name);
>         }
>
>         /**
>          * @see ISessionStore#getAttributeNames(Request)
>          */
>         public List<String> getAttributeNames(Request request) {
>                 Map<String, Serializable> store = getStore(request);
>                 return new ArrayList<String>(store.keySet());
>         }
>
>         /**
>          * @return The number of sessions.
>          */
>         public int getNumberOfSessions() {
>                 return sessionIdToStore.size();
>         }
>
>         /**
>          * Gets the internal store (for integration purposes).
>          *
>          * @return The internal store
>          */
>         public Map<String, Map<String, Serializable>> getSessionIdToStore() {
>                 return sessionIdToStore;
>         }
>
>         /**
>          * @see 
> wicket.protocol.http.AbstractHttpSessionStore#lookup(wicket.Request)
>          */
>         @Override
>         public Session lookup(Request request) {
>                 Map<String, Serializable> store = getStoreUnsafe(request);
>                 if (store != null) {
>                         return (Session) 
> store.get(Session.SESSION_ATTRIBUTE_NAME);
>                 }
>                 return null;
>         }
>
>         /**
>          * @see ISessionStore#removeAttribute(Request, String)
>          */
>         public void removeAttribute(Request request, String name) {
>                 Map<String, Serializable> store = getStore(request);
>                 store.remove(name);
>         }
>
>         @SuppressWarnings("unchecked")
>         public Iterator<Ts4Session> sessions() {
>
>                 final Iterator<Map<String, Serializable>> outer = 
> ((HashMap<String,
> Map<String, Serializable>>) sessionIdToStore
>                                 .clone()).values().iterator();
>                 return new Iterator<Ts4Session>() {
>
>                         public boolean hasNext() {
>                                 return outer.hasNext();
>                         }
>
>                         public Ts4Session next() {
>                                 Map<String, Serializable> store = 
> outer.next();
>                                 return (Ts4Session) 
> store.get(Session.SESSION_ATTRIBUTE_NAME);
>                         }
>
>                         public void remove() {
>                                 outer.remove();
>                         }
>                 };
>         }
>
>         /**
>          * @see ISessionStore#setAttribute(Request, String, Object)
>          */
>         public void setAttribute(Request request, String name, Object value) {
>                 Map<String, Serializable> store = getStore(request);
>                 store.put(name, (Serializable) value);
>         }
>
>         /**
>          * Gets all users for the current sessions; ANONYMOUS for every user 
> that is
>          * not logged on. Use with JMX.
>          *
>          * @return List of current users
>          */
>         public String users() {
>
>                 if (sessionFactory == null) {
>                         SpringInjector.injectDependencies(this);
>                 }
>
>                 StringBuilder b = new StringBuilder();
>
>                 if (!sessionIdToStore.isEmpty()) {
>                         org.hibernate.Session hibernateSession = null;
>                         try {
>                                 hibernateSession = 
> sessionFactory.openSession();
>                                 for (Iterator<String> i = 
> sessionIdToStore.keySet().iterator();
> i.hasNext();) {
>                                         String sid = i.next();
>                                         Map<String, Serializable> store = 
> sessionIdToStore.get(sid);
>                                         Ts4Session session = (Ts4Session)
> store.get(Session.SESSION_ATTRIBUTE_NAME);
>                                         Long userId = session.getUserId();
>                                         if (userId != null) {
>                                                 User user = (User) 
> hibernateSession.load(User.class, userId);
>                                                 b.append(user.getUsername());
>                                                 b.append(": ");
>                                                 b.append(user.getFirstName());
>                                                 b.append(" ");
>                                                 b.append(user.getLastName());
>                                         } else {
>                                                 b.append("ANONYMOUS");
>                                         }
>                                         b.append(", session ");
>                                         b.append(sid);
>                                         if (i.hasNext()) {
>                                                 b.append("\n");
>                                         }
>                                 }
>                         } catch (Exception e) {
>                                 e.printStackTrace();
>                                 b.delete(0, b.length());
>                                 b.append("unable to make a list of currently 
> logged in users:");
>                                 for (StackTraceElement el : 
> e.getStackTrace()) {
>                                         b.append("\n\t");
>                                         b.append(el.toString());
>                                 }
>                         } finally {
>                                 if (hibernateSession != null) {
>                                         hibernateSession.close();
>                                 }
>                         }
>                 }
>
>                 return b.toString();
>         }
>
>         /**
>          * Gets the store for the session of the provided request, returning 
> null
>          * and log a warning when the store was not found.
>          *
>          * @param request
>          *
>          * @return The store
>          */
>         private final Map<String, Serializable> getStore(Request request) {
>                 String sessionId = getSessionId(request, true);
>                 Map<String, Serializable> store = 
> sessionIdToStore.get(sessionId);
>                 if (store == null) {
>                         log.warn("no store found for session with id " + 
> sessionId + "
> (request=" + request + ")");
>                         // return a dummy
>                         return new HashMap<String, Serializable>();
>                 }
>                 return store;
>         }
>
>         /**
>          * Gets the store for the session of the provided request, returning 
> null
>          * when the store was not found.
>          *
>          * @param request
>          *
>          * @return The store
>          */
>         private final Map<String, Serializable> getStoreUnsafe(Request 
> request) {
>                 String sessionId = getSessionId(request, true);
>                 return sessionIdToStore.get(sessionId);
>         }
>
>         /**
>          * @see AbstractHttpSessionStore#onBind(Request, Session)
>          */
>         @Override
>         protected void onBind(Request request, Session newSession) {
>                 String sessionId = getSessionId(request, true);
>                 sessionIdToStore.put(sessionId, new HashMap<String, 
> Serializable>());
>                 log.info("new session " + sessionId + " bound to session 
> store");
>         }
>
>         /**
>          * @see AbstractHttpSessionStore#onUnbind(String)
>          */
>         @Override
>         protected void onUnbind(String sessionId) {
>                 Map<String, Serializable> store = 
> sessionIdToStore.remove(sessionId);
>                 log.info("session " + sessionId + " unbound from session 
> store;
> cleaning up " + store.size() + " entries");
>         }
> }
>
>
> Hope that helps,
>
> Eelco
>
> On 2/6/07, Peter Neubauer <[EMAIL PROTECTED]> wrote:
> > Hi there,
> > how do I get the logged in users as a list or something from the API
> > in Wicket 2.0 SNAPSHOT?
> >
> >
> > Thanks for any hints
> >
> > /peter
> >
> > -------------------------------------------------------------------------
> > Using Tomcat but need to do more? Need to support web services, security?
> > Get stuff done quickly with pre-integrated technology to make your job 
> > easier.
> > Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
> > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
> > _______________________________________________
> > Wicket-user mailing list
> > Wicket-user@lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/wicket-user
> >
>
> -------------------------------------------------------------------------
> Using Tomcat but need to do more? Need to support web services, security?
> Get stuff done quickly with pre-integrated technology to make your job easier.
> Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
> _______________________________________________
> Wicket-user mailing list
> Wicket-user@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/wicket-user
>

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier.
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user

Reply via email to