You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by ag...@apache.org on 2007/07/10 19:03:02 UTC

svn commit: r555007 - in /roller/trunk/apps/planet/src/java/org/apache/roller/planet: business/GuicePlanetProvider.java business/PlanetFactory.java config/planet.properties

Author: agilliland
Date: Tue Jul 10 10:02:57 2007
New Revision: 555007

URL: http://svn.apache.org/viewvc?view=rev&rev=555007
Log:
One final change to make planet backend fully pluggable.  We want to make it possible for people to plugin their own PlanetProvider classes so we introduce a 'planet.provider.class' into the planet.properties config and setup the PlanetFactory.bootstrap() method to use the configured provider.

Modified:
    roller/trunk/apps/planet/src/java/org/apache/roller/planet/business/GuicePlanetProvider.java
    roller/trunk/apps/planet/src/java/org/apache/roller/planet/business/PlanetFactory.java
    roller/trunk/apps/planet/src/java/org/apache/roller/planet/config/planet.properties

Modified: roller/trunk/apps/planet/src/java/org/apache/roller/planet/business/GuicePlanetProvider.java
URL: http://svn.apache.org/viewvc/roller/trunk/apps/planet/src/java/org/apache/roller/planet/business/GuicePlanetProvider.java?view=diff&rev=555007&r1=555006&r2=555007
==============================================================================
--- roller/trunk/apps/planet/src/java/org/apache/roller/planet/business/GuicePlanetProvider.java (original)
+++ roller/trunk/apps/planet/src/java/org/apache/roller/planet/business/GuicePlanetProvider.java Tue Jul 10 10:02:57 2007
@@ -21,6 +21,7 @@
 import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.Module;
+import org.apache.roller.planet.config.PlanetConfig;
 
 
 /**
@@ -33,6 +34,28 @@
     
     // maintain our own singleton instance of Planet
     private Planet planetInstance = null;
+    
+    
+    /**
+     * Instantiate a new GuicePlanetProvider using default guice module 
+     * configured in PlanetConfig via 'guice.backend.module' property.
+     */
+    public GuicePlanetProvider() {
+        
+        String moduleClassname = PlanetConfig.getProperty("guice.backend.module");
+        if(moduleClassname == null) {
+            throw new NullPointerException("unable to lookup default guice module via property 'guice.backend.module'");
+        }
+        
+        try {
+            Class moduleClass = Class.forName(moduleClassname);
+            Module module = (Module)moduleClass.newInstance();
+            injector = Guice.createInjector(module);
+        } catch (Throwable e) {                
+            // Fatal misconfiguration, cannot recover
+            throw new RuntimeException("Error instantiating backend module " + moduleClassname, e);
+        }
+    }
     
     
     /**

Modified: roller/trunk/apps/planet/src/java/org/apache/roller/planet/business/PlanetFactory.java
URL: http://svn.apache.org/viewvc/roller/trunk/apps/planet/src/java/org/apache/roller/planet/business/PlanetFactory.java?view=diff&rev=555007&r1=555006&r2=555007
==============================================================================
--- roller/trunk/apps/planet/src/java/org/apache/roller/planet/business/PlanetFactory.java (original)
+++ roller/trunk/apps/planet/src/java/org/apache/roller/planet/business/PlanetFactory.java Tue Jul 10 10:02:57 2007
@@ -79,14 +79,22 @@
             throw new IllegalStateException("Cannot bootstrap until application has been properly prepared");
         }
         
-        // default provider is Guice, so lookup our module from PlanetConfig
-        String guiceModule = PlanetConfig.getProperty("guice.backend.module");
-        
-        // instantiate guice provider using the configured module
-        PlanetProvider guiceProvider = new GuicePlanetProvider(guiceModule);
-        
-        // finish things off by calling bootstrap() with our guice provider
-        bootstrap(guiceProvider);
+        // lookup our default provider and instantiate it
+        PlanetProvider defaultProvider;
+        String providerClassname = PlanetConfig.getProperty("planet.provider.class");
+        if(providerClassname != null) {
+            try {
+                Class providerClass = Class.forName(providerClassname);
+                defaultProvider = (PlanetProvider) providerClass.newInstance();
+            } catch (Exception ex) {
+                throw new BootstrapException("Error instantiating default provider: "+providerClassname, ex);
+            }
+        } else {
+            throw new NullPointerException("No provider specified in config property 'planet.provider.class'");
+        }
+
+        // now just bootstrap using our default provider
+        bootstrap(defaultProvider);
     }
     
     

Modified: roller/trunk/apps/planet/src/java/org/apache/roller/planet/config/planet.properties
URL: http://svn.apache.org/viewvc/roller/trunk/apps/planet/src/java/org/apache/roller/planet/config/planet.properties?view=diff&rev=555007&r1=555006&r2=555007
==============================================================================
--- roller/trunk/apps/planet/src/java/org/apache/roller/planet/config/planet.properties (original)
+++ roller/trunk/apps/planet/src/java/org/apache/roller/planet/config/planet.properties Tue Jul 10 10:02:57 2007
@@ -70,6 +70,9 @@
 # Optional properties
 
 # Pluggable backend
+planet.provider.class=org.apache.roller.planet.business.GuicePlanetProvider
+
+# default guice module
 guice.backend.module=org.apache.roller.planet.business.jpa.JPAPlanetModule
 
 # Number of Technorati queries allowed per day