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/11/14 13:25:57 UTC
svn commit: r1409181 -
/jackrabbit/trunk/jackrabbit-jcr-rmi/src/main/java/org/apache/jackrabbit/rmi/repository/RmiRepositoryFactory.java
Author: ckoell
Date: Wed Nov 14 12:25:56 2012
New Revision: 1409181
URL: http://svn.apache.org/viewvc?rev=1409181&view=rev
Log:
JCR-3454 The RmiRepositoryFactory should handle auto recconnect
Modified:
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/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=1409181&r1=1409180&r2=1409181&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 Wed Nov 14 12:25:56 2012
@@ -36,6 +36,7 @@ import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.apache.jackrabbit.rmi.client.ClientAdapterFactory;
+import org.apache.jackrabbit.rmi.client.SafeClientRepository;
import org.apache.jackrabbit.rmi.remote.RemoteRepository;
public class RmiRepositoryFactory implements RepositoryFactory {
@@ -73,75 +74,88 @@ public class RmiRepositoryFactory implem
}
}
- private Repository getUrlRepository(URL url) throws RepositoryException {
- try {
- InputStream stream = url.openStream();
- try {
- Object remote = new ObjectInputStream(stream).readObject();
- if (remote instanceof RemoteRepository) {
- return getRepository((RemoteRepository) remote);
- } else {
- throw new RepositoryException(
- "The resource at URL " + url
- + " is not a remote repository stub: "
- + remote);
- }
- } finally {
- stream.close();
- }
- } catch (ClassNotFoundException e) {
- throw new RepositoryException(
- "The resource at URL " + url
- + " requires a class that is not available", e);
- } catch (IOException e) {
- throw new RepositoryException(
- "Failed to read the resource at URL " + url, e);
- }
+ private Repository getUrlRepository(final URL url) throws RepositoryException {
+ return new SafeClientRepository(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 {
+ 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(String name, Hashtable environment)
+ private Repository getJndiRepository(final String name, final Hashtable environment)
throws RepositoryException {
- try {
- Object value = new InitialContext(environment).lookup(name);
- if (value instanceof RemoteRepository) {
- return getRepository((RemoteRepository) value);
- } else {
- throw new RepositoryException(
- "The JNDI resource " + name
- + " is not a remote repository stub: " + value);
- }
- } catch (NamingException e) {
- throw new RepositoryException(
- "Failed to look up the JNDI resource " + name, e);
- }
+ return new SafeClientRepository(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);
+ }
+ } catch (NamingException e) {
+ throw new RemoteException(
+ "Failed to look up the JNDI resource " + name, e);
+ }
+ }
+ };
}
- private Repository getRmiRepository(String name)
+ private Repository getRmiRepository(final String name)
throws RepositoryException {
- try {
- Object value = Naming.lookup(name);
- if (value instanceof RemoteRepository) {
- return getRepository((RemoteRepository) value);
- } else {
- throw new RepositoryException(
- "The RMI resource " + name
- + " is not a remote repository stub: " + value);
- }
- } catch (NotBoundException e) {
- throw new RepositoryException(
- "RMI resource " + name + " not found", e);
- } catch (MalformedURLException e) {
- throw new RepositoryException(
- "Invalid RMI name: " + name, e);
- } catch (RemoteException e) {
- throw new RepositoryException(
- "Failed to look up the RMI resource " + name, e);
- }
+ return new SafeClientRepository(new ClientAdapterFactory()) {
+
+ @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);
+ }
+ }
+ };
}
-
- private Repository getRepository(RemoteRepository remote) {
- return new ClientAdapterFactory().getRepository(remote);
- }
-
}