Skip to content

Commit e831269

Browse files
author
=
committed
trying to inject configurations with cdi.
1 parent 627d94f commit e831269

22 files changed

+337
-270
lines changed

.idea/misc.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.thenaglecode.algorithms;
2+
3+
import com.thenaglecode.core.util.propeties.ConfigurationItem;
4+
5+
/**
6+
* Created with IntelliJ IDEA.
7+
* User: jxnagl
8+
* Date: 8/8/13
9+
* Time: 3:41 PM
10+
*/
11+
public interface Configuration {
12+
public static final String PRIMES_GENERATOR_CLASS_ID = "primes.generator.class";
13+
14+
public static final ConfigurationItem PRIMES_GENERATOR_CLASS = new ConfigurationItem(PRIMES_GENERATOR_CLASS_ID, "com.thenaglecode.algorithms.primes.PG7_8");
15+
}

src/main/java/com/thenaglecode/algorithms/Main.java

Lines changed: 0 additions & 62 deletions
This file was deleted.

src/main/java/com/thenaglecode/algorithms/ejb/session/singletons/AlgorithmControllerBean.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,15 @@
44
import com.thenaglecode.algorithms.random.RandomNumberGenerator;
55
import org.apache.commons.lang3.StringUtils;
66

7-
import javax.ejb.LocalBean;
87
import javax.ejb.Singleton;
9-
import javax.ejb.Stateful;
10-
import javax.ejb.Stateless;
118

129
/**
1310
* Created with IntelliJ IDEA.
1411
* User: jxnagl
1512
* Date: 8/1/13
1613
* Time: 3:54 PM
1714
*/
18-
@Singleton(name = "AlgorithmControllerEJB")
19-
@LocalBean
15+
@Singleton
2016
public class AlgorithmControllerBean {
2117

2218
private static final RandomNumberGenerator generator = new LinearCongruentialGenerator();
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package com.thenaglecode.algorithms.ejb.session.singletons;
2+
3+
import com.thenaglecode.core.Configuration;
4+
import com.thenaglecode.core.security.Roles;
5+
import com.thenaglecode.core.util.propeties.ConfigurationManager;
6+
import com.thenaglecode.core.util.propeties.InjectConfiguration;
7+
8+
import javax.annotation.security.DeclareRoles;
9+
import javax.annotation.security.RolesAllowed;
10+
import javax.ejb.LocalBean;
11+
import javax.ejb.Singleton;
12+
import javax.enterprise.context.ApplicationScoped;
13+
import javax.enterprise.inject.New;
14+
import javax.validation.constraints.NotNull;
15+
import java.util.HashMap;
16+
import java.util.Map;
17+
18+
/**
19+
* Created with IntelliJ IDEA.
20+
* User: jxnagl
21+
* Date: 8/6/13
22+
* Time: 3:54 PM
23+
*/
24+
@DeclareRoles({Roles.SYSTEM})
25+
@RolesAllowed(Roles.SYSTEM)
26+
@Singleton
27+
@LocalBean
28+
@ApplicationScoped
29+
public class ConfigurationBean implements Configuration {
30+
31+
@New @InjectConfiguration(subsystem = "core")
32+
private static ConfigurationManager coreConfiguration;
33+
34+
public static final String DEFAULT_FILE = coreConfiguration.getValue(DEFAULT_CONFIGURATION_FILENAME);
35+
public static final String DEFAULT_BASE = coreConfiguration.getValue(DEFAULT_BASE_PACKAGE);
36+
37+
@NotNull
38+
private final Map<String, ConfigurationManager> configurationManagers = new HashMap<>();
39+
40+
/**
41+
*
42+
*/
43+
public boolean refreshConfigurationManager(@NotNull String subsystem){
44+
return refreshConfigurationManager(subsystem, DEFAULT_FILE);
45+
}
46+
47+
public boolean refreshConfigurationManager(@NotNull String subsystem, @NotNull String fileName){
48+
ConfigurationManager manager = configurationManagers.get(subsystem + "." + fileName);
49+
if(manager == null) return false;
50+
manager.refresh();
51+
return true;
52+
}
53+
54+
public void refreshAllConfigurationManagers(){
55+
for(String key : configurationManagers.keySet()){
56+
configurationManagers.get(key).refresh();
57+
}
58+
}
59+
60+
public ConfigurationManager getConfigurationManager(@NotNull String subsystem){
61+
return getConfigurationManager(subsystem, DEFAULT_FILE);
62+
}
63+
64+
public ConfigurationManager getConfigurationManager(@NotNull String subsystem, @NotNull String fileName){
65+
return configurationManagers.get(DEFAULT_BASE + "." + subsystem + "." + fileName);
66+
}
67+
68+
public void registerConfigurationManager(ConfigurationManager configurationManager){
69+
configurationManagers.put(configurationManager.getName(), configurationManager);
70+
}
71+
}

src/main/java/com/thenaglecode/core/util/propeties/ResourceLocator.java renamed to src/main/java/com/thenaglecode/algorithms/ejb/session/singletons/ResourceLocatorBean.java

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1-
package com.thenaglecode.core.util.propeties;
1+
package com.thenaglecode.algorithms.ejb.session.singletons;
22

3+
import com.thenaglecode.core.util.propeties.*;
4+
5+
import javax.ejb.EJB;
6+
import javax.ejb.Singleton;
37
import javax.enterprise.inject.Produces;
48
import javax.enterprise.inject.spi.InjectionPoint;
59
import java.io.IOException;
@@ -16,20 +20,26 @@
1620
* Time: 4:53 PM
1721
* used to find the resources associated with these annotations
1822
*/
19-
public class ResourceLocator {
20-
private static final Logger logger = Logger.getLogger(ResourceLocator.class.getName());
23+
@SuppressWarnings("UnusedDeclaration")
24+
@Singleton
25+
public class ResourceLocatorBean {
26+
27+
private static final Logger logger = Logger.getLogger(ResourceLocatorBean.class.getName());
28+
29+
@EJB
30+
private ConfigurationBean configurationBean;
2131

2232
@Produces
2333
@PropertyBundleResource(name = "")
24-
RefreshablePropertyResourceBundle loadPropertiesResource(InjectionPoint ip) throws IOException {
34+
private RefreshablePropertyResourceBundle loadPropertiesResource(InjectionPoint ip) throws IOException {
2535
logger.log(Level.FINE, "-- called PropertiesResourceBundle loader");
2636
PropertiesResource annotation = ip.getAnnotated().getAnnotation(PropertiesResource.class);
2737
return new RefreshablePropertyResourceBundle(annotation.name());
2838
}
2939

3040
@Produces
3141
@PropertiesResource(name = "")
32-
Properties loadProperties(InjectionPoint ip) throws IOException {
42+
private Properties loadProperties(InjectionPoint ip) throws IOException {
3343
logger.log(Level.FINE, "-- called PropertiesResource loader");
3444
PropertiesResource annotation = ip.getAnnotated().getAnnotation(PropertiesResource.class);
3545
String fileName = annotation.name();
@@ -47,12 +57,14 @@ Properties loadProperties(InjectionPoint ip) throws IOException {
4757
}
4858

4959
@Produces
50-
@Configuration(subsystem = "")
51-
ConfigurationManager loadConfigurationManager(InjectionPoint ip){
60+
@InjectConfiguration(subsystem = "", file = "")
61+
private ConfigurationManager loadConfigurationManager(InjectionPoint ip){
5262
logger.log(Level.FINE, "-- called Load ConfigurationManager");
53-
Configuration annotation = ip.getAnnotated().getAnnotation(Configuration.class);
63+
InjectConfiguration annotation = ip.getAnnotated().getAnnotation(InjectConfiguration.class);
64+
5465
logger.log(Level.FINE, "-- subsystem=" + annotation.subsystem() + " file=" + annotation.file());
55-
return new ConfigurationManager(annotation.subsystem(), annotation.file());
66+
ConfigurationManager manager = configurationBean.getConfigurationManager(annotation.subsystem(), annotation.file());
67+
if(manager == null) logger.log(Level.FINE, "could not find manager in cache, creating new one");
68+
return manager == null ? new ConfigurationManager(annotation.subsystem(), annotation.file()) : manager;
5669
}
57-
5870
}

src/main/java/com/thenaglecode/algorithms/ejb/session/singletons/StartUp.java

Lines changed: 0 additions & 49 deletions
This file was deleted.
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package com.thenaglecode.algorithms.ejb.session.singletons;
2+
3+
4+
import com.thenaglecode.core.Configuration;
5+
import com.thenaglecode.core.util.propeties.ConfigurationManager;
6+
import com.thenaglecode.core.util.propeties.InjectConfiguration;
7+
8+
import javax.annotation.PostConstruct;
9+
import javax.ejb.EJB;
10+
import javax.ejb.Singleton;
11+
import javax.ejb.Startup;
12+
import javax.servlet.http.HttpServlet;
13+
import java.util.MissingResourceException;
14+
import java.util.ResourceBundle;
15+
import java.util.logging.Level;
16+
import java.util.logging.Logger;
17+
18+
/**
19+
* Created with IntelliJ IDEA.
20+
* User: jxnagl
21+
* Date: 8/6/13
22+
* Time: 3:46 PM
23+
* <p/>
24+
* place all initialization code that needs to run at the startup of the server here
25+
*/
26+
27+
@Singleton
28+
@Startup
29+
public class StartUpBean extends HttpServlet implements Configuration {
30+
31+
private static final Logger logger = Logger.getLogger(StartUpBean.class.getName());
32+
33+
@InjectConfiguration(subsystem = "core")
34+
private static final ConfigurationManager coreConfiguration = null;
35+
public static final String[] DEFAULT_FILENAMES = coreConfiguration.getValueArray(DEFAULT_CONFIGURATION_FILENAMES_ID);
36+
public static final String DEFAULT_BASE = coreConfiguration.getValue(DEFAULT_BASE_PACKAGE);
37+
38+
@EJB
39+
private ConfigurationBean configurationBean;
40+
41+
@PostConstruct
42+
public void init() {
43+
logger.log(Level.INFO, "---- Initializing App ----");
44+
45+
logger.log(Level.FINE, "loading configuration managers");
46+
initialiseConfigurationManagers();
47+
48+
logger.log(Level.FINE, "---- Initialization complete ----");
49+
}
50+
51+
/**
52+
* finds every configuration file in the project and creates a configuration manager for it if
53+
* it is in the array
54+
*/
55+
private void initialiseConfigurationManagers() {
56+
logger.log(Level.FINE, "finding config files and registering config managers");
57+
for (Package p : Package.getPackages()) {
58+
if (p.getName().startsWith(DEFAULT_BASE + ".")) {
59+
logger.log(Level.FINER, " -found valid package: " + p.getName());
60+
for (String configFileName : DEFAULT_FILENAMES) {
61+
String fileName = p.getName() + "." + configFileName;
62+
try {
63+
ResourceBundle.getBundle(fileName);
64+
logger.log(Level.FINER, "found config file: " + fileName + " registering new configuration manager");
65+
String subsystem = p.getName().substring(DEFAULT_BASE.length() + 1); // +1 accounts for the '.'
66+
logger.log(Level.FINER, "subsystem=" + subsystem);
67+
ConfigurationManager configurationManager = new ConfigurationManager(subsystem, configFileName);
68+
configurationBean.registerConfigurationManager(configurationManager);
69+
} catch (MissingResourceException ignore) {
70+
}
71+
}
72+
}
73+
}
74+
}
75+
}

0 commit comments

Comments
 (0)