X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=server%2Fruntime%2Forg.argeo.server.jackrabbit%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fserver%2Fjackrabbit%2FJackrabbitContainer.java;h=1be03827a914aba67432d86df4d7a63729ca096f;hb=2f1a4e0b8313d3872f7cbc73cea9f0d56cfe4fe6;hp=87738a5cdc5dbb2b589652b502f6988136561488;hpb=9ecac0dc0810a3cabf8eb75951f1b7a3c149ae94;p=lgpl%2Fargeo-commons.git diff --git a/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jackrabbit/JackrabbitContainer.java b/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jackrabbit/JackrabbitContainer.java index 87738a5cd..1be03827a 100644 --- a/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jackrabbit/JackrabbitContainer.java +++ b/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/server/jackrabbit/JackrabbitContainer.java @@ -158,7 +158,12 @@ public class JackrabbitContainer implements InitializingBean, DisposableBean, public Session login(Credentials credentials, String workspaceName) throws LoginException, NoSuchWorkspaceException, RepositoryException { - Session session = repository.login(credentials, workspaceName); + Session session; + try { + session = repository.login(credentials, workspaceName); + } catch (NoSuchWorkspaceException e) { + session = createWorkspaceAndLogsIn(credentials, workspaceName); + } processNewSession(session); return session; } @@ -172,7 +177,12 @@ public class JackrabbitContainer implements InitializingBean, DisposableBean, public Session login(String workspaceName) throws LoginException, NoSuchWorkspaceException, RepositoryException { - Session session = repository.login(workspaceName); + Session session; + try { + session = repository.login(workspaceName); + } catch (NoSuchWorkspaceException e) { + session = createWorkspaceAndLogsIn(null, workspaceName); + } processNewSession(session); return session; } @@ -190,6 +200,20 @@ public class JackrabbitContainer implements InitializingBean, DisposableBean, } } + /** + * Logs in to the default workspace, creates the required workspace, logs + * out, logs in to the required workspace. + */ + protected Session createWorkspaceAndLogsIn(Credentials credentials, + String workspaceName) throws RepositoryException { + if (workspaceName == null) + throw new ArgeoException("No workspace specified."); + Session session = repository.login(credentials); + session.getWorkspace().createWorkspace(workspaceName); + session.logout(); + return repository.login(credentials, workspaceName); + } + public void setResourceLoader(ResourceLoader resourceLoader) { this.resourceLoader = resourceLoader; }