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