]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.server.jcr/src/org/argeo/jcr/ThreadBoundJcrSessionFactory.java
Improve and simplify OSGi Boot
[lgpl/argeo-commons.git] / org.argeo.server.jcr / src / org / argeo / jcr / ThreadBoundJcrSessionFactory.java
index 193f22c48c99780e72af4c70a7956cab8ed07370..281bd015c4d7f5fad90878695def317ee0173a98 100644 (file)
@@ -34,12 +34,11 @@ import javax.jcr.SimpleCredentials;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.argeo.ArgeoException;
 
 /** Proxy JCR sessions and attach them to calling threads. */
+@Deprecated
 public abstract class ThreadBoundJcrSessionFactory {
-       private final static Log log = LogFactory
-                       .getLog(ThreadBoundJcrSessionFactory.class);
+       private final static Log log = LogFactory.getLog(ThreadBoundJcrSessionFactory.class);
 
        private Repository repository;
        /** can be injected as list, only used if repository is null */
@@ -57,23 +56,20 @@ public abstract class ThreadBoundJcrSessionFactory {
        private boolean active = true;
 
        // monitoring
-       private final List<Thread> threads = Collections
-                       .synchronizedList(new ArrayList<Thread>());
-       private final Map<Long, Session> activeSessions = Collections
-                       .synchronizedMap(new HashMap<Long, Session>());
+       private final List<Thread> threads = Collections.synchronizedList(new ArrayList<Thread>());
+       private final Map<Long, Session> activeSessions = Collections.synchronizedMap(new HashMap<Long, Session>());
        private MonitoringThread monitoringThread;
 
        public ThreadBoundJcrSessionFactory() {
                Class<?>[] interfaces = { Session.class };
-               proxiedSession = (Session) Proxy.newProxyInstance(
-                               ThreadBoundJcrSessionFactory.class.getClassLoader(),
+               proxiedSession = (Session) Proxy.newProxyInstance(ThreadBoundJcrSessionFactory.class.getClassLoader(),
                                interfaces, new JcrSessionInvocationHandler());
        }
 
        /** Logs in to the repository using various strategies. */
        protected synchronized Session login() {
                if (!isActive())
-                       throw new ArgeoException("Thread bound session factory inactive");
+                       throw new ArgeoJcrException("Thread bound session factory inactive");
 
                // discard session previously attached to this thread
                Thread thread = Thread.currentThread();
@@ -95,24 +91,22 @@ public abstract class ThreadBoundJcrSessionFactory {
                                // invalid credentials, go to the next step
                        } catch (RepositoryException e1) {
                                // other kind of exception, fail
-                               throw new ArgeoException("Cannot log in to repository", e1);
+                               throw new ArgeoJcrException("Cannot log in to repository", e1);
                        }
 
                // log using default username / password (useful for testing purposes)
                if (newSession == null)
                        try {
-                               SimpleCredentials sc = new SimpleCredentials(defaultUsername,
-                                               defaultPassword.toCharArray());
+                               SimpleCredentials sc = new SimpleCredentials(defaultUsername, defaultPassword.toCharArray());
                                newSession = repository().login(sc, workspace);
                        } catch (RepositoryException e) {
-                               throw new ArgeoException("Cannot log in to repository", e);
+                               throw new ArgeoJcrException("Cannot log in to repository", e);
                        }
 
                session.set(newSession);
                // Log and monitor new session
                if (log.isTraceEnabled())
-                       log.trace("Logged in to JCR session " + newSession + "; userId="
-                                       + newSession.getUserID());
+                       log.trace("Logged in to JCR session " + newSession + "; userId=" + newSession.getUserID());
 
                // monitoring
                activeSessions.put(thread.getId(), newSession);
@@ -125,17 +119,17 @@ public abstract class ThreadBoundJcrSessionFactory {
        }
 
        public void init() throws Exception {
+               // log.error("SHOULD NOT BE USED ANYMORE");
                monitoringThread = new MonitoringThread();
                monitoringThread.start();
        }
 
-       public synchronized void dispose() throws Exception {
-               if (activeSessions.size() == 0)
-                       return;
+       public void dispose() throws Exception {
+               // if (activeSessions.size() == 0)
+               // return;
 
                if (log.isTraceEnabled())
-                       log.trace("Cleaning up " + activeSessions.size()
-                                       + " active JCR sessions...");
+                       log.trace("Cleaning up " + activeSessions.size() + " active JCR sessions...");
 
                deactivate();
                for (Session sess : activeSessions.values()) {
@@ -172,8 +166,7 @@ public abstract class ThreadBoundJcrSessionFactory {
                                        activeSessions.remove(thread.getId());
                                        session.logout();
                                        if (log.isTraceEnabled())
-                                               log.trace("Cleaned up JCR session (userID="
-                                                               + session.getUserID() + ") from dead thread "
+                                               log.trace("Cleaned up JCR session (userID=" + session.getUserID() + ") from dead thread "
                                                                + thread.getId());
                                }
                                it.remove();
@@ -212,7 +205,7 @@ public abstract class ThreadBoundJcrSessionFactory {
                        if (it.hasNext())
                                return it.next();
                }
-               throw new ArgeoException("No repository injected");
+               throw new ArgeoJcrException("No repository injected");
        }
 
        // /** Useful for declarative registration of OSGi services (blueprint) */
@@ -251,8 +244,7 @@ public abstract class ThreadBoundJcrSessionFactory {
 
        protected class JcrSessionInvocationHandler implements InvocationHandler {
 
-               public Object invoke(Object proxy, Method method, Object[] args)
-                               throws Throwable, RepositoryException {
+               public Object invoke(Object proxy, Method method, Object[] args) throws Throwable, RepositoryException {
                        Session threadSession = session.get();
                        if (threadSession == null) {
                                if ("logout".equals(method.getName()))// no need to login
@@ -278,8 +270,7 @@ public abstract class ThreadBoundJcrSessionFactory {
                                Thread thread = Thread.currentThread();
                                removeSession(thread);
                                if (log.isTraceEnabled())
-                                       log.trace("Logged out JCR session (userId="
-                                                       + threadSession.getUserID() + ") on thread "
+                                       log.trace("Logged out JCR session (userId=" + threadSession.getUserID() + ") on thread "
                                                        + thread.getId());
                        }
                        return ret;