73 lines
2.1 KiB
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;
|
|
}
|
|
|
|
|
|
}
|