You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ck...@apache.org on 2012/12/17 16:17:10 UTC

svn commit: r1422975 - in /jackrabbit/trunk/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi: client/SafeClientRepository.java repository/RmiRepositoryFactory.java

Author: ckoell
Date: Mon Dec 17 15:17:08 2012
New Revision: 1422975

URL: http://svn.apache.org/viewvc?rev=1422975&view=rev
Log:
JCR-3459 RmiRepositoryFactory regression, invalid stream header

Modified:
    jackrabbit/trunk/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/client/SafeClientRepository.java
    jackrabbit/trunk/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/repository/RmiRepositoryFactory.java

Modified: jackrabbit/trunk/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/client/SafeClientRepository.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/client/SafeClientRepository.java?rev=1422975&r1=1422974&r2=1422975&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/client/SafeClientRepository.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/client/SafeClientRepository.java Mon Dec 17 15:17:08 2012
@@ -53,7 +53,7 @@ public abstract class SafeClientReposito
     public SafeClientRepository(LocalAdapterFactory factory) {
         super(factory);
         try {
-            remote = getRemoteRepository();
+            remote = getRemoteRepository(true);
         } catch (RemoteException e) {
             remote = new BrokenRemoteRepository(e);
         }
@@ -68,13 +68,34 @@ public abstract class SafeClientReposito
     protected abstract RemoteRepository getRemoteRepository()
             throws RemoteException;
 
+    /**
+     * Method to obtain the remote remote repository.
+     * If initialize is true and a RepositoryException will be thrown no {@link BrokenRemoteRepository}
+     * will be created. 
+     *
+     * @return remote repository
+     * @throws RemoteException if the remote repository could not be accessed
+     */
+    protected RemoteRepository getRemoteRepository(boolean initialize)
+            throws RemoteException {
+        if (initialize) {
+            try {
+                return getRemoteRepository();
+            } catch (RemoteException e) {
+                throw new RemoteRuntimeException(e);
+            }
+        } else {
+            return getRemoteRepository();
+        }
+    }
+
     /** {@inheritDoc} */
     public synchronized String getDescriptor(String name) {
         try {
             return remote.getDescriptor(name);
         } catch (RemoteException e1) {
             try {
-                remote = getRemoteRepository();
+                remote = getRemoteRepository(false);
                 return remote.getDescriptor(name);
             } catch (RemoteException e2) {
                 remote = new BrokenRemoteRepository(e2);
@@ -89,7 +110,7 @@ public abstract class SafeClientReposito
             return remote.getDescriptorKeys();
         } catch (RemoteException e1) {
             try {
-                remote = getRemoteRepository();
+                remote = getRemoteRepository(false);
                 return remote.getDescriptorKeys();
             } catch (RemoteException e2) {
                 remote = new BrokenRemoteRepository(e2);
@@ -105,7 +126,7 @@ public abstract class SafeClientReposito
             return remote.login(credentials, workspace);
         } catch (RemoteException e1) {
             try {
-                remote = getRemoteRepository();
+                remote = getRemoteRepository(false);
                 return remote.login(credentials, workspace);
             } catch (RemoteException e2) {
                 remote = new BrokenRemoteRepository(e2);
@@ -142,7 +163,7 @@ public abstract class SafeClientReposito
             return remote.getDescriptorValue(key);
         } catch (RemoteException e1) {
             try {
-                remote = getRemoteRepository();
+                remote = getRemoteRepository(false);
                 return remote.getDescriptorValue(key);
             } catch (RemoteException e2) {
                 remote = new BrokenRemoteRepository(e2);
@@ -157,7 +178,7 @@ public abstract class SafeClientReposito
             return remote.getDescriptorValues(key);
         } catch (RemoteException e1) {
             try {
-                remote = getRemoteRepository();
+                remote = getRemoteRepository(false);
                 return remote.getDescriptorValues(key);
             } catch (RemoteException e2) {
                 remote = new BrokenRemoteRepository(e2);
@@ -172,7 +193,7 @@ public abstract class SafeClientReposito
             return remote.isSingleValueDescriptor(key);
         } catch (RemoteException e1) {
             try {
-                remote = getRemoteRepository();
+                remote = getRemoteRepository(false);
                 return remote.isSingleValueDescriptor(key);
             } catch (RemoteException e2) {
                 remote = new BrokenRemoteRepository(e2);
@@ -187,7 +208,7 @@ public abstract class SafeClientReposito
             return remote.isStandardDescriptor(key);
         } catch (RemoteException e1) {
             try {
-                remote = getRemoteRepository();
+                remote = getRemoteRepository(false);
                 return remote.isStandardDescriptor(key);
             } catch (RemoteException e2) {
                 remote = new BrokenRemoteRepository(e2);

Modified: jackrabbit/trunk/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/repository/RmiRepositoryFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/repository/RmiRepositoryFactory.java?rev=1422975&r1=1422974&r2=1422975&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/repository/RmiRepositoryFactory.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/repository/RmiRepositoryFactory.java Mon Dec 17 15:17:08 2012
@@ -77,113 +77,99 @@ public class RmiRepositoryFactory implem
 
     private Repository getUrlRepository(final URL url)
             throws RepositoryException {
-        return new SafeClientRepositoryUrl(url, new ClientAdapterFactory());
+        return new RmiSafeClientRepository(new ClientAdapterFactory()) {
+
+            @Override
+            protected RemoteRepository getRemoteRepository() throws RemoteException {
+                try {
+                    InputStream stream = url.openStream();
+                    try {
+                        Object remote = new ObjectInputStream(stream).readObject();
+                        if (remote instanceof RemoteRepository) {
+                            return (RemoteRepository) remote;
+                        } else {
+                            throw new RemoteException("The resource at URL " + url
+                                    + " is not a remote repository stub: " + remote);
+                        }
+                    } finally {
+                        if (stream != null) {
+                            stream.close();
+                        }
+                    }
+                } catch (ClassNotFoundException e) {
+                    throw new RemoteException("The resource at URL " + url
+                            + " requires a class that is not available", e);
+                } catch (IOException e) {
+                    throw new RemoteException("Failed to read the resource at URL "
+                            + url, e);
+                }
+            }
+        };
     }
 
     @SuppressWarnings("rawtypes")
     private Repository getJndiRepository(final String name,
             final Hashtable environment) throws RepositoryException {
-        return new SafeClientRepositoryJndi(name, environment,
-                new ClientAdapterFactory());
-    }
-
-    private Repository getRmiRepository(final String name)
-            throws RepositoryException {
-        return new SafeClientRepositoryName(name, new ClientAdapterFactory());
-    }
-
-    private static class SafeClientRepositoryUrl extends SafeClientRepository {
-
-        private final URL url;
+        return new RmiSafeClientRepository(new ClientAdapterFactory()) {
 
-        public SafeClientRepositoryUrl(URL url, LocalAdapterFactory factory) {
-            super(factory);
-            this.url = url;
-        }
-
-        @Override
-        protected RemoteRepository getRemoteRepository() throws RemoteException {
-            try {
-                InputStream stream = url.openStream();
+            @Override
+            protected RemoteRepository getRemoteRepository() throws RemoteException {
                 try {
-                    Object remote = new ObjectInputStream(stream).readObject();
-                    if (remote instanceof RemoteRepository) {
-                        return (RemoteRepository) remote;
+                    Object value = new InitialContext(environment).lookup(name);
+                    if (value instanceof RemoteRepository) {
+                        return (RemoteRepository) value;
                     } else {
-                        throw new RemoteException("The resource at URL " + url
-                                + " is not a remote repository stub: " + remote);
+                        throw new RemoteException("The JNDI resource " + name
+                                + " is not a remote repository stub: " + value);
                     }
-                } finally {
-                    stream.close();
+                } catch (NamingException e) {
+                    throw new RemoteException(
+                            "Failed to look up the JNDI resource " + name, e);
                 }
-            } catch (ClassNotFoundException e) {
-                throw new RemoteException("The resource at URL " + url
-                        + " requires a class that is not available", e);
-            } catch (IOException e) {
-                throw new RemoteException("Failed to read the resource at URL "
-                        + url, e);
             }
-        }
+        };
     }
 
-    @SuppressWarnings("rawtypes")
-    private static class SafeClientRepositoryJndi extends SafeClientRepository {
-
-        private final String name;
-        private final Hashtable environment;
-
-        public SafeClientRepositoryJndi(String name, Hashtable environment,
-                LocalAdapterFactory factory) {
-            super(factory);
-            this.name = name;
-            this.environment = environment;
-        }
+    private Repository getRmiRepository(final String name)
+            throws RepositoryException {
+        return new RmiSafeClientRepository(new ClientAdapterFactory()) {
 
-        @Override
-        protected RemoteRepository getRemoteRepository() throws RemoteException {
-            try {
-                Object value = new InitialContext(environment).lookup(name);
-                if (value instanceof RemoteRepository) {
-                    return (RemoteRepository) value;
-                } else {
-                    throw new RemoteException("The JNDI resource " + name
-                            + " is not a remote repository stub: " + value);
+            @Override
+            protected RemoteRepository getRemoteRepository() throws RemoteException {
+                try {
+                    Object value = Naming.lookup(name);
+                    if (value instanceof RemoteRepository) {
+                        return (RemoteRepository) value;
+                    } else {
+                        throw new RemoteException("The RMI resource " + name
+                                + " is not a remote repository stub: " + value);
+                    }
+                } catch (NotBoundException e) {
+                    throw new RemoteException(
+                            "RMI resource " + name + " not found", e);
+                } catch (MalformedURLException e) {
+                    throw new RemoteException("Invalid RMI name: " + name, e);
+                } catch (RemoteException e) {
+                    throw new RemoteException("Failed to look up the RMI resource "
+                            + name, e);
                 }
-            } catch (NamingException e) {
-                throw new RemoteException(
-                        "Failed to look up the JNDI resource " + name, e);
             }
-        }
+        };
     }
 
-    private static class SafeClientRepositoryName extends SafeClientRepository {
+    /**
+     * Basic SafeClientRepository for the different lookup types of a rmi repository
+     */
+    private static class RmiSafeClientRepository extends SafeClientRepository {
 
-        private final String name;
-
-        public SafeClientRepositoryName(String name, LocalAdapterFactory factory) {
+        public RmiSafeClientRepository(LocalAdapterFactory factory) {
             super(factory);
-            this.name = name;
         }
 
         @Override
         protected RemoteRepository getRemoteRepository() throws RemoteException {
-            try {
-                Object value = Naming.lookup(name);
-                if (value instanceof RemoteRepository) {
-                    return (RemoteRepository) value;
-                } else {
-                    throw new RemoteException("The RMI resource " + name
-                            + " is not a remote repository stub: " + value);
-                }
-            } catch (NotBoundException e) {
-                throw new RemoteException(
-                        "RMI resource " + name + " not found", e);
-            } catch (MalformedURLException e) {
-                throw new RemoteException("Invalid RMI name: " + name, e);
-            } catch (RemoteException e) {
-                throw new RemoteException("Failed to look up the RMI resource "
-                        + name, e);
-            }
+            return null;
         }
+
     }
 }