Domanda
Come si usa RMI per connettersi all'archivio CRX da CQ 5.6.x da un'applicazione esterna?
Risposta, risoluzione
1. Per impostazione predefinita, il listener della connessione RMI non è abilitato; per abilitarlo deve essere configurato.
Accedi a una scheda di configurazione nella console OSGI: http://host:port/system/console/configMgr. Trova "Apache Sling JCR Repository RMI Registrar". La porta RMI predefinita è 1099. È necessario salvare nuovamente o modificare il valore della porta per abilitare il listener RMI.
2. Il seguente risultato in un file error.log indica che RMI è pronto:
*INFO* [CM Event Dispatcher (Fire ConfigurationEvent: pid=org.apache.sling.jcr.jackrabbit.server.RmiRegistrationSupport)] org.apache.sling.jcr.registration Using RMI Registry port 1199
*INFO* [CM Event Dispatcher (Fire ConfigurationEvent: pid=org.apache.sling.jcr.jackrabbit.server.RmiRegistrationSupport)] org.apache.sling.jcr.registration Using private RMI Registry at 1199
*INFO* [CM Event Dispatcher (Fire ConfigurationEvent: pid=org.apache.sling.jcr.jackrabbit.server.RmiRegistrationSupport)] org.apache.sling.jcr.registration Repository bound to //server_name:1199/virtual-crx
3. Scrivi una classe Java che si connette a CRX tramite RMI. Di seguito è riportato un esempio molto semplice che mostra come accedere al CRX e ottenere una sessione Crx:
importa org.apache.jackrabbit.jackrabbit.rmi.clientRepositoryFactory;
importa javax.jcr.Repository;
importa javax.jcr.Session;
importa javax.jcr.SimpleCredentials;
classe pubblica CRXtoRMI {
public static void main (String[] args){
Sistema.out.println("RMI to CRX Test Connection:");
ClientRepositoryFactory factory = new ClientRepositoryFactory();
Archivio archivio;
Stringa crxApplicationName = "virtual-crx";
Stringa repoUrl = "//localhost:1199/"+crxApplicationName;
Stringa workspace = "crx.default";
Stringa username = "admin";
char [] password = "admin".toCharArray();
try {
repository = factory.getRepository(repoUrl);
Session s = repository.login(new SimpleCredentials(username,password), workspace);
Sistema.out.println("Workspace: " + s.getWorkspace().getName());
Sistema.out.println("userId: "+s.getUserID());
} catch (Exception e) {
e.printStackTrace();
}
}
}