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)
{
Show replies by date