[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
  • Mysql
  • Glassfish
  • Jruby
  • Rails
  • Nblogo
Terms of Use; Privacy Policy;
© 2010, Oracle Corporation and/or its affiliates
(revision 20120518.3c65429)
 
 
Close
loading
Please Confirm
Close