public synchronized JRadiusSession newSession(JRadiusRequest request, Object key)
     throws RadiusException {
   JRadiusSession session =
       (JRadiusSession) getSessionFactory(request.getSender()).newSession(request);
   session.setJRadiusKey((String) key);
   put(session.getJRadiusKey(), session);
   put(session.getSessionKey(), session);
   lock(session);
   return session;
 }
  public synchronized JRadiusSession getSession(JRadiusRequest request, Serializable key)
      throws RadiusException {
    Element element = sessionCache.get(key);
    JRadiusSession session = null;

    if (element != null) session = (JRadiusSession) element.getValue();

    if (session == null && request != null) {
      SessionFactory sf = getSessionFactory(request.getSender());
      session = sf.getSession(request, key);
      if (session != null) {
        put(session.getJRadiusKey(), session);
        put(session.getSessionKey(), session);
      }
    }

    if (session == null) return null;

    lock(session);
    return session;
  }