[javaee-patterns~hg:306] JMX exposure works
- From: abien@kenai.com
- To: commits@javaee-patterns.kenai.com
- Subject: [javaee-patterns~hg:306] JMX exposure works
- Date: Fri, 3 Feb 2012 05:46:07 +0000
Project: javaee-patterns
Repository: hg
Revision: 306
Author: abien
Date: 2012-02-03 05:20:50 UTC
Link:
Log Message:
------------
ProjectStage injection works
Stage dependent injection works
Configuration with primitives works
Repetition is configurable
Configurator renamed
Configurable annotation introduced
Stage dependent injection works
REST enabled
web.xml configuration works
Clean up
JMX exposure works
Revisions:
----------
296
297
298
299
300
301
302
303
304
305
306
Modified Paths:
---------------
ConfiguringJavaEE/nb-configuration.xml
ConfiguringJavaEE/src/main/java/com/abien/configuration/presentation/Configuration.java
ConfiguringJavaEE/src/main/java/com/abien/configuration/presentation/Index.java
ConfiguringJavaEE/src/main/webapp/index.xhtml
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/consumer/Messenger.java
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/provider/Configuration.java
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/consumer/Greeter.java
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/provider/Configurator.java
ConfiguringJavaEE/src/main/webapp/WEB-INF/web.xml
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/RESTConfig.java
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/provider/FacesConfigurationProvider.java
Added Paths:
------------
ConfiguringJavaEE/nb-configuration.xml
ConfiguringJavaEE/pom.xml
ConfiguringJavaEE/src/main/java/com/abien/configuration/presentation/Configuration.java
ConfiguringJavaEE/src/main/java/com/abien/configuration/presentation/Index.java
ConfiguringJavaEE/src/main/webapp/WEB-INF/beans.xml
ConfiguringJavaEE/src/main/webapp/WEB-INF/glassfish-web.xml
ConfiguringJavaEE/src/main/webapp/WEB-INF/web.xml
ConfiguringJavaEE/src/main/webapp/index.xhtml
ConfiguringJavaEE/src/main/java/com/abien/configuration/integration/ConnectorManager.java
ConfiguringJavaEE/src/main/java/com/abien/configuration/integration/EISConnector.java
ConfiguringJavaEE/src/main/java/com/abien/configuration/integration/EISMock.java
ConfiguringJavaEE/src/main/java/com/abien/configuration/integration/LegacyConnector.java
ConfiguringJavaEE/src/main/java/com/abien/configuration/presentation/Stage.java
ConfiguringJavaEE/src/main/java/com/abien/configuration/presentation/StageDependent.java
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/consumer/Messenger.java
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/provider/Configuration.java
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/provider/ConfigurationProvider.java
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/staging/ConnectorManager.java
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/staging/EISConnector.java
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/staging/EISMock.java
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/staging/LegacyConnector.java
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/staging/Stage.java
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/staging/StageDependent.java
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/consumer/Greeter.java
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/provider/Configurator.java
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/provider/Configurable.java
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/RESTConfig.java
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/provider/FacesConfigurationProvider.java
ConfiguringJavaEE/src/main/java/com/abien/configuration/presentation/FacesContextExposer.java
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/provider/ConfiguratorMXBean.java
Diffs:
------
diff -r e603ee8c8cd7 -r 389132f51d2f ConfiguringJavaEE/nb-configuration.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ConfiguringJavaEE/nb-configuration.xml Tue Jan 31 19:39:08 2012 +0100
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-shared-configuration>
+ <!--
+This file contains additional configuration written by modules in the
NetBeans IDE.
+The configuration is intended to be shared among all the users of project and
+therefore it is assumed to be part of version control checkout.
+Without this configuration present, some functionality in the IDE may be
limited or fail altogether.
+-->
+ <properties xmlns="http://www.netbeans.org/ns/maven-properties-data/1">
+ <!--
+Properties that influence various parts of the IDE, especially code
formatting and the like.
+You can copy and paste the single properties, into the pom.xml file and the
IDE will pick them up.
+That way multiple projects can share the same settings (useful for
formatting rules for example).
+Any value defined here will override the pom.xml file value but is only
applicable to the current project.
+-->
+
<org-netbeans-modules-projectapi.jsf_2e_language>Facelets</org-netbeans-modules-projectapi.jsf_2e_language>
+ </properties>
+</project-shared-configuration>
diff -r e603ee8c8cd7 -r 389132f51d2f ConfiguringJavaEE/pom.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ConfiguringJavaEE/pom.xml Tue Jan 31 19:39:08 2012 +0100
@@ -0,0 +1,77 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>com.abien.patterns</groupId>
+ <artifactId>configuring-javaee</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <packaging>war</packaging>
+
+ <name>configuring-javaee</name>
+
+ <properties>
+ <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <netbeans.hint.deploy.server>gfv3ee6</netbeans.hint.deploy.server>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>javax</groupId>
+ <artifactId>javaee-web-api</artifactId>
+ <version>6.0</version>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.3.2</version>
+ <configuration>
+ <source>1.6</source>
+ <target>1.6</target>
+ <compilerArguments>
+ <endorseddirs>${endorsed.dir}</endorseddirs>
+ </compilerArguments>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-war-plugin</artifactId>
+ <version>2.1.1</version>
+ <configuration>
+ <failOnMissingWebXml>false</failOnMissingWebXml>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <version>2.1</version>
+ <executions>
+ <execution>
+ <phase>validate</phase>
+ <goals>
+ <goal>copy</goal>
+ </goals>
+ <configuration>
+
<outputDirectory>${endorsed.dir}</outputDirectory>
+ <silent>true</silent>
+ <artifactItems>
+ <artifactItem>
+ <groupId>javax</groupId>
+
<artifactId>javaee-endorsed-api</artifactId>
+ <version>6.0</version>
+ <type>jar</type>
+ </artifactItem>
+ </artifactItems>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff -r e603ee8c8cd7 -r 389132f51d2f
ConfiguringJavaEE/src/main/java/com/abien/configuration/presentation/Configuration.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++
b/ConfiguringJavaEE/src/main/java/com/abien/configuration/presentation/Configuration.java
Tue Jan 31 19:39:08 2012 +0100
@@ -0,0 +1,23 @@
+package com.abien.configuration.presentation;
+
+import javax.enterprise.inject.Model;
+import javax.enterprise.inject.Produces;
+import javax.faces.application.Application;
+import javax.faces.application.ProjectStage;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.view.facelets.FaceletContext;
+
+/**
+ *
+ * @author adam bien, blog.adam-bien.com
+ */
+@Model
+public class Configuration {
+
+ @Produces
+ public ProjectStage stage(){
+ FacesContext ctx = FacesContext.getCurrentInstance();
+ return ctx.getApplication().getProjectStage();
+ }
+}
diff -r e603ee8c8cd7 -r 389132f51d2f
ConfiguringJavaEE/src/main/java/com/abien/configuration/presentation/Index.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++
b/ConfiguringJavaEE/src/main/java/com/abien/configuration/presentation/Index.java
Tue Jan 31 19:39:08 2012 +0100
@@ -0,0 +1,22 @@
+package com.abien.configuration.presentation;
+
+import javax.enterprise.inject.Model;
+import javax.faces.application.ProjectStage;
+import javax.inject.Inject;
+
+/**
+ *
+ * @author adam bien, blog.adam-bien.com
+ */
+@Model
+public class Index {
+
+ @Inject
+ ProjectStage projectStage;
+
+ public String getProjectStage() {
+ return projectStage.name();
+ }
+
+
+}
diff -r e603ee8c8cd7 -r 389132f51d2f
ConfiguringJavaEE/src/main/webapp/WEB-INF/beans.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ConfiguringJavaEE/src/main/webapp/WEB-INF/beans.xml Tue Jan 31
19:39:08 2012 +0100
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
+</beans>
diff -r e603ee8c8cd7 -r 389132f51d2f
ConfiguringJavaEE/src/main/webapp/WEB-INF/glassfish-web.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ConfiguringJavaEE/src/main/webapp/WEB-INF/glassfish-web.xml Tue
Jan 31 19:39:08 2012 +0100
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish
Application Server 3.1 Servlet 3.0//EN"
"http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
+<glassfish-web-app error-url="">
+ <context-root>/configuring-javaee</context-root>
+ <class-loader delegate="true"/>
+ <jsp-config>
+ <property name="keepgenerated" value="true">
+ <description>Keep a copy of the generated servlet class' java
code.</description>
+ </property>
+ </jsp-config>
+</glassfish-web-app>
diff -r e603ee8c8cd7 -r 389132f51d2f
ConfiguringJavaEE/src/main/webapp/WEB-INF/web.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ConfiguringJavaEE/src/main/webapp/WEB-INF/web.xml Tue Jan 31 19:39:08
2012 +0100
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
+ <context-param>
+ <param-name>javax.faces.PROJECT_STAGE</param-name>
+ <param-value>Development</param-value>
+ </context-param>
+ <servlet>
+ <servlet-name>Faces Servlet</servlet-name>
+ <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
+ <load-on-startup>1</load-on-startup>
+ </servlet>
+ <servlet-mapping>
+ <servlet-name>Faces Servlet</servlet-name>
+ <url-pattern>/faces/*</url-pattern>
+ </servlet-mapping>
+ <session-config>
+ <session-timeout>
+ 30
+ </session-timeout>
+ </session-config>
+ <welcome-file-list>
+ <welcome-file>faces/index.xhtml</welcome-file>
+ </welcome-file-list>
+</web-app>
diff -r e603ee8c8cd7 -r 389132f51d2f
ConfiguringJavaEE/src/main/webapp/index.xhtml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ConfiguringJavaEE/src/main/webapp/index.xhtml Tue Jan 31 19:39:08
2012 +0100
@@ -0,0 +1,12 @@
+<?xml version='1.0' encoding='UTF-8' ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:h="http://java.sun.com/jsf/html">
+ <h:head>
+ <title>Facelet Title</title>
+ </h:head>
+ <h:body>
+ #{index.projectStage}
+ </h:body>
+</html>
+
diff -r 389132f51d2f -r adda5c3a2c44 ConfiguringJavaEE/nb-configuration.xml
--- a/ConfiguringJavaEE/nb-configuration.xml Tue Jan 31 19:39:08 2012 +0100
+++ b/ConfiguringJavaEE/nb-configuration.xml Tue Jan 31 20:14:35 2012 +0100
@@ -14,5 +14,6 @@
Any value defined here will override the pom.xml file value but is only
applicable to the current project.
-->
<org-netbeans-modules-projectapi.jsf_2e_language>Facelets</org-netbeans-modules-projectapi.jsf_2e_language>
+ <netbeans.compile.on.save>all</netbeans.compile.on.save>
</properties>
</project-shared-configuration>
diff -r 389132f51d2f -r adda5c3a2c44
ConfiguringJavaEE/src/main/java/com/abien/configuration/integration/ConnectorManager.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++
b/ConfiguringJavaEE/src/main/java/com/abien/configuration/integration/ConnectorManager.java
Tue Jan 31 20:14:35 2012 +0100
@@ -0,0 +1,25 @@
+package com.abien.configuration.integration;
+
+import com.abien.configuration.presentation.Stage;
+import com.abien.configuration.presentation.StageDependent;
+import javax.enterprise.inject.Produces;
+import javax.faces.application.ProjectStage;
+
+/**
+ *
+ * @author adam bien, blog.adam-bien.com
+ */
+public class ConnectorManager {
+
+
+ @Produces @StageDependent
+ public EISConnector connect(Stage projectStage){
+ switch(projectStage){
+ case Production:
+ return new LegacyConnector();
+ default:
+ return new EISMock();
+ }
+
+ }
+}
diff -r 389132f51d2f -r adda5c3a2c44
ConfiguringJavaEE/src/main/java/com/abien/configuration/integration/EISConnector.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++
b/ConfiguringJavaEE/src/main/java/com/abien/configuration/integration/EISConnector.java
Tue Jan 31 20:14:35 2012 +0100
@@ -0,0 +1,9 @@
+package com.abien.configuration.integration;
+
+/**
+ *
+ * @author adam bien, blog.adam-bien.com
+ */
+public interface EISConnector{
+ public String fetchInfo();
+}
diff -r 389132f51d2f -r adda5c3a2c44
ConfiguringJavaEE/src/main/java/com/abien/configuration/integration/EISMock.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++
b/ConfiguringJavaEE/src/main/java/com/abien/configuration/integration/EISMock.java
Tue Jan 31 20:14:35 2012 +0100
@@ -0,0 +1,14 @@
+package com.abien.configuration.integration;
+
+/**
+ *
+ * @author adam bien, blog.adam-bien.com
+ */
+public class EISMock implements EISConnector{
+
+ @Override
+ public String fetchInfo() {
+ return "From Mock";
+ }
+
+}
diff -r 389132f51d2f -r adda5c3a2c44
ConfiguringJavaEE/src/main/java/com/abien/configuration/integration/LegacyConnector.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++
b/ConfiguringJavaEE/src/main/java/com/abien/configuration/integration/LegacyConnector.java
Tue Jan 31 20:14:35 2012 +0100
@@ -0,0 +1,14 @@
+package com.abien.configuration.integration;
+
+/**
+ *
+ * @author adam bien, blog.adam-bien.com
+ */
+public class LegacyConnector implements EISConnector{
+
+ @Override
+ public String fetchInfo() {
+ return "From Host";
+ }
+
+}
diff -r 389132f51d2f -r adda5c3a2c44
ConfiguringJavaEE/src/main/java/com/abien/configuration/presentation/Configuration.java
---
a/ConfiguringJavaEE/src/main/java/com/abien/configuration/presentation/Configuration.java
Tue Jan 31 19:39:08 2012 +0100
+++
b/ConfiguringJavaEE/src/main/java/com/abien/configuration/presentation/Configuration.java
Tue Jan 31 20:14:35 2012 +0100
@@ -2,11 +2,8 @@
import javax.enterprise.inject.Model;
import javax.enterprise.inject.Produces;
-import javax.faces.application.Application;
import javax.faces.application.ProjectStage;
-import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
-import javax.faces.view.facelets.FaceletContext;
/**
*
@@ -16,8 +13,8 @@
public class Configuration {
@Produces
- public ProjectStage stage(){
+ public Stage stage(){
FacesContext ctx = FacesContext.getCurrentInstance();
- return ctx.getApplication().getProjectStage();
+ return Stage.valueOf(ctx.getApplication().getProjectStage().name());
}
}
diff -r 389132f51d2f -r adda5c3a2c44
ConfiguringJavaEE/src/main/java/com/abien/configuration/presentation/Index.java
---
a/ConfiguringJavaEE/src/main/java/com/abien/configuration/presentation/Index.java
Tue Jan 31 19:39:08 2012 +0100
+++
b/ConfiguringJavaEE/src/main/java/com/abien/configuration/presentation/Index.java
Tue Jan 31 20:14:35 2012 +0100
@@ -1,5 +1,6 @@
package com.abien.configuration.presentation;
+import com.abien.configuration.integration.EISConnector;
import javax.enterprise.inject.Model;
import javax.faces.application.ProjectStage;
import javax.inject.Inject;
@@ -11,11 +12,12 @@
@Model
public class Index {
- @Inject
- ProjectStage projectStage;
+ @Inject @StageDependent
+ EISConnector connector;
- public String getProjectStage() {
- return projectStage.name();
+
+ public String getInfo() {
+ return connector.fetchInfo();
}
diff -r 389132f51d2f -r adda5c3a2c44
ConfiguringJavaEE/src/main/java/com/abien/configuration/presentation/Stage.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++
b/ConfiguringJavaEE/src/main/java/com/abien/configuration/presentation/Stage.java
Tue Jan 31 20:14:35 2012 +0100
@@ -0,0 +1,9 @@
+package com.abien.configuration.presentation;
+
+/**
+ *
+ * @author adam bien, blog.adam-bien.com
+ */
+public enum Stage {
+ Development, UnitTest, SystemTest, Production
+}
diff -r 389132f51d2f -r adda5c3a2c44
ConfiguringJavaEE/src/main/java/com/abien/configuration/presentation/StageDependent.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++
b/ConfiguringJavaEE/src/main/java/com/abien/configuration/presentation/StageDependent.java
Tue Jan 31 20:14:35 2012 +0100
@@ -0,0 +1,19 @@
+package com.abien.configuration.presentation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import javax.inject.Qualifier;
+
+/**
+ *
+ * @author adam bien, blog.adam-bien.com
+ */
+@Qualifier
+@Target({ElementType.METHOD,ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface StageDependent {
+
+
+}
diff -r 389132f51d2f -r adda5c3a2c44
ConfiguringJavaEE/src/main/webapp/index.xhtml
--- a/ConfiguringJavaEE/src/main/webapp/index.xhtml Tue Jan 31 19:39:08
2012 +0100
+++ b/ConfiguringJavaEE/src/main/webapp/index.xhtml Tue Jan 31 20:14:35
2012 +0100
@@ -6,7 +6,7 @@
<title>Facelet Title</title>
</h:head>
<h:body>
- #{index.projectStage}
+ #{index.info}
</h:body>
</html>
diff -r adda5c3a2c44 -r 37e7f8ed6bac
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/consumer/Messenger.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++
b/ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/consumer/Messenger.java
Wed Feb 01 18:41:58 2012 +0100
@@ -0,0 +1,20 @@
+package com.abien.configuration.business.primitives.consumer;
+
+import javax.ejb.Stateless;
+import javax.inject.Inject;
+
+/**
+ *
+ * @author adam bien, blog.adam-bien.com
+ */
+
+@Stateless
+public class Messenger {
+
+ @Inject
+ private String message;
+
+ public String hello(){
+ return message;
+ }
+}
diff -r adda5c3a2c44 -r 37e7f8ed6bac
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/provider/Configuration.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++
b/ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/provider/Configuration.java
Wed Feb 01 18:41:58 2012 +0100
@@ -0,0 +1,144 @@
+package com.abien.configuration.business.primitives.provider;
+
+import java.net.URI;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import javax.annotation.PostConstruct;
+import javax.ejb.Singleton;
+import javax.ejb.Startup;
+import javax.enterprise.inject.Instance;
+import javax.enterprise.inject.spi.InjectionPoint;
+import javax.inject.Inject;
+import javax.ws.rs.*;
+import javax.ws.rs.core.Context;
+import static javax.ws.rs.core.MediaType.TEXT_PLAIN;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriInfo;
+
+/**
+ * User: blog.adam-bien.com
+ * Date: 14.02.11
+ * Time: 19:06
+ */
+@Startup
+@Singleton
+@Path("configuration")
+@Produces(TEXT_PLAIN)
+public class Configuration {
+
+ private Map<String, String> configuration;
+ private Set<String> unconfiguredFields;
+
+ @Inject
+ private Instance<ConfigurationProvider> configurationProvider;
+
+ @PostConstruct
+ public void fetchConfiguration() {
+ this.configuration = new HashMap<String, String>() {{
+ put("message", "highly configurable");
+ put("debug", "false");
+ }};
+ this.unconfiguredFields = new HashSet<String>();
+ mergeWithCustomConfiguration();
+ }
+
+ public boolean doesCustomConfigurationExist() {
+ return !configurationProvider.isUnsatisfied();
+ }
+
+ void mergeWithCustomConfiguration() {
+ for (ConfigurationProvider provider : configurationProvider) {
+ Map<String, String> customConfiguration =
provider.getConfiguration();
+ this.configuration.putAll(customConfiguration);
+ }
+ }
+
+
+ @javax.enterprise.inject.Produces
+ public String getString(InjectionPoint point) {
+ String fieldName = point.getMember().getName();
+ String valueForFieldName = configuration.get(fieldName);
+ if (valueForFieldName == null) {
+ this.unconfiguredFields.add(fieldName);
+ }
+ return valueForFieldName;
+ }
+
+ @javax.enterprise.inject.Produces
+ public long getLong(InjectionPoint point) {
+ String stringValue = getString(point);
+ if (stringValue == null) {
+ return 0;
+ }
+ return Long.parseLong(stringValue);
+ }
+
+ @javax.enterprise.inject.Produces
+ public int getInteger(InjectionPoint point) {
+ String stringValue = getString(point);
+ if (stringValue == null) {
+ return 0;
+ }
+ return Integer.parseInt(stringValue);
+ }
+
+ @javax.enterprise.inject.Produces
+ public boolean getBoolean(InjectionPoint point) {
+ String stringValue = getString(point);
+ if (stringValue == null) {
+ return false;
+ }
+ return Boolean.parseBoolean(stringValue);
+ }
+
+
+ public Set<String> getUnconfiguredFields() {
+ return this.unconfiguredFields;
+ }
+
+
+ @GET
+ @Path("{key}")
+ public String getEntry(@PathParam("key") String key) {
+ return configuration.get(key);
+ }
+
+ @GET
+ public String getConfiguration() {
+ return this.configuration.toString();
+ }
+
+ @PUT
+ @Path("{key}")
+ @Consumes(TEXT_PLAIN)
+ public Response addEntry(@PathParam("key") String key, String value,
@Context UriInfo uriInfo) {
+ Response response = null;
+ if (this.configuration.containsKey(key)) {
+ response = Response.noContent().build();
+ } else {
+ URI uri = uriInfo.getAbsolutePathBuilder().build(key);
+ response = Response.created(uri).build();
+ }
+ this.configuration.put(key, value);
+ return response;
+ }
+
+ @DELETE
+ @Path("{key}")
+ public Response deleteEntry(@PathParam("key") String key) {
+ this.configuration.remove(key);
+ return Response.noContent().build();
+ }
+
+ public void debugEnabled() {
+ this.configuration.put("debug", Boolean.TRUE.toString());
+ }
+
+ public void debugDisabled() {
+ this.configuration.put("debug", Boolean.FALSE.toString());
+ }
+}
+
+
diff -r adda5c3a2c44 -r 37e7f8ed6bac
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/provider/ConfigurationProvider.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++
b/ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/provider/ConfigurationProvider.java
Wed Feb 01 18:41:58 2012 +0100
@@ -0,0 +1,13 @@
+package com.abien.configuration.business.primitives.provider;
+
+import java.util.Map;
+
+/**
+ *
+ * @author blog.adam-bien.com
+ */
+public interface ConfigurationProvider {
+
+ public Map<String,String> getConfiguration();
+
+}
diff -r adda5c3a2c44 -r 37e7f8ed6bac
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/staging/ConnectorManager.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++
b/ConfiguringJavaEE/src/main/java/com/abien/configuration/business/staging/ConnectorManager.java
Wed Feb 01 18:41:58 2012 +0100
@@ -0,0 +1,19 @@
+package com.abien.configuration.business.staging;
+
+import javax.enterprise.inject.Produces;
+
+/**
+ *
+ * @author adam bien, blog.adam-bien.com
+ */
+public class ConnectorManager {
+ @Produces @StageDependent
+ public EISConnector connect(Stage projectStage){
+ switch(projectStage){
+ case Production:
+ return new LegacyConnector();
+ default:
+ return new EISMock();
+ }
+ }
+}
diff -r adda5c3a2c44 -r 37e7f8ed6bac
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/staging/EISConnector.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++
b/ConfiguringJavaEE/src/main/java/com/abien/configuration/business/staging/EISConnector.java
Wed Feb 01 18:41:58 2012 +0100
@@ -0,0 +1,9 @@
+package com.abien.configuration.business.staging;
+
+/**
+ *
+ * @author adam bien, blog.adam-bien.com
+ */
+public interface EISConnector{
+ public String fetchInfo();
+}
diff -r adda5c3a2c44 -r 37e7f8ed6bac
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/staging/EISMock.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++
b/ConfiguringJavaEE/src/main/java/com/abien/configuration/business/staging/EISMock.java
Wed Feb 01 18:41:58 2012 +0100
@@ -0,0 +1,14 @@
+package com.abien.configuration.business.staging;
+
+/**
+ *
+ * @author adam bien, blog.adam-bien.com
+ */
+public class EISMock implements EISConnector{
+
+ @Override
+ public String fetchInfo() {
+ return "From Mock";
+ }
+
+}
diff -r adda5c3a2c44 -r 37e7f8ed6bac
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/staging/LegacyConnector.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++
b/ConfiguringJavaEE/src/main/java/com/abien/configuration/business/staging/LegacyConnector.java
Wed Feb 01 18:41:58 2012 +0100
@@ -0,0 +1,14 @@
+package com.abien.configuration.business.staging;
+
+/**
+ *
+ * @author adam bien, blog.adam-bien.com
+ */
+public class LegacyConnector implements EISConnector{
+
+ @Override
+ public String fetchInfo() {
+ return "From Host";
+ }
+
+}
diff -r adda5c3a2c44 -r 37e7f8ed6bac
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/staging/Stage.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++
b/ConfiguringJavaEE/src/main/java/com/abien/configuration/business/staging/Stage.java
Wed Feb 01 18:41:58 2012 +0100
@@ -0,0 +1,9 @@
+package com.abien.configuration.business.staging;
+
+/**
+ *
+ * @author adam bien, blog.adam-bien.com
+ */
+public enum Stage {
+ Development, UnitTest, SystemTest, Production
+}
diff -r adda5c3a2c44 -r 37e7f8ed6bac
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/staging/StageDependent.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++
b/ConfiguringJavaEE/src/main/java/com/abien/configuration/business/staging/StageDependent.java
Wed Feb 01 18:41:58 2012 +0100
@@ -0,0 +1,16 @@
+package com.abien.configuration.business.staging;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import javax.inject.Qualifier;
+
+/**
+ *
+ * @author adam bien, blog.adam-bien.com
+ */
+@Qualifier
+@Target({ElementType.METHOD,ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface StageDependent {}
diff -r adda5c3a2c44 -r 37e7f8ed6bac
ConfiguringJavaEE/src/main/java/com/abien/configuration/integration/ConnectorManager.java
---
a/ConfiguringJavaEE/src/main/java/com/abien/configuration/integration/ConnectorManager.java
Tue Jan 31 20:14:35 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-package com.abien.configuration.integration;
-
-import com.abien.configuration.presentation.Stage;
-import com.abien.configuration.presentation.StageDependent;
-import javax.enterprise.inject.Produces;
-import javax.faces.application.ProjectStage;
-
-/**
- *
- * @author adam bien, blog.adam-bien.com
- */
-public class ConnectorManager {
-
-
- @Produces @StageDependent
- public EISConnector connect(Stage projectStage){
- switch(projectStage){
- case Production:
- return new LegacyConnector();
- default:
- return new EISMock();
- }
-
- }
-}
diff -r adda5c3a2c44 -r 37e7f8ed6bac
ConfiguringJavaEE/src/main/java/com/abien/configuration/integration/EISConnector.java
---
a/ConfiguringJavaEE/src/main/java/com/abien/configuration/integration/EISConnector.java
Tue Jan 31 20:14:35 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,9 +0,0 @@
-package com.abien.configuration.integration;
-
-/**
- *
- * @author adam bien, blog.adam-bien.com
- */
-public interface EISConnector{
- public String fetchInfo();
-}
diff -r adda5c3a2c44 -r 37e7f8ed6bac
ConfiguringJavaEE/src/main/java/com/abien/configuration/integration/EISMock.java
---
a/ConfiguringJavaEE/src/main/java/com/abien/configuration/integration/EISMock.java
Tue Jan 31 20:14:35 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-package com.abien.configuration.integration;
-
-/**
- *
- * @author adam bien, blog.adam-bien.com
- */
-public class EISMock implements EISConnector{
-
- @Override
- public String fetchInfo() {
- return "From Mock";
- }
-
-}
diff -r adda5c3a2c44 -r 37e7f8ed6bac
ConfiguringJavaEE/src/main/java/com/abien/configuration/integration/LegacyConnector.java
---
a/ConfiguringJavaEE/src/main/java/com/abien/configuration/integration/LegacyConnector.java
Tue Jan 31 20:14:35 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-package com.abien.configuration.integration;
-
-/**
- *
- * @author adam bien, blog.adam-bien.com
- */
-public class LegacyConnector implements EISConnector{
-
- @Override
- public String fetchInfo() {
- return "From Host";
- }
-
-}
diff -r adda5c3a2c44 -r 37e7f8ed6bac
ConfiguringJavaEE/src/main/java/com/abien/configuration/presentation/Configuration.java
---
a/ConfiguringJavaEE/src/main/java/com/abien/configuration/presentation/Configuration.java
Tue Jan 31 20:14:35 2012 +0100
+++
b/ConfiguringJavaEE/src/main/java/com/abien/configuration/presentation/Configuration.java
Wed Feb 01 18:41:58 2012 +0100
@@ -1,8 +1,8 @@
package com.abien.configuration.presentation;
+import com.abien.configuration.business.staging.Stage;
import javax.enterprise.inject.Model;
import javax.enterprise.inject.Produces;
-import javax.faces.application.ProjectStage;
import javax.faces.context.FacesContext;
/**
diff -r adda5c3a2c44 -r 37e7f8ed6bac
ConfiguringJavaEE/src/main/java/com/abien/configuration/presentation/Index.java
---
a/ConfiguringJavaEE/src/main/java/com/abien/configuration/presentation/Index.java
Tue Jan 31 20:14:35 2012 +0100
+++
b/ConfiguringJavaEE/src/main/java/com/abien/configuration/presentation/Index.java
Wed Feb 01 18:41:58 2012 +0100
@@ -1,8 +1,9 @@
package com.abien.configuration.presentation;
-import com.abien.configuration.integration.EISConnector;
+import com.abien.configuration.business.primitives.consumer.Messenger;
+import com.abien.configuration.business.staging.EISConnector;
+import com.abien.configuration.business.staging.StageDependent;
import javax.enterprise.inject.Model;
-import javax.faces.application.ProjectStage;
import javax.inject.Inject;
/**
@@ -14,11 +15,15 @@
@Inject @StageDependent
EISConnector connector;
-
+
+ @Inject
+ Messenger messenger;
public String getInfo() {
return connector.fetchInfo();
}
-
+ public String hello(){
+ return messenger.hello();
+ }
}
diff -r adda5c3a2c44 -r 37e7f8ed6bac
ConfiguringJavaEE/src/main/java/com/abien/configuration/presentation/Stage.java
---
a/ConfiguringJavaEE/src/main/java/com/abien/configuration/presentation/Stage.java
Tue Jan 31 20:14:35 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,9 +0,0 @@
-package com.abien.configuration.presentation;
-
-/**
- *
- * @author adam bien, blog.adam-bien.com
- */
-public enum Stage {
- Development, UnitTest, SystemTest, Production
-}
diff -r adda5c3a2c44 -r 37e7f8ed6bac
ConfiguringJavaEE/src/main/java/com/abien/configuration/presentation/StageDependent.java
---
a/ConfiguringJavaEE/src/main/java/com/abien/configuration/presentation/StageDependent.java
Tue Jan 31 20:14:35 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-package com.abien.configuration.presentation;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import javax.inject.Qualifier;
-
-/**
- *
- * @author adam bien, blog.adam-bien.com
- */
-@Qualifier
-@Target({ElementType.METHOD,ElementType.FIELD})
-@Retention(RetentionPolicy.RUNTIME)
-public @interface StageDependent {
-
-
-}
diff -r adda5c3a2c44 -r 37e7f8ed6bac
ConfiguringJavaEE/src/main/webapp/index.xhtml
--- a/ConfiguringJavaEE/src/main/webapp/index.xhtml Tue Jan 31 20:14:35
2012 +0100
+++ b/ConfiguringJavaEE/src/main/webapp/index.xhtml Wed Feb 01 18:41:58
2012 +0100
@@ -6,7 +6,8 @@
<title>Facelet Title</title>
</h:head>
<h:body>
- #{index.info}
+ #{index.info}<br/>
+ #{index.hello()}
</h:body>
</html>
diff -r 37e7f8ed6bac -r 151362f3ede8
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/consumer/Messenger.java
---
a/ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/consumer/Messenger.java
Wed Feb 01 18:41:58 2012 +0100
+++
b/ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/consumer/Messenger.java
Wed Feb 01 18:58:25 2012 +0100
@@ -14,7 +14,14 @@
@Inject
private String message;
+ @Inject
+ private int repetition;
+
public String hello(){
- return message;
+ StringBuilder builder = new StringBuilder();
+ for (int i = 0; i < repetition; i++) {
+ builder.append(message);
+ }
+ return builder.toString();
}
}
diff -r 37e7f8ed6bac -r 151362f3ede8
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/provider/Configuration.java
---
a/ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/provider/Configuration.java
Wed Feb 01 18:41:58 2012 +0100
+++
b/ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/provider/Configuration.java
Wed Feb 01 18:58:25 2012 +0100
@@ -38,6 +38,7 @@
public void fetchConfiguration() {
this.configuration = new HashMap<String, String>() {{
put("message", "highly configurable");
+ put("repetition", "2");
put("debug", "false");
}};
this.unconfiguredFields = new HashSet<String>();
diff -r 151362f3ede8 -r c6d1c2ebc921
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/consumer/Greeter.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++
b/ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/consumer/Greeter.java
Wed Feb 01 19:50:37 2012 +0100
@@ -0,0 +1,27 @@
+package com.abien.configuration.business.primitives.consumer;
+
+import javax.ejb.Stateless;
+import javax.inject.Inject;
+
+/**
+ *
+ * @author adam bien, blog.adam-bien.com
+ */
+
+@Stateless
+public class Greeter {
+
+ @Inject
+ private String message;
+
+ @Inject
+ private int repetition;
+
+ public String hello(){
+ StringBuilder builder = new StringBuilder();
+ for (int i = 0; i < repetition; i++) {
+ builder.append(message);
+ }
+ return builder.toString();
+ }
+}
diff -r 151362f3ede8 -r c6d1c2ebc921
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/consumer/Messenger.java
---
a/ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/consumer/Messenger.java
Wed Feb 01 18:58:25 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-package com.abien.configuration.business.primitives.consumer;
-
-import javax.ejb.Stateless;
-import javax.inject.Inject;
-
-/**
- *
- * @author adam bien, blog.adam-bien.com
- */
-
-@Stateless
-public class Messenger {
-
- @Inject
- private String message;
-
- @Inject
- private int repetition;
-
- public String hello(){
- StringBuilder builder = new StringBuilder();
- for (int i = 0; i < repetition; i++) {
- builder.append(message);
- }
- return builder.toString();
- }
-}
diff -r 151362f3ede8 -r c6d1c2ebc921
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/provider/Configuration.java
---
a/ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/provider/Configuration.java
Wed Feb 01 18:58:25 2012 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,145 +0,0 @@
-package com.abien.configuration.business.primitives.provider;
-
-import java.net.URI;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-import javax.annotation.PostConstruct;
-import javax.ejb.Singleton;
-import javax.ejb.Startup;
-import javax.enterprise.inject.Instance;
-import javax.enterprise.inject.spi.InjectionPoint;
-import javax.inject.Inject;
-import javax.ws.rs.*;
-import javax.ws.rs.core.Context;
-import static javax.ws.rs.core.MediaType.TEXT_PLAIN;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.UriInfo;
-
-/**
- * User: blog.adam-bien.com
- * Date: 14.02.11
- * Time: 19:06
- */
-@Startup
-@Singleton
-@Path("configuration")
-@Produces(TEXT_PLAIN)
-public class Configuration {
-
- private Map<String, String> configuration;
- private Set<String> unconfiguredFields;
-
- @Inject
- private Instance<ConfigurationProvider> configurationProvider;
-
- @PostConstruct
- public void fetchConfiguration() {
- this.configuration = new HashMap<String, String>() {{
- put("message", "highly configurable");
- put("repetition", "2");
- put("debug", "false");
- }};
- this.unconfiguredFields = new HashSet<String>();
- mergeWithCustomConfiguration();
- }
-
- public boolean doesCustomConfigurationExist() {
- return !configurationProvider.isUnsatisfied();
- }
-
- void mergeWithCustomConfiguration() {
- for (ConfigurationProvider provider : configurationProvider) {
- Map<String, String> customConfiguration =
provider.getConfiguration();
- this.configuration.putAll(customConfiguration);
- }
- }
-
-
- @javax.enterprise.inject.Produces
- public String getString(InjectionPoint point) {
- String fieldName = point.getMember().getName();
- String valueForFieldName = configuration.get(fieldName);
- if (valueForFieldName == null) {
- this.unconfiguredFields.add(fieldName);
- }
- return valueForFieldName;
- }
-
- @javax.enterprise.inject.Produces
- public long getLong(InjectionPoint point) {
- String stringValue = getString(point);
- if (stringValue == null) {
- return 0;
- }
- return Long.parseLong(stringValue);
- }
-
- @javax.enterprise.inject.Produces
- public int getInteger(InjectionPoint point) {
- String stringValue = getString(point);
- if (stringValue == null) {
- return 0;
- }
- return Integer.parseInt(stringValue);
- }
-
- @javax.enterprise.inject.Produces
- public boolean getBoolean(InjectionPoint point) {
- String stringValue = getString(point);
- if (stringValue == null) {
- return false;
- }
- return Boolean.parseBoolean(stringValue);
- }
-
-
- public Set<String> getUnconfiguredFields() {
- return this.unconfiguredFields;
- }
-
-
- @GET
- @Path("{key}")
- public String getEntry(@PathParam("key") String key) {
- return configuration.get(key);
- }
-
- @GET
- public String getConfiguration() {
- return this.configuration.toString();
- }
-
- @PUT
- @Path("{key}")
- @Consumes(TEXT_PLAIN)
- public Response addEntry(@PathParam("key") String key, String value,
@Context UriInfo uriInfo) {
- Response response = null;
- if (this.configuration.containsKey(key)) {
- response = Response.noContent().build();
- } else {
- URI uri = uriInfo.getAbsolutePathBuilder().build(key);
- response = Response.created(uri).build();
- }
- this.configuration.put(key, value);
- return response;
- }
-
- @DELETE
- @Path("{key}")
- public Response deleteEntry(@PathParam("key") String key) {
- this.configuration.remove(key);
- return Response.noContent().build();
- }
-
- public void debugEnabled() {
- this.configuration.put("debug", Boolean.TRUE.toString());
- }
-
- public void debugDisabled() {
- this.configuration.put("debug", Boolean.FALSE.toString());
- }
-}
-
-
diff -r 151362f3ede8 -r c6d1c2ebc921
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/provider/Configurator.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++
b/ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/provider/Configurator.java
Wed Feb 01 19:50:37 2012 +0100
@@ -0,0 +1,145 @@
+package com.abien.configuration.business.primitives.provider;
+
+import java.net.URI;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import javax.annotation.PostConstruct;
+import javax.ejb.Singleton;
+import javax.ejb.Startup;
+import javax.enterprise.inject.Instance;
+import javax.enterprise.inject.spi.InjectionPoint;
+import javax.inject.Inject;
+import javax.ws.rs.*;
+import javax.ws.rs.core.Context;
+import static javax.ws.rs.core.MediaType.TEXT_PLAIN;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriInfo;
+
+/**
+ * User: blog.adam-bien.com
+ * Date: 14.02.11
+ * Time: 19:06
+ */
+@Startup
+@Singleton
+@Path("configuration")
+@Produces(TEXT_PLAIN)
+public class Configurator {
+
+ private Map<String, String> configuration;
+ private Set<String> unconfiguredFields;
+
+ @Inject
+ private Instance<ConfigurationProvider> configurationProvider;
+
+ @PostConstruct
+ public void fetchConfiguration() {
+ this.configuration = new HashMap<String, String>() {{
+ put("message", "highly configurable");
+ put("repetition", "2");
+ put("debug", "false");
+ }};
+ this.unconfiguredFields = new HashSet<String>();
+ mergeWithCustomConfiguration();
+ }
+
+ public boolean doesCustomConfigurationExist() {
+ return !configurationProvider.isUnsatisfied();
+ }
+
+ void mergeWithCustomConfiguration() {
+ for (ConfigurationProvider provider : configurationProvider) {
+ Map<String, String> customConfiguration =
provider.getConfiguration();
+ this.configuration.putAll(customConfiguration);
+ }
+ }
+
+
+ @javax.enterprise.inject.Produces
+ public String getString(InjectionPoint point) {
+ String fieldName = point.getMember().getName();
+ String valueForFieldName = configuration.get(fieldName);
+ if (valueForFieldName == null) {
+ this.unconfiguredFields.add(fieldName);
+ }
+ return valueForFieldName;
+ }
+
+ @javax.enterprise.inject.Produces
+ public long getLong(InjectionPoint point) {
+ String stringValue = getString(point);
+ if (stringValue == null) {
+ return 0;
+ }
+ return Long.parseLong(stringValue);
+ }
+
+ @javax.enterprise.inject.Produces
+ public int getInteger(InjectionPoint point) {
+ String stringValue = getString(point);
+ if (stringValue == null) {
+ return 0;
+ }
+ return Integer.parseInt(stringValue);
+ }
+
+ @javax.enterprise.inject.Produces
+ public boolean getBoolean(InjectionPoint point) {
+ String stringValue = getString(point);
+ if (stringValue == null) {
+ return false;
+ }
+ return Boolean.parseBoolean(stringValue);
+ }
+
+
+ public Set<String> getUnconfiguredFields() {
+ return this.unconfiguredFields;
+ }
+
+
+ @GET
+ @Path("{key}")
+ public String getEntry(@PathParam("key") String key) {
+ return configuration.get(key);
+ }
+
+ @GET
+ public String getConfiguration() {
+ return this.configuration.toString();
+ }
+
+ @PUT
+ @Path("{key}")
+ @Consumes(TEXT_PLAIN)
+ public Response addEntry(@PathParam("key") String key, String value,
@Context UriInfo uriInfo) {
+ Response response = null;
+ if (this.configuration.containsKey(key)) {
+ response = Response.noContent().build();
+ } else {
+ URI uri = uriInfo.getAbsolutePathBuilder().build(key);
+ response = Response.created(uri).build();
+ }
+ this.configuration.put(key, value);
+ return response;
+ }
+
+ @DELETE
+ @Path("{key}")
+ public Response deleteEntry(@PathParam("key") String key) {
+ this.configuration.remove(key);
+ return Response.noContent().build();
+ }
+
+ public void debugEnabled() {
+ this.configuration.put("debug", Boolean.TRUE.toString());
+ }
+
+ public void debugDisabled() {
+ this.configuration.put("debug", Boolean.FALSE.toString());
+ }
+}
+
+
diff -r 151362f3ede8 -r c6d1c2ebc921
ConfiguringJavaEE/src/main/java/com/abien/configuration/presentation/Index.java
---
a/ConfiguringJavaEE/src/main/java/com/abien/configuration/presentation/Index.java
Wed Feb 01 18:58:25 2012 +0100
+++
b/ConfiguringJavaEE/src/main/java/com/abien/configuration/presentation/Index.java
Wed Feb 01 19:50:37 2012 +0100
@@ -1,6 +1,6 @@
package com.abien.configuration.presentation;
-import com.abien.configuration.business.primitives.consumer.Messenger;
+import com.abien.configuration.business.primitives.consumer.Greeter;
import com.abien.configuration.business.staging.EISConnector;
import com.abien.configuration.business.staging.StageDependent;
import javax.enterprise.inject.Model;
@@ -17,7 +17,7 @@
EISConnector connector;
@Inject
- Messenger messenger;
+ Greeter messenger;
public String getInfo() {
return connector.fetchInfo();
diff -r c6d1c2ebc921 -r 4d7a3357bdaf
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/consumer/Greeter.java
---
a/ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/consumer/Greeter.java
Wed Feb 01 19:50:37 2012 +0100
+++
b/ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/consumer/Greeter.java
Wed Feb 01 20:04:18 2012 +0100
@@ -1,5 +1,6 @@
package com.abien.configuration.business.primitives.consumer;
+import com.abien.configuration.business.primitives.provider.Configurable;
import javax.ejb.Stateless;
import javax.inject.Inject;
@@ -11,7 +12,7 @@
@Stateless
public class Greeter {
- @Inject
+ @Inject @Configurable("greetings")
private String message;
@Inject
diff -r c6d1c2ebc921 -r 4d7a3357bdaf
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/provider/Configurable.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++
b/ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/provider/Configurable.java
Wed Feb 01 20:04:18 2012 +0100
@@ -0,0 +1,16 @@
+package com.abien.configuration.business.primitives.provider;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ *
+ * @author adam bien, blog.adam-bien.com
+ */
+@Target(ElementType.FIELD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Configurable {
+ String value();
+}
diff -r c6d1c2ebc921 -r 4d7a3357bdaf
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/provider/Configurator.java
---
a/ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/provider/Configurator.java
Wed Feb 01 19:50:37 2012 +0100
+++
b/ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/provider/Configurator.java
Wed Feb 01 20:04:18 2012 +0100
@@ -9,6 +9,7 @@
import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.enterprise.inject.Instance;
+import javax.enterprise.inject.spi.AnnotatedField;
import javax.enterprise.inject.spi.InjectionPoint;
import javax.inject.Inject;
import javax.ws.rs.*;
@@ -37,7 +38,8 @@
@PostConstruct
public void fetchConfiguration() {
this.configuration = new HashMap<String, String>() {{
- put("message", "highly configurable");
+ put("message", "-configurable-");
+ put("greetings", "-highly configurable-");
put("repetition", "2");
put("debug", "false");
}};
@@ -59,13 +61,24 @@
@javax.enterprise.inject.Produces
public String getString(InjectionPoint point) {
- String fieldName = point.getMember().getName();
+ String fieldName = obtainConfigurableName(point);
String valueForFieldName = configuration.get(fieldName);
if (valueForFieldName == null) {
this.unconfiguredFields.add(fieldName);
}
return valueForFieldName;
}
+
+ String obtainConfigurableName(InjectionPoint ip){
+ AnnotatedField field = (AnnotatedField) ip.getAnnotated();
+ Configurable configurable = field.getAnnotation(Configurable.class);
+ if(configurable != null){
+ return configurable.value();
+ }else{
+ return ip.getMember().getName();
+ }
+
+ }
@javax.enterprise.inject.Produces
public long getLong(InjectionPoint point) {
diff -r 4d7a3357bdaf -r e3494abda147
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/consumer/Greeter.java
---
a/ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/consumer/Greeter.java
Wed Feb 01 20:04:18 2012 +0100
+++
b/ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/consumer/Greeter.java
Thu Feb 02 15:01:03 2012 +0100
@@ -1,6 +1,7 @@
package com.abien.configuration.business.primitives.consumer;
import com.abien.configuration.business.primitives.provider.Configurable;
+import com.abien.configuration.business.staging.StageDependent;
import javax.ejb.Stateless;
import javax.inject.Inject;
@@ -14,7 +15,10 @@
@Inject @Configurable("greetings")
private String message;
-
+
+ @Inject @StageDependent
+ private String stagedMessage;
+
@Inject
private int repetition;
@@ -25,4 +29,8 @@
}
return builder.toString();
}
+
+ public String stagedMessage(){
+ return stagedMessage;
+ }
}
diff -r 4d7a3357bdaf -r e3494abda147
ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/provider/Configurator.java
---
a/ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/provider/Configurator.java
Wed Feb 01 20:04:18 2012 +0100
+++
b/ConfiguringJavaEE/src/main/java/com/abien/configuration/business/primitives/provider/Configurator.java
Thu Feb 02 15:01:03 2012 +0100
@@ -1,5 +1,7 @@
package com.abien.configuration.business.primitives.provider;
+import com.abien.configuration.business.staging.Stage;
+import com.abien.configuration.business.staging.StageDependent;
import java.net.URI;
import java.util.HashMap;
import java.util.HashSet;
@@ -29,17 +31,19 @@
@Produces(TEXT_PLAIN)
public class Configurator {
- private Map<String, String> configuration;
private Set<String> unconfiguredFields;
@Inject
private Instance<ConfigurationProvider> configurationProvider;
+
+ private Map<String, String> configuration;
@PostConstruct
public void fetchConfiguration() {
this.configuration = new HashMap<String, String>() {{
put("message", "-configurable-");
put("greetings", "-highly configurable-");
+ put("Development.stagedMessage", "Development: -highly
configurable-");
put("repetition", "2");
put("debug", "false");
}};
@@ -62,6 +66,17 @@
@javax.enterprise.inject.Produces
public String getString(InjectionPoint point) {
String fieldName = obtainConfigurableName(point);
+ return getValueForKey(fieldName);
+ }
+
+ @javax.enterprise.inject.Produces @StageDependent
+ public String getString(InjectionPoint point,Stage stage) {
+ String fieldName = obtainConfigurableName(point);
+
[truncated due to length]
|
[javaee-patterns~hg:306] JMX exposure works |
abien | 02/03/2012 |





