[exo-jcr-commits] exo-jcr SVN: r2787 - in jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext: resource/jcr and 1 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Wed Jul 14 09:25:49 EDT 2010


Author: aparfonov
Date: 2010-07-14 09:25:48 -0400 (Wed, 14 Jul 2010)
New Revision: 2787

Modified:
   jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/resource/JcrURLConnection.java
   jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/resource/jcr/Handler.java
   jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/script/groovy/GroovyScript2RestLoader.java
Log:
EXOJCR-482 : Fix problem with loading dependency for Groovy RESTful services loaded on repository startup

Modified: jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/resource/JcrURLConnection.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/resource/JcrURLConnection.java	2010-07-14 13:08:08 UTC (rev 2786)
+++ jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/resource/JcrURLConnection.java	2010-07-14 13:25:48 UTC (rev 2787)
@@ -18,6 +18,8 @@
  */
 package org.exoplatform.services.jcr.ext.resource;
 
+import org.exoplatform.services.jcr.ext.common.SessionProvider;
+
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.MalformedURLException;
@@ -33,7 +35,7 @@
 public class JcrURLConnection extends URLConnection
 {
 
-   private Session session;
+   private SessionProvider sessionProvider;
 
    private NodeRepresentationService nodeRepresentationService;
 
@@ -41,12 +43,14 @@
 
    private NodeRepresentation nodeRepresentation;
 
-   public JcrURLConnection(UnifiedNodeReference nodeReference, Session session,
+   private Session session;
+
+   public JcrURLConnection(UnifiedNodeReference nodeReference, SessionProvider sessionProvider,
       NodeRepresentationService nodeRepresentationService) throws MalformedURLException
    {
 
       super(nodeReference.getURL());
-      this.session = session;
+      this.sessionProvider = sessionProvider;
       this.nodeReference = nodeReference;
       this.nodeRepresentationService = nodeRepresentationService;
 
@@ -68,16 +72,24 @@
 
       try
       {
+         session =
+            sessionProvider.getSession(sessionProvider.getCurrentWorkspace(), sessionProvider.getCurrentRepository());
+
          Node node = null;
          if (nodeReference.isPath())
-            node = session.getRootNode().getNode(nodeReference.getPath().substring(1));
+         {
+            node = (Node)session.getItem(nodeReference.getPath());
+         }
          else if (nodeReference.isIdentitifier())
+         {
             node = session.getNodeByUUID(nodeReference.getIdentitifier().getString());
+         }
          else
+         {
             throw new IllegalArgumentException("Absolute path or Identifier was not found!");
+         }
 
          nodeRepresentation = nodeRepresentationService.getNodeRepresentation(node, "text/xml");
-
          connected = true;
       }
       catch (Exception e)
@@ -87,6 +99,17 @@
       }
    }
 
+   /**
+    * Close connection to JCR.
+    */
+   public void disconnect()
+   {
+      if (!connected)
+         return;
+      session.logout();
+      connected = false;
+   }
+
    /*
     * (non-Javadoc)
     * @see java.net.URLConnection#getInputStream()
@@ -174,9 +197,6 @@
       return -1;
    }
 
-
-
-
    /*
     * (non-Javadoc)
     * @see java.net.URLConnection#setDoOutput(boolean)
@@ -287,4 +307,21 @@
       throw new UnsupportedOperationException("protocol doesn't support request properties!");
    }
 
+   @Override
+   protected void finalize() throws Throwable
+   {
+      try
+      {
+         sessionProvider.close();
+      }
+      catch (Throwable t)
+      {
+         ;
+      }
+      finally
+      {
+         super.finalize();
+      }
+   }
+
 }

Modified: jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/resource/jcr/Handler.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/resource/jcr/Handler.java	2010-07-14 13:08:08 UTC (rev 2786)
+++ jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/resource/jcr/Handler.java	2010-07-14 13:25:48 UTC (rev 2787)
@@ -33,8 +33,6 @@
 import java.net.URLConnection;
 import java.net.URLStreamHandler;
 
-import javax.jcr.Session;
-
 /**
  * URLStreamHandler for protocol <tt>jcr://</tt>.
  *
@@ -111,19 +109,26 @@
             sessionProvider =
                (SessionProvider)ConversationState.getCurrent().getAttribute(SessionProvider.SESSION_PROVIDER);
 
-         ManageableRepository repository;
+         if (sessionProvider == null)
+            sessionProvider = SessionProvider.createSystemProvider();
+
          String repositoryName = nodeReference.getRepository();
-         if (repositoryName == null || repositoryName.length() == 0)
-            repository = sessionProvider.getCurrentRepository();
-         else
-            repository = repositoryService.getRepository(repositoryName);
+         if (repositoryName != null && repositoryName.length() > 0)
+         {
+            ManageableRepository repository = repositoryService.getRepository(repositoryName);
+            sessionProvider.setCurrentRepository(repository);
+         }
 
          String workspaceName = nodeReference.getWorkspace();
-         if (workspaceName == null || workspaceName.length() == 0)
-            workspaceName = sessionProvider.getCurrentWorkspace();
+         if (workspaceName != null && workspaceName.length() > 0)
+         {
+            sessionProvider.setCurrentWorkspace(workspaceName);
+         }
 
-         Session ses = sessionProvider.getSession(workspaceName, repository);
-         JcrURLConnection conn = new JcrURLConnection(nodeReference, ses, nodeRepresentationService);
+//         JcrURLConnection conn =
+//            new JcrURLConnection(repositoryService.getRepository(repositoryName), nodeReference,
+//               nodeRepresentationService);
+          JcrURLConnection conn = new JcrURLConnection(nodeReference, sessionProvider, nodeRepresentationService);
          return conn;
 
       }

Modified: jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/script/groovy/GroovyScript2RestLoader.java
===================================================================
--- jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/script/groovy/GroovyScript2RestLoader.java	2010-07-14 13:08:08 UTC (rev 2786)
+++ jcr/trunk/exo.jcr.component.ext/src/main/java/org/exoplatform/services/jcr/ext/script/groovy/GroovyScript2RestLoader.java	2010-07-14 13:25:48 UTC (rev 2787)
@@ -32,6 +32,7 @@
 import org.exoplatform.services.jcr.ext.common.SessionProvider;
 import org.exoplatform.services.jcr.ext.registry.RegistryEntry;
 import org.exoplatform.services.jcr.ext.registry.RegistryService;
+import org.exoplatform.services.jcr.ext.resource.JcrURLConnection;
 import org.exoplatform.services.log.ExoLogger;
 import org.exoplatform.services.log.Log;
 import org.exoplatform.services.rest.ext.groovy.DefaultGroovyResourceLoader;
@@ -52,6 +53,7 @@
 import java.net.MalformedURLException;
 import java.net.URI;
 import java.net.URL;
+import java.net.URLConnection;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Collections;
@@ -1507,13 +1509,14 @@
                      resource = new URL(root, filename);
                   }
                }
+               URLConnection connection = null;
                try
                {
                   if (LOG.isDebugEnabled())
                      LOG.debug("Try to load resource from URL : " + resource);
 
-                  InputStream script = resource.openStream();
-                  script.close();
+                  connection = resource.openConnection();
+                  connection.getInputStream().close();
 
                   break;
                }
@@ -1524,6 +1527,13 @@
 
                   resource = null;
                }
+               finally
+               {
+                  if (connection != null && resource != null && "jcr".equals(resource.getProtocol()))
+                  {
+                     ((JcrURLConnection)connection).disconnect();
+                  }
+               }
             }
             if (resource != null)
             {



More information about the exo-jcr-commits mailing list