use of org.apache.jackrabbit.rmi.client.LocalAdapterFactory in project sling by apache.
the class RepositoryAccessor method getRepository.
/**
* First try to access the Repository via JNDI (unless jndiContext is null),
* and if not successful try RMI.
*
* @param repositoryName JNDI name or RMI URL (must start with "rmi://") of
* the Repository
* @param jndiContext if null, JNDI is not tried
* @return a Repository, or null if not found
*/
public Repository getRepository(String repositoryName, Hashtable<String, Object> jndiContext) {
Repository result = null;
String tried = "";
if (jndiContext == null || jndiContext.size() == 0) {
log.info("jndiContext is null or empty, not trying JNDI");
} else {
log.debug("Trying to acquire Repository '" + repositoryName + "' via JNDI, context=" + jndiContext);
tried += "JNDI ";
final ClassLoader old = Thread.currentThread().getContextClassLoader();
try {
Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
InitialContext initialContext = new InitialContext(jndiContext);
Object repoObject = initialContext.lookup(repositoryName);
if (repoObject instanceof Repository) {
result = (Repository) repoObject;
log.info("Acquired Repository '" + repositoryName + "' via JNDI");
} else if (repoObject instanceof RemoteRepository) {
RemoteRepository remoteRepo = (RemoteRepository) repoObject;
LocalAdapterFactory laf = getLocalAdapterFactory();
result = laf.getRepository(remoteRepo);
log.info("Acquired RemoteRepository '" + repositoryName + "' via JNDI");
} else {
log.info("Repository '" + repositoryName + "' acquired via JDNI " + "does not implement the required interfaces, class=" + repoObject.getClass().getName());
}
} catch (Throwable t) {
log.info("Unable to acquire Repository '" + repositoryName + "' via JNDI, context=" + jndiContext, t);
} finally {
Thread.currentThread().setContextClassLoader(old);
}
}
if (result == null) {
if (repositoryName == null || !repositoryName.startsWith(RMI_PREFIX)) {
log.info("Repository name does not start with '" + RMI_PREFIX + "', not trying RMI");
} else {
try {
tried += "RMI ";
log.debug("Trying to acquire Repository '" + repositoryName + "' via RMI");
ClientRepositoryFactory crf = getClientRepositoryFactory();
result = crf.getRepository(repositoryName);
log.info("Acquired Repository '" + repositoryName + "' via RMI");
} catch (Throwable t) {
log.info("Unable to acquire Repository '" + repositoryName + "' via RMI", t);
}
}
}
if (result == null) {
log.info("Unable to acquire Repository '" + repositoryName + "', tried " + tried);
}
return result;
}
use of org.apache.jackrabbit.rmi.client.LocalAdapterFactory in project jackrabbit by apache.
the class RepositoryStubImpl method getRepository.
@Override
public synchronized Repository getRepository() throws RepositoryStubException {
if (repository == null) {
try {
Repository repo = super.getRepository();
principal = findKnownPrincipal(repo);
RemoteAdapterFactory raf = new ServerAdapterFactory();
remote = raf.getRemoteRepository(repo);
// Make sure that the remote reference survives serialization
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(buffer);
oos.writeObject(RemoteObject.toStub(remote));
oos.close();
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(buffer.toByteArray()));
LocalAdapterFactory laf = new ClientAdapterFactory();
repository = laf.getRepository((RemoteRepository) ois.readObject());
} catch (Exception e) {
throw new RepositoryStubException(e);
}
}
return repository;
}
Aggregations