1 package org
.argeo
.server
.ads
;
4 import java
.util
.ArrayList
;
6 import java
.util
.Properties
;
8 import javax
.naming
.Context
;
9 import javax
.naming
.InitialContext
;
10 import javax
.naming
.NamingException
;
11 import javax
.naming
.directory
.InitialDirContext
;
13 import org
.apache
.commons
.io
.FileUtils
;
14 import org
.apache
.commons
.logging
.Log
;
15 import org
.apache
.commons
.logging
.LogFactory
;
16 import org
.apache
.directory
.server
.configuration
.MutableServerStartupConfiguration
;
17 import org
.apache
.directory
.server
.core
.configuration
.ShutdownConfiguration
;
18 import org
.apache
.directory
.server
.jndi
.ServerContextFactory
;
19 import org
.springframework
.beans
.factory
.DisposableBean
;
20 import org
.springframework
.beans
.factory
.InitializingBean
;
21 import org
.springframework
.core
.io
.Resource
;
22 import org
.springframework
.util
.Assert
;
24 public class AdsContainer
implements InitializingBean
, DisposableBean
{
25 private final static Log log
= LogFactory
.getLog(AdsContainer
.class);
27 private MutableServerStartupConfiguration configuration
;
28 private Properties environment
= null;
29 private File workingDirectory
= new File(System
30 .getProperty("java.io.tmpdir")
31 + File
.separator
+ "argeo-apacheDirectoryServer");
32 private List
<Resource
> ldifs
= new ArrayList
<Resource
>();
33 private File ldifDirectory
;
34 private Boolean deleteWorkingDirOnExit
= false;
36 @SuppressWarnings("unchecked")
37 public void afterPropertiesSet() throws Exception
{
39 log
.info("Starting directory server with id '"
40 + configuration
.getInstanceId() + "' in directory "
41 + workingDirectory
.getAbsolutePath());
43 if (deleteWorkingDirOnExit
&& workingDirectory
.exists()) {
44 log
.warn("Found existing directory " + workingDirectory
46 FileUtils
.deleteDirectory(workingDirectory
);
48 configuration
.setWorkingDirectory(workingDirectory
);
49 workingDirectory
.mkdirs();
51 if (ldifDirectory
!= null)
52 configuration
.setLdifDirectory(ldifDirectory
);
54 configuration
.setLdifDirectory(new File(workingDirectory
56 + File
.separator
+ "ldif"));
59 configuration
.getLdifDirectory().mkdirs();
60 for (Resource ldif
: ldifs
) {
61 FileUtils
.copyURLToFile(ldif
.getURL(), new File(configuration
62 .getLdifDirectory().getAbsolutePath()
63 + File
.separator
+ ldif
.getFilename().replace(':', '_')));
64 if (log
.isDebugEnabled())
65 log
.debug("Copied " + ldif
+ " to LDIF directory "
66 + configuration
.getLdifDirectory());
69 Properties env
= new Properties();
70 env
.setProperty(Context
.INITIAL_CONTEXT_FACTORY
,
71 ServerContextFactory
.class.getName());
72 Assert
.notNull(environment
);
73 env
.putAll(environment
);
74 env
.putAll(configuration
.toJndiEnvironment());
77 new InitialDirContext(env
);
78 } catch (NamingException e
) {
79 throw new RuntimeException(
80 "Failed to start Apache Directory server", e
);
84 @SuppressWarnings("unchecked")
85 public void destroy() throws Exception
{
86 ShutdownConfiguration shutdown
= new ShutdownConfiguration(
87 configuration
.getInstanceId());
89 Properties env
= new Properties();
90 env
.setProperty(Context
.INITIAL_CONTEXT_FACTORY
,
91 ServerContextFactory
.class.getName());
92 Assert
.notNull(environment
);
93 env
.putAll(environment
);
94 env
.putAll(shutdown
.toJndiEnvironment());
96 log
.info("Shutting down directory server with id '"
97 + configuration
.getInstanceId() + "'");
100 new InitialContext(env
);
101 } catch (NamingException e
) {
102 throw new RuntimeException(
103 "Failed to stop Apache Directory server", e
);
106 if (workingDirectory
.exists() && deleteWorkingDirOnExit
) {
107 if (log
.isDebugEnabled())
108 log
.debug("Delete Apache DS working dir " + workingDirectory
);
109 FileUtils
.deleteDirectory(workingDirectory
);
114 public void setConfiguration(MutableServerStartupConfiguration configuration
) {
115 this.configuration
= configuration
;
118 public void setWorkingDirectory(File workingDirectory
) {
119 this.workingDirectory
= workingDirectory
;
122 public void setEnvironment(Properties environment
) {
123 this.environment
= environment
;
126 public void setLdifs(List
<Resource
> ldifs
) {
130 public void setLdifDirectory(File ldifDirectory
) {
131 this.ldifDirectory
= ldifDirectory
;
134 public void setDeleteWorkingDirOnExit(Boolean deleteWorkingDirOnExit
) {
135 this.deleteWorkingDirOnExit
= deleteWorkingDirOnExit
;