You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ro...@apache.org on 2022/07/06 10:31:19 UTC
[activemq-artemis] branch main updated: ARTEMIS-3883: use same version + junit helpers as rest of build to start embedded test Directory for example, rather than custom classes
This is an automated email from the ASF dual-hosted git repository.
robbie pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git
The following commit(s) were added to refs/heads/main by this push:
new a207c614e7 ARTEMIS-3883: use same version + junit helpers as rest of build to start embedded test Directory for example, rather than custom classes
a207c614e7 is described below
commit a207c614e7398edc4b3af5c0a69e6e836baeb755
Author: Robbie Gemmell <ro...@apache.org>
AuthorDate: Tue Jul 5 12:52:11 2022 +0100
ARTEMIS-3883: use same version + junit helpers as rest of build to start embedded test Directory for example, rather than custom classes
Also tweak example output for clarity
---
examples/features/standard/security-ldap/pom.xml | 45 ++----
.../artemis/jms/example/SecurityExample.java | 48 +++---
.../jms/example/SecurityExampleTestLdapServer.java | 46 ++++++
.../ldap/InMemoryDirectoryServiceFactory.java | 161 ---------------------
.../jms/example/ldap/InMemorySchemaPartition.java | 95 ------------
.../artemis/jms/example/ldap/LdapServer.java | 100 -------------
6 files changed, 88 insertions(+), 407 deletions(-)
diff --git a/examples/features/standard/security-ldap/pom.xml b/examples/features/standard/security-ldap/pom.xml
index 14fbc39cc7..859bc1d2d2 100644
--- a/examples/features/standard/security-ldap/pom.xml
+++ b/examples/features/standard/security-ldap/pom.xml
@@ -33,21 +33,8 @@ under the License.
<properties>
<activemq.basedir>${project.basedir}/../../../..</activemq.basedir>
- <version.org.apache.ds>2.0.0-M20</version.org.apache.ds>
</properties>
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>org.apache.directory.server</groupId>
- <artifactId>apacheds-parent</artifactId>
- <version>${version.org.apache.ds}</version>
- <scope>import</scope>
- <type>pom</type>
- </dependency>
- </dependencies>
- </dependencyManagement>
-
<dependencies>
<dependency>
<groupId>org.apache.activemq</groupId>
@@ -58,25 +45,22 @@ under the License.
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
</dependency>
+
+ <!-- Use DS JUnit integrations to run test Directory instance for the example -->
<dependency>
- <groupId>org.apache.directory.server</groupId>
- <artifactId>apacheds-core-annotations</artifactId>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
<scope>compile</scope>
- <exclusions>
- <exclusion>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-log4j12</artifactId>
- </exclusion>
- </exclusions>
</dependency>
<dependency>
- <groupId>org.apache.directory.api</groupId>
- <artifactId>api-ldap-codec-standalone</artifactId>
- <scope>compile</scope>
+ <groupId>org.apache.directory.server</groupId>
+ <artifactId>apacheds-test-framework</artifactId>
+ <version>${directory-version}</version>
</dependency>
<dependency>
<groupId>org.apache.directory.server</groupId>
- <artifactId>apacheds-protocol-ldap</artifactId>
+ <artifactId>apacheds-server-annotations</artifactId>
+ <version>${directory-version}</version>
</dependency>
</dependencies>
@@ -118,9 +102,6 @@ under the License.
</goals>
<configuration>
<clientClass>org.apache.activemq.artemis.jms.example.SecurityExample</clientClass>
- <args>
- <arg>${project.build.outputDirectory}/example.ldif</arg>
- </args>
</configuration>
</execution>
<execution>
@@ -142,6 +123,12 @@ under the License.
<artifactId>security-ldap</artifactId>
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>${junit.version}</version>
+ <scope>compile</scope>
+ </dependency>
</dependencies>
</plugin>
<plugin>
@@ -150,4 +137,4 @@ under the License.
</plugin>
</plugins>
</build>
-</project>
\ No newline at end of file
+</project>
diff --git a/examples/features/standard/security-ldap/src/main/java/org/apache/activemq/artemis/jms/example/SecurityExample.java b/examples/features/standard/security-ldap/src/main/java/org/apache/activemq/artemis/jms/example/SecurityExample.java
index 2861182ded..503149e0b0 100644
--- a/examples/features/standard/security-ldap/src/main/java/org/apache/activemq/artemis/jms/example/SecurityExample.java
+++ b/examples/features/standard/security-ldap/src/main/java/org/apache/activemq/artemis/jms/example/SecurityExample.java
@@ -27,13 +27,11 @@ import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.naming.InitialContext;
-import org.apache.activemq.artemis.jms.example.ldap.LdapServer;
+import org.junit.runner.JUnitCore;
public class SecurityExample {
- public static void main(final String[] args) throws Exception {
- LdapServer ldapServer = new LdapServer(args[0]);
-
+ public static void securityExample() throws Exception {
boolean result = true;
Connection failConnection = null;
Connection billConnection = null;
@@ -58,6 +56,7 @@ public class SecurityExample {
try {
failConnection = cf.createConnection();
result = false;
+ System.err.println("Unexpectedly connected with default user");
} catch (JMSSecurityException e) {
System.out.println("Default user cannot get a connection. Details: " + e.getMessage());
}
@@ -66,8 +65,9 @@ public class SecurityExample {
try {
billConnection = createConnection("bill", "activemq1", cf);
result = false;
+ System.err.println("User bill unexpectedly connected with wrong password");
} catch (JMSException e) {
- System.out.println("User bill failed to connect. Details: " + e.getMessage());
+ System.out.println("User bill failed to connect with wrong password. Details: " + e.getMessage());
}
// Step 6. bill makes a good connection.
@@ -85,16 +85,17 @@ public class SecurityExample {
// Step 9. sam makes a good connection.
samConnection = createConnection("sam", "activemq3", cf);
samConnection.start();
+ System.out.println("-------------------------------------------------------------------------------------");
// Step 10. Check every user can publish/subscribe genericTopics.
- System.out.println("------------------------Checking permissions on " + genericTopic + "----------------");
+ System.out.println("======== Checking permissions on " + genericTopic.getTopicName() + " ========");
checkUserSendAndReceive(genericTopic, billConnection, "bill");
checkUserSendAndReceive(genericTopic, andrewConnection, "andrew");
checkUserSendAndReceive(genericTopic, frankConnection, "frank");
checkUserSendAndReceive(genericTopic, samConnection, "sam");
System.out.println("-------------------------------------------------------------------------------------");
- System.out.println("------------------------Checking permissions on " + europeTopic + "----------------");
+ System.out.println("======== Checking permissions on " + europeTopic.getTopicName() + " ========");
// Step 11. Check permissions on news.europe.europeTopic for bill: can't send and can't receive
checkUserNoSendNoReceive(europeTopic, billConnection, "bill");
@@ -109,7 +110,7 @@ public class SecurityExample {
checkUserReceiveNoSend(europeTopic, samConnection, "sam", andrewConnection);
System.out.println("-------------------------------------------------------------------------------------");
- System.out.println("------------------------Checking permissions on " + usTopic + "----------------");
+ System.out.println("======== Checking permissions on " + usTopic.getTopicName() + " ========");
// Step 15. Check permissions on news.us.usTopic for bill: can't send and can't receive
checkUserNoSendNoReceive(usTopic, billConnection, "bill");
@@ -145,8 +146,6 @@ public class SecurityExample {
if (initialContext != null) {
initialContext.close();
}
-
- ldapServer.stop();
}
}
@@ -166,9 +165,9 @@ public class SecurityExample {
" can send message [" +
msg.getText() +
"] to topic " +
- topic);
+ topic.getTopicName());
} catch (JMSException e) {
- System.out.println("User " + user + " cannot send message [" + msg.getText() + "] to topic: " + topic);
+ System.out.println("User " + user + " cannot send message [" + msg.getText() + "] to topic: " + topic.getTopicName());
}
// Now send a good message
@@ -179,9 +178,9 @@ public class SecurityExample {
TextMessage receivedMsg = (TextMessage) consumer.receive(2000);
if (receivedMsg != null) {
- System.out.println("User " + user + " can receive message [" + receivedMsg.getText() + "] from topic " + topic);
+ System.out.println("User " + user + " can receive message [" + receivedMsg.getText() + "] from topic " + topic.getTopicName());
} else {
- throw new IllegalStateException("Security setting is broken! User " + user + " cannot receive message from topic " + topic);
+ throw new IllegalStateException("Security setting is broken! User " + user + " cannot receive message from topic " + topic.getTopicName());
}
session1.close();
@@ -198,7 +197,7 @@ public class SecurityExample {
try {
session.createConsumer(topic);
} catch (JMSException e) {
- System.out.println("User " + user + " cannot receive any message from topic " + topic);
+ System.out.println("User " + user + " cannot receive any message from topic " + topic.getTopicName());
}
Session session1 = receivingConn.createSession(false, Session.AUTO_ACKNOWLEDGE);
@@ -209,13 +208,13 @@ public class SecurityExample {
TextMessage receivedMsg = (TextMessage) goodConsumer.receive(2000);
if (receivedMsg != null) {
- System.out.println("User " + user + " can send message [" + receivedMsg.getText() + "] to topic " + topic);
+ System.out.println("User " + user + " can send message [" + receivedMsg.getText() + "] to topic " + topic.getTopicName());
} else {
throw new IllegalStateException("Security setting is broken! User " + user +
" cannot send message [" +
msg.getText() +
"] to topic " +
- topic);
+ topic.getTopicName());
}
session.close();
@@ -232,7 +231,7 @@ public class SecurityExample {
try {
session.createConsumer(topic);
} catch (JMSException e) {
- System.out.println("User " + user + " cannot create consumer on topic " + topic);
+ System.out.println("User " + user + " cannot create consumer on topic " + topic.getTopicName());
}
TextMessage msg = session.createTextMessage("hello-world-3");
@@ -242,9 +241,9 @@ public class SecurityExample {
" can send message [" +
msg.getText() +
"] to topic " +
- topic);
+ topic.getTopicName());
} catch (JMSException e) {
- System.out.println("User " + user + " cannot send message [" + msg.getText() + "] to topic: " + topic);
+ System.out.println("User " + user + " cannot send message [" + msg.getText() + "] to topic: " + topic.getTopicName());
}
session.close();
@@ -261,8 +260,8 @@ public class SecurityExample {
producer.send(msg);
TextMessage receivedMsg = (TextMessage) consumer.receive(5000);
if (receivedMsg != null) {
- System.out.println("User " + user + " can send message: [" + msg.getText() + "] to topic: " + topic);
- System.out.println("User " + user + " can receive message: [" + msg.getText() + "] from topic: " + topic);
+ System.out.println("User " + user + " can send message: [" + msg.getText() + "] to topic: " + topic.getTopicName());
+ System.out.println("User " + user + " can receive message: [" + msg.getText() + "] from topic: " + topic.getTopicName());
} else {
throw new IllegalStateException("Error! User " + user + " cannot receive the message! ");
}
@@ -274,4 +273,9 @@ public class SecurityExample {
final ConnectionFactory cf) throws JMSException {
return cf.createConnection(username, password);
}
+
+ // Boiler plate, leverages JUnit integrations to start test LDAP server and then run example code above.
+ public static void main(final String[] args) throws Exception {
+ JUnitCore.main(SecurityExampleTestLdapServer.class.getName());
+ }
}
diff --git a/examples/features/standard/security-ldap/src/main/java/org/apache/activemq/artemis/jms/example/SecurityExampleTestLdapServer.java b/examples/features/standard/security-ldap/src/main/java/org/apache/activemq/artemis/jms/example/SecurityExampleTestLdapServer.java
new file mode 100644
index 0000000000..9055854c0a
--- /dev/null
+++ b/examples/features/standard/security-ldap/src/main/java/org/apache/activemq/artemis/jms/example/SecurityExampleTestLdapServer.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.activemq.artemis.jms.example;
+
+import org.apache.directory.server.core.annotations.CreateDS;
+import org.apache.directory.server.core.annotations.CreatePartition;
+import org.apache.directory.server.annotations.CreateLdapServer;
+import org.apache.directory.server.annotations.CreateTransport;
+import org.apache.directory.server.core.annotations.ApplyLdifFiles;
+import org.apache.directory.server.core.integ.CreateLdapServerRule;
+import org.junit.ClassRule;
+import org.junit.Test;
+
+// Boiler plate JUnit test class, leveraging integrations to stand up test LDAP server and then run example during test.
+@CreateDS(name = "myDS", partitions = {@CreatePartition(name = "test", suffix = "dc=activemq,dc=org")})
+@CreateLdapServer(transports = {@CreateTransport(protocol = "LDAP", port = 1024)})
+@ApplyLdifFiles({"example.ldif"})
+public class SecurityExampleTestLdapServer {
+
+ @ClassRule
+ public static CreateLdapServerRule serverRule = new CreateLdapServerRule();
+
+ @Test
+ public void securityExampleWrapperTest() throws Exception {
+ System.out.println("-------------------------------------------------------------------------------------");
+ System.out.println("======== Running Example Application Code ========");
+
+ SecurityExample.securityExample();
+
+ System.out.println("======== Complete, cleaning up ========");
+ }
+}
diff --git a/examples/features/standard/security-ldap/src/main/java/org/apache/activemq/artemis/jms/example/ldap/InMemoryDirectoryServiceFactory.java b/examples/features/standard/security-ldap/src/main/java/org/apache/activemq/artemis/jms/example/ldap/InMemoryDirectoryServiceFactory.java
deleted file mode 100644
index f6aaf44b13..0000000000
--- a/examples/features/standard/security-ldap/src/main/java/org/apache/activemq/artemis/jms/example/ldap/InMemoryDirectoryServiceFactory.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.activemq.artemis.jms.example.ldap;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.List;
-
-import net.sf.ehcache.CacheManager;
-import net.sf.ehcache.config.CacheConfiguration;
-import net.sf.ehcache.config.Configuration;
-import org.apache.commons.io.FileUtils;
-import org.apache.directory.api.ldap.model.constants.SchemaConstants;
-import org.apache.directory.api.ldap.model.schema.LdapComparator;
-import org.apache.directory.api.ldap.model.schema.SchemaManager;
-import org.apache.directory.api.ldap.model.schema.comparators.NormalizingComparator;
-import org.apache.directory.api.ldap.model.schema.registries.ComparatorRegistry;
-import org.apache.directory.api.ldap.model.schema.registries.SchemaLoader;
-import org.apache.directory.api.ldap.schema.loader.JarLdifSchemaLoader;
-import org.apache.directory.api.ldap.schema.manager.impl.DefaultSchemaManager;
-import org.apache.directory.api.util.exception.Exceptions;
-import org.apache.directory.server.constants.ServerDNConstants;
-import org.apache.directory.server.core.DefaultDirectoryService;
-import org.apache.directory.server.core.api.CacheService;
-import org.apache.directory.server.core.api.DirectoryService;
-import org.apache.directory.server.core.api.InstanceLayout;
-import org.apache.directory.server.core.api.partition.Partition;
-import org.apache.directory.server.core.api.schema.SchemaPartition;
-import org.apache.directory.server.core.factory.AvlPartitionFactory;
-import org.apache.directory.server.core.factory.DirectoryServiceFactory;
-import org.apache.directory.server.core.factory.PartitionFactory;
-import org.apache.directory.server.i18n.I18n;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Factory for a fast (mostly in-memory-only) ApacheDS DirectoryService. Use only for tests!!
- */
-public class InMemoryDirectoryServiceFactory implements DirectoryServiceFactory {
-
- private static Logger LOG = LoggerFactory.getLogger(InMemoryDirectoryServiceFactory.class);
-
- private final DirectoryService directoryService;
- private final PartitionFactory partitionFactory;
-
- /**
- * Default constructor which creates {@link DefaultDirectoryService} instance and configures {@link AvlPartitionFactory} as
- * the {@link PartitionFactory} implementation.
- */
- public InMemoryDirectoryServiceFactory() {
- try {
- directoryService = new DefaultDirectoryService();
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- directoryService.setShutdownHookEnabled(false);
- partitionFactory = new AvlPartitionFactory();
- }
-
- /**
- * Constructor which uses provided {@link DirectoryService} and {@link PartitionFactory} implementations.
- *
- * @param directoryService must be not-<code>null</code>
- * @param partitionFactory must be not-<code>null</code>
- */
- public InMemoryDirectoryServiceFactory(DirectoryService directoryService, PartitionFactory partitionFactory) {
- this.directoryService = directoryService;
- this.partitionFactory = partitionFactory;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public void init(String name) throws Exception {
- if ((directoryService == null) || directoryService.isStarted()) {
- return;
- }
-
- directoryService.setInstanceId(name);
-
- // instance layout
- InstanceLayout instanceLayout = new InstanceLayout(System.getProperty("java.io.tmpdir") + "/server-work-" + name);
- if (instanceLayout.getInstanceDirectory().exists()) {
- try {
- FileUtils.deleteDirectory(instanceLayout.getInstanceDirectory());
- } catch (IOException e) {
- LOG.warn("couldn't delete the instance directory before initializing the DirectoryService", e);
- }
- }
- directoryService.setInstanceLayout(instanceLayout);
-
- // EhCache in disabled-like-mode
- Configuration ehCacheConfig = new Configuration();
- CacheConfiguration defaultCache = new CacheConfiguration("default", 1).eternal(false).timeToIdleSeconds(30).timeToLiveSeconds(30).overflowToDisk(false);
- ehCacheConfig.addDefaultCache(defaultCache);
- CacheService cacheService = new CacheService(new CacheManager(ehCacheConfig));
- directoryService.setCacheService(cacheService);
-
- // Init the schema
- // SchemaLoader loader = new SingleLdifSchemaLoader();
- SchemaLoader loader = new JarLdifSchemaLoader();
- SchemaManager schemaManager = new DefaultSchemaManager(loader);
- schemaManager.loadAllEnabled();
- ComparatorRegistry comparatorRegistry = schemaManager.getComparatorRegistry();
- for (LdapComparator<?> comparator : comparatorRegistry) {
- if (comparator instanceof NormalizingComparator) {
- ((NormalizingComparator) comparator).setOnServer();
- }
- }
- directoryService.setSchemaManager(schemaManager);
- InMemorySchemaPartition inMemorySchemaPartition = new InMemorySchemaPartition(schemaManager);
-
- SchemaPartition schemaPartition = new SchemaPartition(schemaManager);
- schemaPartition.setWrappedPartition(inMemorySchemaPartition);
- directoryService.setSchemaPartition(schemaPartition);
- List<Throwable> errors = schemaManager.getErrors();
- if (errors.size() != 0) {
- throw new Exception(I18n.err(I18n.ERR_317, Exceptions.printErrors(errors)));
- }
-
- // Init system partition
- Partition systemPartition = partitionFactory.createPartition(directoryService.getSchemaManager(), directoryService.getDnFactory(), "system", ServerDNConstants.SYSTEM_DN, 500, new File(directoryService.getInstanceLayout().getPartitionsDirectory(), "system"));
- systemPartition.setSchemaManager(directoryService.getSchemaManager());
- partitionFactory.addIndex(systemPartition, SchemaConstants.OBJECT_CLASS_AT, 100);
- directoryService.setSystemPartition(systemPartition);
-
- directoryService.startup();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public DirectoryService getDirectoryService() throws Exception {
- return directoryService;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public PartitionFactory getPartitionFactory() throws Exception {
- return partitionFactory;
- }
-
-}
diff --git a/examples/features/standard/security-ldap/src/main/java/org/apache/activemq/artemis/jms/example/ldap/InMemorySchemaPartition.java b/examples/features/standard/security-ldap/src/main/java/org/apache/activemq/artemis/jms/example/ldap/InMemorySchemaPartition.java
deleted file mode 100644
index 256a281499..0000000000
--- a/examples/features/standard/security-ldap/src/main/java/org/apache/activemq/artemis/jms/example/ldap/InMemorySchemaPartition.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.activemq.artemis.jms.example.ldap;
-
-import javax.naming.InvalidNameException;
-import java.net.URL;
-import java.util.Map;
-import java.util.TreeSet;
-import java.util.UUID;
-import java.util.regex.Pattern;
-
-import org.apache.directory.api.ldap.model.constants.SchemaConstants;
-import org.apache.directory.api.ldap.model.entry.DefaultEntry;
-import org.apache.directory.api.ldap.model.entry.Entry;
-import org.apache.directory.api.ldap.model.ldif.LdifEntry;
-import org.apache.directory.api.ldap.model.ldif.LdifReader;
-import org.apache.directory.api.ldap.model.schema.SchemaManager;
-import org.apache.directory.api.ldap.schema.extractor.impl.DefaultSchemaLdifExtractor;
-import org.apache.directory.api.ldap.schema.extractor.impl.ResourceMap;
-import org.apache.directory.server.core.api.interceptor.context.AddOperationContext;
-import org.apache.directory.server.core.partition.ldif.AbstractLdifPartition;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * In-memory schema-only partition which loads the data in the similar way as the
- * {@link org.apache.directory.api.ldap.schema.loader.JarLdifSchemaLoader}.
- */
-public class InMemorySchemaPartition extends AbstractLdifPartition {
-
- private static Logger LOG = LoggerFactory.getLogger(InMemorySchemaPartition.class);
-
- /**
- * Filesystem path separator pattern, either forward slash or backslash. java.util.regex.Pattern is immutable so only one
- * instance is needed for all uses.
- */
-
- public InMemorySchemaPartition(SchemaManager schemaManager) {
- super(schemaManager);
- }
-
- /**
- * Partition initialization - loads schema entries from the files on classpath.
- *
- * @see org.apache.directory.server.core.partition.impl.avl.AvlPartition#doInit()
- */
- @Override
- protected void doInit() throws InvalidNameException, Exception {
- if (initialized) {
- return;
- }
-
- LOG.debug("Initializing schema partition " + getId());
- suffixDn.apply(schemaManager);
- super.doInit();
-
- // load schema
- final Map<String, Boolean> resMap = ResourceMap.getResources(Pattern.compile("schema[/\\Q\\\\E]ou=schema.*"));
- for (String resourcePath : new TreeSet<>(resMap.keySet())) {
- if (resourcePath.endsWith(".ldif")) {
- URL resource = DefaultSchemaLdifExtractor.getUniqueResource(resourcePath, "Schema LDIF file");
- LdifEntry ldifEntry;
- try (LdifReader reader = new LdifReader(resource.openStream())) {
- ldifEntry = reader.next();
- }
-
- Entry entry = new DefaultEntry(schemaManager, ldifEntry.getEntry());
- // add mandatory attributes
- if (entry.get(SchemaConstants.ENTRY_CSN_AT) == null) {
- entry.add(SchemaConstants.ENTRY_CSN_AT, defaultCSNFactory.newInstance().toString());
- }
- if (entry.get(SchemaConstants.ENTRY_UUID_AT) == null) {
- entry.add(SchemaConstants.ENTRY_UUID_AT, UUID.randomUUID().toString());
- }
- AddOperationContext addContext = new AddOperationContext(null, entry);
- super.add(addContext);
- }
- }
- }
-
-}
diff --git a/examples/features/standard/security-ldap/src/main/java/org/apache/activemq/artemis/jms/example/ldap/LdapServer.java b/examples/features/standard/security-ldap/src/main/java/org/apache/activemq/artemis/jms/example/ldap/LdapServer.java
deleted file mode 100644
index c9a4b3cf4b..0000000000
--- a/examples/features/standard/security-ldap/src/main/java/org/apache/activemq/artemis/jms/example/ldap/LdapServer.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.activemq.artemis.jms.example.ldap;
-
-import java.io.IOException;
-
-import org.apache.directory.api.ldap.model.entry.DefaultEntry;
-import org.apache.directory.api.ldap.model.ldif.LdifEntry;
-import org.apache.directory.api.ldap.model.ldif.LdifReader;
-import org.apache.directory.api.ldap.model.name.Dn;
-import org.apache.directory.api.ldap.model.schema.SchemaManager;
-import org.apache.directory.server.core.api.DirectoryService;
-import org.apache.directory.server.core.partition.impl.avl.AvlPartition;
-import org.apache.directory.server.protocol.shared.transport.TcpTransport;
-
-/**
- * Creates and starts LDAP server(s).
- */
-public class LdapServer {
-
- private final DirectoryService directoryService;
- private final org.apache.directory.server.ldap.LdapServer ldapServer;
-
- /**
- * Create a single LDAP server.
- *
- * @param ldifFile
- * @throws Exception
- */
- public LdapServer(String ldifFile) throws Exception {
- InMemoryDirectoryServiceFactory dsFactory = new InMemoryDirectoryServiceFactory();
- dsFactory.init("ds");
-
- directoryService = dsFactory.getDirectoryService();
-
- final SchemaManager schemaManager = directoryService.getSchemaManager();
- importLdif(directoryService, schemaManager, new LdifReader(ldifFile));
-
- ldapServer = new org.apache.directory.server.ldap.LdapServer();
- ldapServer.setTransports(new TcpTransport("127.0.0.1", 1024));
- ldapServer.setDirectoryService(directoryService);
-
- ldapServer.start();
- }
-
- /**
- * Stops LDAP server and the underlying directory service.
- *
- * @throws Exception
- */
- public void stop() throws Exception {
- ldapServer.stop();
- directoryService.shutdown();
- }
-
- private void importLdif(DirectoryService directoryService,
- final SchemaManager schemaManager,
- LdifReader ldifReader) throws Exception {
- try {
- for (LdifEntry ldifEntry : ldifReader) {
- checkPartition(ldifEntry);
- directoryService.getAdminSession().add(new DefaultEntry(schemaManager, ldifEntry.getEntry()));
- }
- } finally {
- try {
- ldifReader.close();
- } catch (IOException ioe) {
- // ignore
- }
- }
- }
-
- private void checkPartition(LdifEntry ldifEntry) throws Exception {
- Dn dn = ldifEntry.getDn();
- Dn parent = dn.getParent();
- try {
- directoryService.getAdminSession().exists(parent);
- } catch (Exception e) {
- System.out.println("Creating new partition for DN=" + dn + "\n");
- AvlPartition partition = new AvlPartition(directoryService.getSchemaManager());
- partition.setId(dn.getName());
- partition.setSuffixDn(dn);
- directoryService.addPartition(partition);
- }
- }
-}