Skip to content

Commit 5d0c0df

Browse files
jbertramtabish121
authored andcommitted
ARTEMIS-5974 replace FactoryFinder with Java ServiceLoader
1 parent 64ed9a3 commit 5d0c0df

File tree

25 files changed

+154
-275
lines changed

25 files changed

+154
-275
lines changed

artemis-cli/src/main/java/org/apache/activemq/artemis/cli/factory/BrokerFactory.java

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@
1616
*/
1717
package org.apache.activemq.artemis.cli.factory;
1818

19-
import java.io.IOException;
2019
import java.net.URI;
2120
import java.util.ArrayList;
2221
import java.util.Objects;
2322
import java.util.Optional;
2423
import java.util.Properties;
24+
import java.util.ServiceLoader;
2525

2626
import org.apache.activemq.artemis.api.config.ActiveMQDefaultConfiguration;
2727
import org.apache.activemq.artemis.cli.ConfigurationException;
@@ -33,7 +33,6 @@
3333
import org.apache.activemq.artemis.dto.ServerDTO;
3434
import org.apache.activemq.artemis.integration.Broker;
3535
import org.apache.activemq.artemis.spi.core.security.ActiveMQSecurityManager;
36-
import org.apache.activemq.artemis.utils.FactoryFinder;
3736

3837
public class BrokerFactory {
3938

@@ -50,11 +49,15 @@ private static BrokerDTO createBrokerConfiguration(URI configURI,
5049
throw new ConfigurationException("Invalid configuration URI, no scheme specified: " + configURI);
5150
}
5251

52+
ServiceLoader<BrokerFactoryHandler> loader = ServiceLoader.load(BrokerFactoryHandler.class, BrokerFactory.class.getClassLoader());
5353
BrokerFactoryHandler factory = null;
54-
try {
55-
FactoryFinder finder = new FactoryFinder("META-INF/services/org/apache/activemq/artemis/broker/");
56-
factory = (BrokerFactoryHandler) finder.newInstance(configURI.getScheme());
57-
} catch (IOException ioe) {
54+
for (BrokerFactoryHandler handler : loader) {
55+
if (handler.getName().equals(configURI.getScheme())) {
56+
factory = handler;
57+
break;
58+
}
59+
}
60+
if (factory == null) {
5861
throw new ConfigurationException("Invalid configuration URI, can't find configuration scheme: " + configURI.getScheme());
5962
}
6063
BrokerDTO broker = factory.createBroker(configURI, artemisHome, artemisInstance, artemisURIInstance);
@@ -104,13 +107,17 @@ public static BrokerDTO createBrokerConfiguration(String configuration,
104107

105108
public static Broker createServer(ServerDTO brokerDTO, ActiveMQSecurityManager security, ActivateCallback activateCallback) throws Exception {
106109
if (brokerDTO.configuration != null) {
107-
BrokerHandler handler;
108110
URI configURI = brokerDTO.getConfigurationURI();
109111

110-
try {
111-
FactoryFinder finder = new FactoryFinder("META-INF/services/org/apache/activemq/artemis/broker/server/");
112-
handler = (BrokerHandler) finder.newInstance(configURI.getScheme());
113-
} catch (IOException ioe) {
112+
ServiceLoader<BrokerHandler> loader = ServiceLoader.load(BrokerHandler.class, BrokerFactory.class.getClassLoader());
113+
BrokerHandler handler = null;
114+
for (BrokerHandler h : loader) {
115+
if (h.getName().equals(configURI.getScheme())) {
116+
handler = h;
117+
break;
118+
}
119+
}
120+
if (handler == null) {
114121
throw new ConfigurationException("Invalid configuration URI, can't find configuration scheme: " + configURI.getScheme());
115122
}
116123

artemis-cli/src/main/java/org/apache/activemq/artemis/cli/factory/BrokerFactoryHandler.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,7 @@
2222

2323
public interface BrokerFactoryHandler {
2424

25+
String getName();
26+
2527
BrokerDTO createBroker(URI brokerURI, String artemisHome, String artemisInstance, URI artemisURIInstance) throws Exception;
2628
}

artemis-cli/src/main/java/org/apache/activemq/artemis/cli/factory/BrokerHandler.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,7 @@
2323

2424
public interface BrokerHandler {
2525

26+
String getName();
27+
2628
Broker createServer(ServerDTO brokerDTO, ActiveMQSecurityManager security, ActivateCallback activateCallback);
2729
}

artemis-cli/src/main/java/org/apache/activemq/artemis/cli/factory/FileBrokerHandler.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@
2424

2525
public class FileBrokerHandler implements BrokerHandler {
2626

27+
@Override
28+
public String getName() {
29+
return "file";
30+
}
31+
2732
@Override
2833
public Broker createServer(ServerDTO brokerDTO, ActiveMQSecurityManager security, ActivateCallback activateCallback) {
2934
return new FileBroker(brokerDTO, security, activateCallback);

artemis-cli/src/main/java/org/apache/activemq/artemis/cli/factory/jmx/JmxAclHandler.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,8 @@
2121
import java.net.URI;
2222

2323
public interface JmxAclHandler {
24+
25+
String getName();
26+
2427
ManagementContextDTO createJmxAcl(URI configURI, String artemisHome, String artemisInstance, URI artemisURIInstance) throws Exception;
2528
}

artemis-cli/src/main/java/org/apache/activemq/artemis/cli/factory/jmx/ManagementFactory.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,10 @@
3131
import org.apache.activemq.artemis.core.server.management.JMXAccessControlList;
3232
import org.apache.activemq.artemis.dto.WhiteListDTO;
3333
import org.apache.activemq.artemis.spi.core.security.ActiveMQSecurityManager;
34-
import org.apache.activemq.artemis.utils.FactoryFinder;
3534

36-
import java.io.IOException;
3735
import java.net.URI;
3836
import java.util.List;
37+
import java.util.ServiceLoader;
3938

4039
public class ManagementFactory {
4140

@@ -47,11 +46,15 @@ private static ManagementContextDTO createJmxAclConfiguration(URI configURI,
4746
throw new ConfigurationException("Invalid configuration URI, no scheme specified: " + configURI);
4847
}
4948

49+
ServiceLoader<JmxAclHandler> loader = ServiceLoader.load(JmxAclHandler.class, ManagementFactory.class.getClassLoader());
5050
JmxAclHandler factory = null;
51-
try {
52-
FactoryFinder finder = new FactoryFinder("META-INF/services/org/apache/activemq/artemis/broker/jmx/");
53-
factory = (JmxAclHandler) finder.newInstance(configURI.getScheme());
54-
} catch (IOException ioe) {
51+
for (JmxAclHandler handler : loader) {
52+
if (handler.getName().equals(configURI.getScheme())) {
53+
factory = handler;
54+
break;
55+
}
56+
}
57+
if (factory == null) {
5558
throw new ConfigurationException("Invalid configuration URI, can't find configuration scheme: " + configURI.getScheme());
5659
}
5760
return factory.createJmxAcl(configURI, artemisHome, artemisInstance, artemisURIInstance);

artemis-cli/src/main/java/org/apache/activemq/artemis/cli/factory/jmx/XmlJmxAclHandler.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@
2525
import java.net.URI;
2626

2727
public class XmlJmxAclHandler implements JmxAclHandler {
28+
29+
@Override
30+
public String getName() {
31+
return "xml";
32+
}
33+
2834
@Override
2935
public ManagementContextDTO createJmxAcl(URI configURI, String artemisHome, String artemisInstance, URI artemisURIInstance) throws Exception {
3036
File file = new File(configURI.getSchemeSpecificPart());

artemis-cli/src/main/java/org/apache/activemq/artemis/cli/factory/security/JaasSecurityHandler.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@
2323

2424
public class JaasSecurityHandler implements SecurityHandler {
2525

26+
@Override
27+
public String getName() {
28+
return "jaas-security";
29+
}
30+
2631
@Override
2732
public ActiveMQSecurityManager createSecurityManager(SecurityDTO security) throws Exception {
2833
JaasSecurityDTO jaasSecurity = (JaasSecurityDTO) security;

artemis-cli/src/main/java/org/apache/activemq/artemis/cli/factory/security/SecurityHandler.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,7 @@
2121

2222
public interface SecurityHandler {
2323

24+
String getName();
25+
2426
ActiveMQSecurityManager createSecurityManager(SecurityDTO securityDTO) throws Exception;
2527
}

artemis-cli/src/main/java/org/apache/activemq/artemis/cli/factory/security/SecurityManagerFactory.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,30 @@
1616
*/
1717
package org.apache.activemq.artemis.cli.factory.security;
1818

19+
import java.util.ServiceLoader;
1920
import javax.xml.bind.annotation.XmlRootElement;
2021

2122
import org.apache.activemq.artemis.dto.SecurityDTO;
2223
import org.apache.activemq.artemis.spi.core.security.ActiveMQSecurityManager;
23-
import org.apache.activemq.artemis.utils.FactoryFinder;
2424

2525
public class SecurityManagerFactory {
2626

2727
public static ActiveMQSecurityManager create(SecurityDTO config) throws Exception {
2828
if (config == null) {
2929
throw new Exception("No security manager configured!");
3030
}
31-
FactoryFinder finder = new FactoryFinder("META-INF/services/org/apache/activemq/artemis/broker/security/");
32-
SecurityHandler securityHandler = (SecurityHandler) finder.newInstance(config.getClass().getAnnotation(XmlRootElement.class).name());
31+
String name = config.getClass().getAnnotation(XmlRootElement.class).name();
32+
ServiceLoader<SecurityHandler> loader = ServiceLoader.load(SecurityHandler.class, SecurityManagerFactory.class.getClassLoader());
33+
SecurityHandler securityHandler = null;
34+
for (SecurityHandler handler : loader) {
35+
if (handler.getName().equals(name)) {
36+
securityHandler = handler;
37+
break;
38+
}
39+
}
40+
if (securityHandler == null) {
41+
throw new Exception("Invalid security configuration, can't find security handler: " + name);
42+
}
3343
return securityHandler.createSecurityManager(config);
3444
}
3545
}

0 commit comments

Comments
 (0)