storagehub/src/main/java/org/gcube/data/access/storagehub/RepositoryInitializerImpl.java

73 lines
2.1 KiB
Java

package org.gcube.data.access.storagehub;
import jakarta.inject.Singleton;
import javax.jcr.Repository;
import javax.jcr.SimpleCredentials;
import javax.naming.Context;
import javax.naming.InitialContext;
import org.apache.jackrabbit.api.JackrabbitRepository;
import org.apache.jackrabbit.api.JackrabbitSession;
import org.gcube.data.access.storagehub.services.RepositoryInitializer;
import org.gcube.data.access.storagehub.services.admin.InitScript;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Singleton
public class RepositoryInitializerImpl implements RepositoryInitializer{
private static Logger log = LoggerFactory.getLogger(RepositoryInitializerImpl.class);
private static RepositoryInitializer instance = new RepositoryInitializerImpl();
public static RepositoryInitializer get(){
return instance;
}
private Repository repository;
private boolean jackrabbitInitialized = false;
@Override
public Repository getRepository(){
return repository;
}
protected RepositoryInitializerImpl(){
try {
InitialContext context = new InitialContext();
Context environment = (Context) context.lookup("java:comp/env");
repository = (Repository) environment.lookup("jcr/repository");
}catch (Throwable e) {
log.error("error initializing repository", e);
throw new RuntimeException("error initializing repository",e);
}
}
public void shutdown() {
((JackrabbitRepository)repository).shutdown();
}
@Override
public synchronized void initContainerAtFirstStart(SimpleCredentials credentials) {
try {
log.info("credential are {} {}",credentials.getUserID(), new String(credentials.getPassword()));
JackrabbitSession ses = (JackrabbitSession) repository.login(credentials);
try {
boolean notAlreadyDone = !jackrabbitInitialized && !ses.getRootNode().hasNode("Home");
if (notAlreadyDone)
new InitScript().init(ses);
else log.info("jackrabbit is already initialized");
}finally {
ses.logout();
}
} catch (Exception e) {
log.warn("error initialising Jackrabbit",e);
}
jackrabbitInitialized = true;
}
}