Pregunta
¿Cómo uso RMI para conectarme al repositorio CRX desde CQ5.6.x desde una aplicación externa?
Respuesta y resolución
1. Por defecto, el oyente de conexión RMI no está habilitado; para habilitarlo, debe configurarlo.
Acceda a una pestaña de configuración en la consola OSGI: http://host:port/system/console/configMgr. Busque Apache Sling JCR Repository RMI Registrar. El puerto RMI predeterminado es 1099. Necesita volver a guardar o cambiar el valor del puerto para habilitar el listener RMI.
2. La siguiente salida en un archivo error.log que indica que RMI está listo:
*INFO* [CM Event Dispatcher (Fire ConfigurationEvent: pid=org.apache.sling.jcr.jackrabbit.server.RmiRegistrationSupport)] org.apache.sling.jcr.registration Uso del puerto de registro RMI 1199
*INFO* [CM Event Dispatcher (Fire ConfigurationEvent: pid=org.apache.sling.jcr.jackrabbit.server.RmiRegistrationSupport)] org.apache.sling.jcr.registration Usar registro privado de RMI en 1199
*INFO* [CM Event Dispatcher (Fire ConfigurationEvent: pid=org.apache.sling.jcr.jackrabbit.server.RmiRegistrationSupport)] org.apache.sling.jcr.registration Repositorio enlazado a //server_name:1199/virtual-crx
3. Escribe una clase java que se conecte a CRX a través de RMI. A continuación, se muestra un ejemplo muy sencillo que muestra cómo iniciar sesión en el CRX y obtener una sesión de Crx:
importar org.apache.jackrabbit.rmi.client.ClientRepositoryFactory;
importar javax.jcr.Repository;
importar javax.jcr.Session;
importar javax.jcr.jcr.SimpleCredentials;
clase pública CRXtoRMI {
public static void main (String[] args){
System.out.println("RMI to CRX Test Connection:");
ClientRepositoryFactory factory = new ClientRepositoryFactory();
Repository repository;
String crxApplicationName = "virtual-crx";
String repoUrl = "//localhost:1199/"+crxApplicationName;
Espacio de trabajo de cadenas = "crx.default";
Nombre de usuario de la cadena = "admin";
char [] password = "admin".toCharArray();
try {
repositorio = factory.getRepository(repoUrl);
Sesión s = repository.login(new SimpleCredentials(username,password), workspace);
System.out.println("Workspace: " + s.getWorkspace().getName());
System.out.println("userId: "+s.getUserID());
} catch (Exception e) {
e.printStackTrace();
}
}
}