You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2009/01/19 13:02:52 UTC

svn commit: r735671 - /jackrabbit/sandbox/jackrabbit-jdbc2jcr/src/main/java/org/apache/jackrabbit/jdbc/JCRDriver.java

Author: jukka
Date: Mon Jan 19 04:02:51 2009
New Revision: 735671

URL: http://svn.apache.org/viewvc?rev=735671&view=rev
Log:
jdbc2jcr: Support repository access through RMI (both http and rmiregistry) and JNDI.

Modified:
    jackrabbit/sandbox/jackrabbit-jdbc2jcr/src/main/java/org/apache/jackrabbit/jdbc/JCRDriver.java

Modified: jackrabbit/sandbox/jackrabbit-jdbc2jcr/src/main/java/org/apache/jackrabbit/jdbc/JCRDriver.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jackrabbit-jdbc2jcr/src/main/java/org/apache/jackrabbit/jdbc/JCRDriver.java?rev=735671&r1=735670&r2=735671&view=diff
==============================================================================
--- jackrabbit/sandbox/jackrabbit-jdbc2jcr/src/main/java/org/apache/jackrabbit/jdbc/JCRDriver.java (original)
+++ jackrabbit/sandbox/jackrabbit-jdbc2jcr/src/main/java/org/apache/jackrabbit/jdbc/JCRDriver.java Mon Jan 19 04:02:51 2009
@@ -18,6 +18,7 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.net.MalformedURLException;
 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.DriverPropertyInfo;
@@ -31,8 +32,11 @@
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.SimpleCredentials;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
 
 import org.apache.derby.jdbc.EmbeddedDriver;
+import org.apache.jackrabbit.rmi.repository.RMIRemoteRepository;
 import org.apache.jackrabbit.rmi.repository.URLRemoteRepository;
 
 public class JCRDriver extends EmbeddedDriver {
@@ -48,6 +52,26 @@
         }
     }
 
+    private Repository getRepository(String url) throws SQLException {
+        if (url.startsWith("http://") || url.startsWith("https://")) {
+            try {
+                return new URLRemoteRepository(url);
+            } catch (MalformedURLException e) {
+                throw new SQLExceptionWithCause("Invalid URL: " + url, e);
+            }
+        } else if (url.startsWith("rmi://")) {
+            return new RMIRemoteRepository(url.substring(4));
+        } else if (url.startsWith("jndi://")) {
+            try {
+                return (Repository) new InitialContext().lookup(url.substring(7));
+            } catch (NamingException e) {
+                throw new SQLExceptionWithCause("Name not found: " + url, e);
+            }
+        } else {
+            throw new SQLException("Unknown JCR connect URL: " + url);
+        }
+    }
+
     @Override
     public Connection connect(String url, Properties info) throws SQLException {
         if (!url.startsWith("jdbc:jcr:")) {
@@ -55,7 +79,7 @@
         }
         try {
             Repository repository =
-                new URLRemoteRepository(url.substring("jdbc:jcr:".length()));
+                getRepository(url.substring("jdbc:jcr:".length()));
             String workspace = info.getProperty("workspace");
             Credentials credentials = null;
             String username = info.getProperty("username");