You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by sn...@apache.org on 2007/06/23 17:27:59 UTC

svn commit: r550055 [3/4] - in /roller/trunk: apps/planet/ apps/planet/nbproject/ apps/planet/src/java/org/apache/roller/planet/business/ apps/planet/src/java/org/apache/roller/planet/business/hibernate/ apps/planet/src/java/org/apache/roller/planet/bu...

Modified: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPABookmarkManagerImpl.java
URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPABookmarkManagerImpl.java?view=diff&rev=550055&r1=550054&r2=550055
==============================================================================
--- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPABookmarkManagerImpl.java (original)
+++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPABookmarkManagerImpl.java Sat Jun 23 08:27:55 2007
@@ -29,7 +29,7 @@
 import org.apache.roller.weblogger.business.jpa.JPAPersistenceStrategy;
 import org.apache.roller.weblogger.WebloggerException;
 import org.apache.roller.weblogger.business.BookmarkManager;
-import org.apache.roller.weblogger.business.RollerFactory;
+import org.apache.roller.weblogger.business.Roller;
 import org.apache.roller.weblogger.pojos.WeblogBookmark;
 import org.apache.roller.weblogger.pojos.WeblogBookmarkFolder;
 import org.apache.roller.weblogger.pojos.Weblog;
@@ -43,9 +43,11 @@
  * Created on May 31, 2006, 3:49 PM
  *
  */
+@com.google.inject.Singleton
 public class JPABookmarkManagerImpl implements BookmarkManager {
     
     private JPAPersistenceStrategy strategy;
+    private Roller roller = null;
     
     /**
      * The logger instance for this class.
@@ -56,10 +58,10 @@
     /**
      * Creates a new instance of JPABookmarkManagerImpl
      */
-    public JPABookmarkManagerImpl 
-            (JPAPersistenceStrategy strategy) {
+   @com.google.inject.Inject
+   protected JPABookmarkManagerImpl(Roller roller, JPAPersistenceStrategy strategy) {
         log.debug("Instantiating JPA Bookmark Manager");
-
+        this.roller = roller;
         this.strategy = strategy;
     }
 
@@ -73,7 +75,7 @@
         this.strategy.store(bookmark);
 
         // update weblog last modified date (date is updated by saveWebsite())
-        RollerFactory.getRoller().getUserManager().
+        roller.getUserManager().
             saveWebsite(bookmark.getWebsite());
     }
 
@@ -87,7 +89,7 @@
         //Remove the bookmark from its parent folder
         bookmark.getFolder().getBookmarks().remove(bookmark);
         // update weblog last modified date.  date updated by saveWebsite()
-        RollerFactory.getRoller().getUserManager()
+        roller.getUserManager()
                 .saveWebsite(bookmark.getWebsite());
     }
 
@@ -109,7 +111,7 @@
         this.strategy.store(folder);
 
         // update weblog last modified date.  date updated by saveWebsite()
-        RollerFactory.getRoller().getUserManager().saveWebsite(folder.getWebsite());
+        roller.getUserManager().saveWebsite(folder.getWebsite());
     }
 
     public void removeFolder(WeblogBookmarkFolder folder) throws WebloggerException {
@@ -120,7 +122,7 @@
         }
 
         // update weblog last modified date.  date updated by saveWebsite()
-        RollerFactory.getRoller().getUserManager().
+        roller.getUserManager().
             saveWebsite(folder.getWebsite());
     }
     

Modified: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAPersistenceStrategy.java
URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAPersistenceStrategy.java?view=diff&rev=550055&r1=550054&r2=550055
==============================================================================
--- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAPersistenceStrategy.java (original)
+++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAPersistenceStrategy.java Sat Jun 23 08:27:55 2007
@@ -1,4 +1,3 @@
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  *  contributor license agreements.  The ASF licenses this file to You
@@ -20,7 +19,6 @@
 package org.apache.roller.weblogger.business.jpa;
 
 import java.util.Collection;
-import java.util.Properties;
 import java.util.Iterator;
 import java.util.Enumeration;
 import java.util.Properties;
@@ -31,20 +29,23 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.weblogger.WebloggerException;
+import org.apache.roller.weblogger.config.RollerConfig;
 import javax.persistence.EntityManagerFactory;
 import javax.persistence.EntityManager;
 import javax.persistence.FlushModeType;
 import javax.persistence.Persistence;
 import javax.persistence.PersistenceException;
 import javax.persistence.Query;
+import org.apache.roller.weblogger.business.DatabaseProvider;
 
 
 /**
- * JPAPersistenceStrategy is responsible for the lowest-level interaction with
- * the JPA API.
+ * Responsible for the lowest-level interaction with the JPA API.
  */
-// TODO handle PersistenceExceptions!
+@com.google.inject.Singleton
 public class JPAPersistenceStrategy {
+    private static Log logger = 
+        LogFactory.getFactory().getInstance(JPAPersistenceStrategy.class);
     
     /**
      * The thread local EntityManager.
@@ -56,99 +57,62 @@
      */
     private EntityManagerFactory emf = null;
     
-    /**
-     * The logger instance for this class.
-     */
-    private static Log logger = LogFactory.getFactory().getInstance(
-            JPAPersistenceStrategy.class);
             
     /**
      * Construct by finding JPA EntityManagerFactory.
      * @throws org.apache.roller.WebloggerException on any error
      */
-    public JPAPersistenceStrategy(
-            String puName,             
-            String jndiName, 
-            Properties properties) throws WebloggerException { 
-                
-        // set strategy used by Datamapper
-        // You can configure JPA completely via the JPAEMF.properties file
+    @com.google.inject.Inject
+    protected JPAPersistenceStrategy(DatabaseProvider dbProvider) throws WebloggerException { 
+        
+        // Pull in any properties defined in JMAEMF.properties config file
         Properties emfProps = loadPropertiesFromResourceName(
            "JPAEMF.properties", getContextClassLoader());
                 
-        // Add additional properties passed in 
-        Enumeration keys = properties.keys();
+        // Add all OpenJPA and Toplinks properties found in RollerConfig
+        Enumeration keys = RollerConfig.keys(); 
         while (keys.hasMoreElements()) {
             String key = (String)keys.nextElement();
-            String value = properties.getProperty(key);
-            logger.info(key + ": " + value);
-            emfProps.setProperty(key, value);
-        }
-        
-        emfProps.setProperty("openjpa.ConnectionFactoryName", jndiName);
-
-        try {
-            this.emf = Persistence.createEntityManagerFactory(puName, emfProps);
-        } catch (PersistenceException pe) {
-            logger.error("ERROR: creating entity manager", pe);
-            throw new WebloggerException(pe);
+            if (key.startsWith("openjpa.") || key.startsWith("toplink.")) {
+                String value = RollerConfig.getProperty(key);
+                logger.info(key + ": " + value);
+                emfProps.setProperty(key, value);
+            }
         }
-    }    
         
-    /**
-     * Construct by finding JPA EntityManagerFactory.
-     * @throws org.apache.roller.WebloggerException on any error
-     */
-    public JPAPersistenceStrategy(
-            String puName,            
-            String driverClass,
-            String connectonUrl,
-            String username,
-            String password,
-            Properties properties) throws WebloggerException {   
-        
-        logger.info("driverClass:    " + driverClass);
-        logger.info("connectionURL:  " + connectonUrl);
-        logger.info("username:       " + username);         
-
-        // set strategy used by Datamapper
-        // You can configure JPA completely via the JPAEMF.properties file
-        Properties emfProps = loadPropertiesFromResourceName(
-           "JPAEMF.properties", getContextClassLoader());
-        
-        // Add additional properties passed in 
-        Enumeration keys = properties.keys();
-        while (keys.hasMoreElements()) {
-            String key = (String)keys.nextElement();
-            String value = properties.getProperty(key);
-            logger.info(key + ": " + value);
-            emfProps.setProperty(key, value);
+        if (dbProvider.getType() == DatabaseProvider.ConfigurationType.JNDI_NAME) { 
+            // We're doing JNDI, so set OpenJPA JNDI name property
+            String jndiName = "java:comp/env/" + dbProvider.getJndiName();
+            emfProps.setProperty("openjpa.ConnectionFactoryName", jndiName);
+            
+        } else {
+            // So set JDBD properties for OpenJPA
+            emfProps.setProperty("openjpa.ConnectionDriverName",     dbProvider.getJdbcDriverClass());
+            emfProps.setProperty("openjpa.ConnectionURL",            dbProvider.getJdbcConnectionURL());
+            emfProps.setProperty("openjpa.ConnectionUserName",       dbProvider.getJdbcUsername());
+            emfProps.setProperty("openjpa.ConnectionPassword",       dbProvider.getJdbcPassword()); 
+
+            // And Toplink JPA
+            emfProps.setProperty("toplink.jdbc.driver",              dbProvider.getJdbcDriverClass());
+            emfProps.setProperty("toplink.jdbc.url",                 dbProvider.getJdbcConnectionURL());
+            emfProps.setProperty("toplink.jdbc.user",                dbProvider.getJdbcUsername());
+            emfProps.setProperty("toplink.jdbc.password",            dbProvider.getJdbcPassword());
+
+            // And Hibernate JPA
+            emfProps.setProperty("hibernate.connection.driver_class",dbProvider.getJdbcDriverClass());
+            emfProps.setProperty("hibernate.connection.url",         dbProvider.getJdbcConnectionURL());
+            emfProps.setProperty("hibernate.connection.username",    dbProvider.getJdbcUsername());
+            emfProps.setProperty("hibernate.connection.password",    dbProvider.getJdbcPassword()); 
         }
         
-        // Try to please all the players
-        emfProps.setProperty("openjpa.ConnectionDriverName",     driverClass);
-        emfProps.setProperty("openjpa.ConnectionURL",            connectonUrl);
-        emfProps.setProperty("openjpa.ConnectionUserName",       username);
-        emfProps.setProperty("openjpa.ConnectionPassword",       password); 
-
-        emfProps.setProperty("toplink.jdbc.driver",              driverClass);
-        emfProps.setProperty("toplink.jdbc.url",                 connectonUrl);
-        emfProps.setProperty("toplink.jdbc.user",                username);
-        emfProps.setProperty("toplink.jdbc.password",            password);
-
-        emfProps.setProperty("hibernate.connection.driver_class",driverClass);
-        emfProps.setProperty("hibernate.connection.url",         connectonUrl);
-        emfProps.setProperty("hibernate.connection.username",    username);
-        emfProps.setProperty("hibernate.connection.password",    password); 
-        
         try {
-            this.emf = Persistence.createEntityManagerFactory(puName, emfProps);
+            this.emf = Persistence.createEntityManagerFactory("RollerPU", emfProps);
         } catch (PersistenceException pe) {
             logger.error("ERROR: creating entity manager", pe);
             throw new WebloggerException(pe);
         }
-    }    
-        
+    }
+                        
     /**
      * Flush changes to the datastore, commit transaction, release em.
      * @throws org.apache.roller.WebloggerException on any error

Modified: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAPingQueueManagerImpl.java
URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAPingQueueManagerImpl.java?view=diff&rev=550055&r1=550054&r2=550055
==============================================================================
--- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAPingQueueManagerImpl.java (original)
+++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAPingQueueManagerImpl.java Sat Jun 23 08:27:55 2007
@@ -27,6 +27,7 @@
 import org.apache.roller.weblogger.business.jpa.JPAPersistenceStrategy;
 
 import org.apache.roller.weblogger.WebloggerException;
+import org.apache.roller.weblogger.business.Roller;
 
 import org.apache.roller.weblogger.business.pings.PingQueueManager;
 import org.apache.roller.weblogger.pojos.AutoPing;
@@ -38,6 +39,7 @@
  * Created on May 28, 2006, 4:11 PM
  *
  */
+@com.google.inject.Singleton
 public class JPAPingQueueManagerImpl implements PingQueueManager {
 
     private static Log log = LogFactory.getLog(
@@ -45,12 +47,14 @@
 
     /** The strategy for this manager. */
     private JPAPersistenceStrategy strategy;
+    private Roller roller = null;
 
     /**
      * Creates a new instance of JPAPingQueueManagerImpl
      */
-    public JPAPingQueueManagerImpl(
-            JPAPersistenceStrategy strategy) {
+    @com.google.inject.Inject
+    protected JPAPingQueueManagerImpl(Roller roller, JPAPersistenceStrategy strategy) {
+        this.roller = roller;
         this.strategy =  strategy;
     }
 

Modified: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAPingTargetManagerImpl.java
URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAPingTargetManagerImpl.java?view=diff&rev=550055&r1=550054&r2=550055
==============================================================================
--- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAPingTargetManagerImpl.java (original)
+++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAPingTargetManagerImpl.java Sat Jun 23 08:27:55 2007
@@ -31,6 +31,7 @@
 import org.apache.roller.weblogger.business.jpa.JPAPersistenceStrategy;
 
 import org.apache.roller.weblogger.WebloggerException;
+import org.apache.roller.weblogger.business.Roller;
 
 import org.apache.roller.weblogger.business.pings.PingTargetManager;
 import org.apache.roller.weblogger.pojos.PingTarget;
@@ -42,6 +43,7 @@
  * Created on May 29, 2006, 2:24 PM
  *
  */
+@com.google.inject.Singleton
 public class JPAPingTargetManagerImpl implements PingTargetManager {
     
     /** The logger instance for this class. */
@@ -49,9 +51,11 @@
         JPAPingTargetManagerImpl.class);
 
     private JPAPersistenceStrategy strategy;
+    private Roller roller = null;
     
-    public JPAPingTargetManagerImpl(
-            JPAPersistenceStrategy strategy) {
+    @com.google.inject.Inject
+    protected JPAPingTargetManagerImpl(Roller roller, JPAPersistenceStrategy strategy) {
+        this.roller = roller;
         this.strategy = strategy;
     }
 

Modified: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAPropertiesManagerImpl.java
URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAPropertiesManagerImpl.java?view=diff&rev=550055&r1=550054&r2=550055
==============================================================================
--- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAPropertiesManagerImpl.java (original)
+++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAPropertiesManagerImpl.java Sat Jun 23 08:27:55 2007
@@ -36,6 +36,7 @@
 import org.apache.roller.weblogger.config.runtime.PropertyDef;
 import org.apache.roller.weblogger.config.runtime.RuntimeConfigDefs;
 import org.apache.roller.weblogger.pojos.RuntimeConfigProperty;
+import org.apache.roller.weblogger.business.Roller;
 
 
 /*
@@ -44,6 +45,7 @@
  * Created on May 29, 2006, 2:06 PM
  *
  */
+@com.google.inject.Singleton
 public class JPAPropertiesManagerImpl implements PropertiesManager {
     
     /** The logger instance for this class. */
@@ -51,14 +53,15 @@
         JPAPropertiesManagerImpl.class);
 
     private JPAPersistenceStrategy strategy;
+    private Roller roller = null;
     
     /**
      * Creates a new instance of JPAPropertiesManagerImpl
      */
-    public JPAPropertiesManagerImpl (
-            JPAPersistenceStrategy strategy) {
+    @com.google.inject.Inject
+    protected JPAPropertiesManagerImpl(Roller roller, JPAPersistenceStrategy strategy) {
         log.debug("Instantiating JPA Properties Manager");
-
+        this.roller = roller;
         this.strategy = strategy;
     }
     

Modified: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPARefererManagerImpl.java
URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPARefererManagerImpl.java?view=diff&rev=550055&r1=550054&r2=550055
==============================================================================
--- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPARefererManagerImpl.java (original)
+++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPARefererManagerImpl.java Sat Jun 23 08:27:55 2007
@@ -35,7 +35,6 @@
 
 import org.apache.roller.weblogger.WebloggerException;
 import org.apache.roller.weblogger.business.Roller;
-import org.apache.roller.weblogger.business.RollerFactory;
 import org.apache.roller.weblogger.business.UserManager;
 import org.apache.roller.weblogger.business.WeblogManager;
 import org.apache.roller.weblogger.business.referrers.RefererManager;
@@ -50,10 +49,8 @@
 
 /*
  * JPARefererManagerImpl.java
- *
- * Created on May 31, 2006, 4:06 PM
- *
  */
+@com.google.inject.Singleton
 public class JPARefererManagerImpl implements RefererManager {
 
     private static Log log = LogFactory.getLog(
@@ -67,13 +64,15 @@
     
     /** The strategy for this manager. */
     protected JPAPersistenceStrategy strategy;
+    private Roller roller = null;
 
     /**
      * Creates a new instance of JPARefererManagerImpl
      */
-    public JPARefererManagerImpl(JPAPersistenceStrategy strategy) {
+    @com.google.inject.Inject
+    protected JPARefererManagerImpl(Roller roller, JPAPersistenceStrategy strategy) {
         log.debug("Instantiating JPA Referer Manager");
-
+        this.roller = roller;
         this.strategy = strategy;
     }
 
@@ -379,13 +378,13 @@
 
         // lookup the weblog now
         try {
-            UserManager userMgr = RollerFactory.getRoller().getUserManager();
+            UserManager userMgr = roller.getUserManager();
             weblog = userMgr.getWebsiteByHandle(weblogHandle);
             if (weblog == null) return;
 
             // now lookup weblog entry if possible
             if (entryAnchor != null) {
-                WeblogManager weblogMgr = RollerFactory.getRoller().
+                WeblogManager weblogMgr = roller.
                     getWeblogManager();
                 entry = weblogMgr.getWeblogEntryByAnchor(weblog, entryAnchor);
             }
@@ -485,7 +484,7 @@
                     // Launch thread to extract referer linkback
 
                     try {
-                        Roller mRoller = RollerFactory.getRoller();
+                        Roller mRoller = roller;
                         mRoller.getThreadManager().executeInBackground(
                                 new LinkbackExtractorRunnable(ref));
                     } catch (InterruptedException e) {

Modified: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPARollerImpl.java
URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPARollerImpl.java?view=diff&rev=550055&r1=550054&r2=550055
==============================================================================
--- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPARollerImpl.java (original)
+++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPARollerImpl.java Sat Jun 23 08:27:55 2007
@@ -1,4 +1,3 @@
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  *  contributor license agreements.  The ASF licenses this file to You
@@ -18,17 +17,11 @@
  */
 package org.apache.roller.weblogger.business.jpa;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.Enumeration;
-import java.util.Properties;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.weblogger.WebloggerException;
 import org.apache.roller.weblogger.business.BookmarkManager;
-import org.apache.roller.weblogger.business.DatabaseProvider;
+import org.apache.roller.weblogger.business.FileManager;
 import org.apache.roller.weblogger.business.PropertiesManager;
 import org.apache.roller.weblogger.business.Roller;
 import org.apache.roller.weblogger.business.RollerImpl;
@@ -38,14 +31,16 @@
 import org.apache.roller.weblogger.business.pings.AutoPingManager;
 import org.apache.roller.weblogger.business.pings.PingQueueManager;
 import org.apache.roller.weblogger.business.pings.PingTargetManager;
+import org.apache.roller.weblogger.business.plugins.PluginManager;
 import org.apache.roller.weblogger.business.referrers.RefererManager;
-import org.apache.roller.weblogger.business.startup.WebloggerStartup;
-import org.apache.roller.weblogger.config.RollerConfig;
-
+import org.apache.roller.weblogger.business.referrers.ReferrerQueueManager;
+import org.apache.roller.weblogger.business.search.IndexManager;
+import org.apache.roller.weblogger.business.themes.ThemeManager;
 
 /**
  * A JPA specific implementation of the Roller business layer.
  */
+@com.google.inject.Singleton
 public class JPARollerImpl extends RollerImpl {
 
     static final long serialVersionUID = 5256135928578074652L;
@@ -57,6 +52,7 @@
 
     // a persistence utility class
     protected JPAPersistenceStrategy strategy = null;
+    private Roller roller = null;
 
     // references to the managers we maintain
     private BookmarkManager bookmarkManager = null;
@@ -73,61 +69,44 @@
      * Single constructor.
      * @throws org.apache.roller.weblogger.WebloggerException on any error
      */
-    protected JPARollerImpl() throws WebloggerException {
-        
-        // Add OpenJPA, Toplink and Hibernate properties to Roller config.
-        Properties props = new Properties();
-        Enumeration keys = RollerConfig.keys();
-        while (keys.hasMoreElements()) {
-            String key = (String)keys.nextElement();
-            if (key.startsWith("openjpa.") || key.startsWith("toplink.")) {
-                String value = RollerConfig.getProperty(key);
-                logger.info(key + ": " + value);
-                props.setProperty(key, value);
-            }
-        }
+    @com.google.inject.Inject
+    protected JPARollerImpl(
+        JPAPersistenceStrategy strategy,
+        AutoPingManager      autoPingManager,
+        BookmarkManager      bookmarkManager,
+        FileManager          fileManager,
+        IndexManager         indexManager,
+        PingQueueManager     pingQueueManager,
+        PingTargetManager    pingTargetManager,
+        PluginManager        pluginManager,
+        PropertiesManager    propertiesManager,
+        RefererManager       refererManager,
+        ReferrerQueueManager refererQueueManager,
+        ThemeManager         themeManager,
+        ThreadManager        threadManager,
+        UserManager          userManager,
+        WeblogManager        weblogManager) throws WebloggerException {
         
-        DatabaseProvider dbProvider = WebloggerStartup.getDatabaseProvider();
-        if (dbProvider.getType() == DatabaseProvider.ConfigurationType.JNDI_NAME) {
-            strategy = new JPAPersistenceStrategy(
-                "RollerPU", "java:comp/env/" + dbProvider.getJndiName(), props); 
-        } else {
-            strategy = new JPAPersistenceStrategy(
-                "RollerPU",  
-                dbProvider.getJdbcDriverClass(),
-                dbProvider.getJdbcConnectionURL(),
-                dbProvider.getJdbcUsername(),
-                dbProvider.getJdbcPassword(), 
-                props);
-        }
-    }
-    
-    protected UserManager createJPAUserManager(JPAPersistenceStrategy strategy) {
-        return new JPAUserManagerImpl((JPAPersistenceStrategy) strategy);
-    }
-
-    protected WeblogManager createJPAWeblogManager(
-            JPAPersistenceStrategy strategy) {
-        return new JPAWeblogManagerImpl((JPAPersistenceStrategy) strategy);
-    }
-
-    protected ThreadManager createJPAThreadManager(
-            JPAPersistenceStrategy strategy) {
-        return new JPAThreadManagerImpl((JPAPersistenceStrategy) strategy);
-    }
-
-    protected RefererManager createJPARefererManagerImpl(JPAPersistenceStrategy strategy) {
-        return new JPARefererManagerImpl((JPAPersistenceStrategy) strategy);
+        super(
+            autoPingManager,
+            bookmarkManager,
+            fileManager,
+            indexManager,
+            pingQueueManager,
+            pingTargetManager,
+            pluginManager,
+            propertiesManager,
+            refererManager,
+            refererQueueManager,
+            themeManager,
+            threadManager,
+            userManager,
+            weblogManager); 
+        this.strategy = strategy;
     }
-
-    /**
-     * Construct and return the singleton instance of the class.
-     * @throws org.apache.roller.weblogger.WebloggerException on any error
-     * @return the singleton
-     */
-    public static Roller instantiate() throws WebloggerException {
-        logger.debug("Instantiating JPARollerImpl");
-        return new JPARollerImpl();
+        
+    public void initialize() {
+        // no-op
     }
     
     public void flush() throws WebloggerException {
@@ -136,194 +115,17 @@
 
     
     public void release() {
-
-        // release our own stuff first
-        if (bookmarkManager != null) bookmarkManager.release();
-        if (referrerManager != null) referrerManager.release();
-        if (userManager != null) userManager.release();
-        if (weblogManager != null) weblogManager.release();
-        if (pingTargetManager != null) pingTargetManager.release();
-        if (pingQueueManager != null) pingQueueManager.release();
-        if (autoPingManager != null) autoPingManager.release();
-
+        super.release();
         // tell JPA to close down
         this.strategy.release();
-
-        // then let parent do its thing
-        super.release();
     }
 
     
     public void shutdown() {
-
         // do our own shutdown first
         this.release();
 
         // then let parent do its thing
         super.shutdown();
-    }
-
-    /**
-     * @see org.apache.roller.weblogger.business.Roller#getAutopingManager()
-     */
-    public AutoPingManager getAutopingManager() {
-        if (autoPingManager == null) {
-            autoPingManager = createJPAAutoPingManager(strategy);
-        }
-        return autoPingManager;
-    }
-
-    protected AutoPingManager createJPAAutoPingManager(
-            JPAPersistenceStrategy strategy) {
-        return new JPAAutoPingManagerImpl(strategy);
-    }
-    
-    /**
-     * @see org.apache.roller.weblogger.business.Roller#getBookmarkManager()
-     */
-    public BookmarkManager getBookmarkManager() {
-        if ( bookmarkManager == null ) {
-            bookmarkManager = createJPABookmarkManager(strategy);
-        }
-        return bookmarkManager;
-    }
-
-    protected BookmarkManager createJPABookmarkManager(
-            JPAPersistenceStrategy strategy) {
-        return new JPABookmarkManagerImpl(strategy);
-    }
-
-    /**
-     * @see org.apache.roller.weblogger.business.Roller#getPingTargetManager()
-     */
-    public PingQueueManager getPingQueueManager() {
-        if (pingQueueManager == null) {
-            pingQueueManager = createJPAPingQueueManager(strategy);
-        }
-        return pingQueueManager;
-    }
-
-    protected PingQueueManager createJPAPingQueueManager(
-            JPAPersistenceStrategy strategy) {
-        return new JPAPingQueueManagerImpl(strategy);
-    }
-
-    /**
-     * @see org.apache.roller.weblogger.business.Roller#getPingTargetManager()
-     */
-    public PingTargetManager getPingTargetManager() {
-        if (pingTargetManager == null) {
-            pingTargetManager = createJPAPingTargetManager(strategy);
-        }
-        return pingTargetManager;
-    }
-
-    protected PingTargetManager createJPAPingTargetManager(
-            JPAPersistenceStrategy strategy) {
-        return new JPAPingTargetManagerImpl(strategy);
-    }
-
-    /**
-     * @see org.apache.roller.weblogger.business.Roller#getPropertiesManager()
-     */
-    public PropertiesManager getPropertiesManager() {
-        if (propertiesManager == null) {
-            propertiesManager = createJPAPropertiesManager(strategy);
-        }
-        return propertiesManager;
-    }
-
-    protected PropertiesManager createJPAPropertiesManager(
-            JPAPersistenceStrategy strategy) {
-        return new JPAPropertiesManagerImpl(strategy);
-    }
-
-    /**
-     * @see org.apache.roller.weblogger.business.Roller#getRefererManager()
-     */
-    public RefererManager getRefererManager() {
-        if ( referrerManager == null ) {
-            referrerManager = createJPARefererManagerImpl(strategy);
-        }
-        return referrerManager;
-    }
-
-    /**
-     * @see org.apache.roller.weblogger.business.Roller#getUserManager()
-     */
-    public UserManager getUserManager() {
-        if ( userManager == null ) {
-            userManager = createJPAUserManager(strategy);
-        }
-        return userManager;
-    }
-
-    /**
-     * @see org.apache.roller.weblogger.business.Roller#getWeblogManager()
-     */
-    public WeblogManager getWeblogManager() {
-        if ( weblogManager == null ) {
-            weblogManager = createJPAWeblogManager(strategy);
-        }
-        return weblogManager;
-    }
-
-    /**
-     * @see org.apache.roller.weblogger.model.Roller#getThreadManager()
-     */
-    public ThreadManager getThreadManager() {
-        if (threadManager == null) {
-            threadManager = createJPAThreadManager(strategy);
-        }
-        return threadManager;
-    }
-        
-    /**
-     * Loads properties from given resourceName using given class loader
-     * @param resourceName The name of the resource containing properties
-     * @param cl Classloeder to be used to locate the resouce
-     * @return A properties object
-     * @throws WebloggerException
-     */
-    private static Properties loadPropertiesFromResourceName(
-            String resourceName, ClassLoader cl) throws WebloggerException {
-        Properties props = new Properties();
-        InputStream in = null;
-        in = cl.getResourceAsStream(resourceName);
-        if (in == null) {
-            //TODO: Check how i18n is done in roller
-            throw new WebloggerException(
-                    "Could not locate properties to load " + resourceName);
-        }
-        try {
-            props.load(in);
-        } catch (IOException ioe) {
-            throw new WebloggerException(
-                    "Could not load properties from " + resourceName);
-        } finally {
-            if (in != null) {
-                try {
-                    in.close();
-                } catch (IOException ioe) {
-                }
-            }
-        }
-        
-        return props;
-    }
-    
-    /**
-     * Get the context class loader associated with the current thread. This is
-     * done in a doPrivileged block because it is a secure method.
-     * @return the current thread's context class loader.
-     */
-    private static ClassLoader getContextClassLoader() {
-        return (ClassLoader) AccessController.doPrivileged(
-                new PrivilegedAction() {
-            public Object run() {
-                return Thread.currentThread().getContextClassLoader();
-            }
-        });
-    }
-    
+    }    
 }

Modified: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAThreadManagerImpl.java
URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAThreadManagerImpl.java?view=diff&rev=550055&r1=550054&r2=550055
==============================================================================
--- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAThreadManagerImpl.java (original)
+++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAThreadManagerImpl.java Sat Jun 23 08:27:55 2007
@@ -26,9 +26,9 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.weblogger.business.jpa.JPAPersistenceStrategy;
 import org.apache.roller.weblogger.WebloggerException;
+import org.apache.roller.weblogger.business.Roller;
 import org.apache.roller.weblogger.business.runnable.ThreadManagerImpl;
 import org.apache.roller.weblogger.business.runnable.RollerTask;
-import org.apache.roller.weblogger.business.RollerFactory;
 import org.apache.roller.weblogger.pojos.TaskLock;
 
 
@@ -38,18 +38,22 @@
  * This implementation extends the base ThreadManagerImpl class and provides
  * locking abilities which are managed through the database.
  */
+@com.google.inject.Singleton
 public class JPAThreadManagerImpl extends ThreadManagerImpl {
 
     private static final Log log = LogFactory.getLog(JPAThreadManagerImpl.class);
 
     private final JPAPersistenceStrategy strategy;
+    private Roller roller = null;
 
 
-    public JPAThreadManagerImpl(JPAPersistenceStrategy strat) {
+    @com.google.inject.Inject
+    protected JPAThreadManagerImpl(Roller roller, JPAPersistenceStrategy strat) {
         super();
 
         log.debug("Instantiating JPA Thread Manager");
 
+        this.roller = roller;
         this.strategy = strat;
     }
 
@@ -73,7 +77,7 @@
 
                 // save it and flush
                 this.saveTaskLock(taskLock);
-                RollerFactory.getRoller().flush();
+                roller.flush();
             }
 
         } catch (WebloggerException ex) {

Modified: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAUserManagerImpl.java
URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAUserManagerImpl.java?view=diff&rev=550055&r1=550054&r2=550055
==============================================================================
--- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAUserManagerImpl.java (original)
+++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAUserManagerImpl.java Sat Jun 23 08:27:55 2007
@@ -25,7 +25,6 @@
 
 import org.apache.roller.weblogger.WebloggerException;
 import org.apache.roller.weblogger.business.BookmarkManager;
-import org.apache.roller.weblogger.business.RollerFactory;
 import org.apache.roller.weblogger.business.UserManager;
 import org.apache.roller.weblogger.business.WeblogManager;
 import org.apache.roller.weblogger.business.pings.AutoPingManager;
@@ -45,6 +44,7 @@
 import java.util.Comparator;
 import javax.persistence.Query;
 import org.apache.roller.weblogger.business.jpa.JPAPersistenceStrategy;
+import org.apache.roller.weblogger.business.Roller;
 
 /*
  * JPAUserManagerImpl.java
@@ -52,6 +52,7 @@
  * Created on May 29, 2006, 3:15 PM
  *
  */
+@com.google.inject.Singleton
 public class JPAUserManagerImpl implements UserManager {
     
     /** The logger instance for this class. */
@@ -61,6 +62,7 @@
             Collections.reverseOrder(StatCountCountComparator.getInstance());
     
     protected JPAPersistenceStrategy strategy;
+    private Roller roller = null;
     
     // cached mapping of weblogHandles -> weblogIds
     private Map weblogHandleToIdMap = new Hashtable();
@@ -68,9 +70,10 @@
     // cached mapping of userNames -> userIds
     private Map userNameToIdMap = new Hashtable();
     
-    public JPAUserManagerImpl(JPAPersistenceStrategy strat) {
+    @com.google.inject.Inject
+    protected JPAUserManagerImpl(Roller roller, JPAPersistenceStrategy strat) {
         log.debug("Instantiating JPA User Manager");
-        
+        this.roller = roller;
         this.strategy = strat;
     }
     
@@ -100,8 +103,8 @@
     private void removeWebsiteContents(Weblog website)
     throws  WebloggerException {
         
-        BookmarkManager bmgr = RollerFactory.getRoller().getBookmarkManager();
-        WeblogManager wmgr = RollerFactory.getRoller().getWeblogManager();
+        BookmarkManager bmgr = roller.getBookmarkManager();
+        WeblogManager wmgr = roller.getWeblogManager();
         
         // remove tags
         Query tagQuery = strategy.getNamedQuery("WeblogEntryTag.getByWeblog");
@@ -140,7 +143,7 @@
         }
         
         // Remove the website's auto ping configurations
-        AutoPingManager autoPingMgr = RollerFactory.getRoller()
+        AutoPingManager autoPingMgr = roller
         .getAutopingManager();
         List autopings = autoPingMgr.getAutoPingsByWebsite(website);
         it = autopings.iterator();
@@ -149,7 +152,7 @@
         }
         
         // Remove the website's custom ping targets
-        PingTargetManager pingTargetMgr = RollerFactory.getRoller().getPingTargetManager();
+        PingTargetManager pingTargetMgr = roller.getPingTargetManager();
         List pingtargets = pingTargetMgr.getCustomPingTargets(website);
         it = pingtargets.iterator();
         while(it.hasNext()) {
@@ -288,7 +291,7 @@
         this.strategy.store(page);
         
         // update weblog last modified date.  date updated by saveWebsite()
-        RollerFactory.getRoller().getUserManager()
+        roller.getUserManager()
         .saveWebsite(page.getWebsite());
     }
     
@@ -296,7 +299,7 @@
         this.strategy.remove(page);
         
         // update weblog last modified date.  date updated by saveWebsite()
-        RollerFactory.getRoller().getUserManager().saveWebsite(page.getWebsite());
+        roller.getUserManager().saveWebsite(page.getWebsite());
     }
     
     public void addUser(User newUser) throws WebloggerException {
@@ -408,9 +411,9 @@
         }
         
         // add any auto enabled ping targets
-        PingTargetManager pingTargetMgr = RollerFactory.getRoller()
+        PingTargetManager pingTargetMgr = roller
         .getPingTargetManager();
-        AutoPingManager autoPingMgr = RollerFactory.getRoller()
+        AutoPingManager autoPingMgr = roller
         .getAutopingManager();
         
         Iterator pingTargets = pingTargetMgr.getCommonPingTargets().iterator();

Modified: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAWeblogManagerImpl.java
URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAWeblogManagerImpl.java?view=diff&rev=550055&r1=550054&r2=550055
==============================================================================
--- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAWeblogManagerImpl.java (original)
+++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAWeblogManagerImpl.java Sat Jun 23 08:27:55 2007
@@ -40,7 +40,7 @@
 import org.apache.roller.weblogger.business.jpa.JPAPersistenceStrategy;
 
 import org.apache.roller.weblogger.WebloggerException;
-import org.apache.roller.weblogger.business.RollerFactory;
+import org.apache.roller.weblogger.business.Roller;
 import org.apache.roller.weblogger.business.WeblogManager;
 import org.apache.roller.weblogger.pojos.WeblogEntryComment;
 import org.apache.roller.weblogger.pojos.WeblogHitCount;
@@ -65,12 +65,14 @@
  * Created on May 31, 2006, 4:08 PM
  *
  */
+@com.google.inject.Singleton
 public class JPAWeblogManagerImpl implements WeblogManager {
     
     protected static Log log = LogFactory.getLog(
             JPAWeblogManagerImpl.class);
     
     protected JPAPersistenceStrategy strategy;
+    private Roller roller = null;
     
     // cached mapping of entryAnchors -> entryIds
     private Hashtable entryAnchorToIdMap = new Hashtable();
@@ -86,10 +88,10 @@
     private static final Comparator statCountCountReverseComparator =
             Collections.reverseOrder(StatCountCountComparator.getInstance());
     
-    public JPAWeblogManagerImpl
-            (JPAPersistenceStrategy strategy) {
+    @com.google.inject.Inject
+    protected JPAWeblogManagerImpl(Roller roller, JPAPersistenceStrategy strategy) {
         log.debug("Instantiating JPA Weblog Manager");
-        
+        this.roller = roller;
         this.strategy = strategy;
     }
     
@@ -111,7 +113,7 @@
         }
         
         // update weblog last modified date.  date updated by saveWebsite()
-        RollerFactory.getRoller().getUserManager().saveWebsite(cat.getWebsite());        
+        roller.getUserManager().saveWebsite(cat.getWebsite());        
         this.strategy.store(cat);
     }
     
@@ -146,7 +148,7 @@
         }
         
         // update weblog last modified date.  date updated by saveWebsite()
-        RollerFactory.getRoller().getUserManager().saveWebsite(
+        roller.getUserManager().saveWebsite(
                 cat.getWebsite());
     }
     
@@ -265,7 +267,7 @@
         this.strategy.store(comment);
         
         // update weblog last modified date.  date updated by saveWebsite()
-        RollerFactory.getRoller().getUserManager()
+        roller.getUserManager()
         .saveWebsite(comment.getWeblogEntry().getWebsite());
     }
     
@@ -276,7 +278,7 @@
         this.strategy.remove(comment);
         
         // update weblog last modified date.  date updated by saveWebsite()
-        RollerFactory.getRoller().getUserManager()
+        roller.getUserManager()
         .saveWebsite(comment.getWeblogEntry().getWebsite());
     }
     
@@ -315,13 +317,13 @@
         
         // update weblog last modified date.  date updated by saveWebsite()
         if(entry.isPublished()) {
-            RollerFactory.getRoller().getUserManager()
+            roller.getUserManager()
             .saveWebsite(entry.getWebsite());
         }
         
         if(entry.isPublished()) {
             // Queue applicable pings for this update.
-            RollerFactory.getRoller().getAutopingManager()
+            roller.getAutopingManager()
             .queueApplicableAutoPings(entry);
         }
     }
@@ -370,7 +372,7 @@
         
         // update weblog last modified date.  date updated by saveWebsite()
         if(entry.isPublished()) {
-            RollerFactory.getRoller().getUserManager()
+            roller.getUserManager()
             .saveWebsite(entry.getWebsite());
         }
         

Added: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/RollerModule.java
URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/RollerModule.java?view=auto&rev=550055
==============================================================================
--- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/RollerModule.java (added)
+++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/RollerModule.java Sat Jun 23 08:27:55 2007
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  The ASF licenses this file to You
+ * under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.  For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+
+package org.apache.roller.weblogger.business.jpa;
+
+import com.google.inject.Binder;
+import com.google.inject.Module;
+import org.apache.roller.weblogger.business.BookmarkManager;
+import org.apache.roller.weblogger.business.FileManager;
+import org.apache.roller.weblogger.business.FileManagerImpl;
+import org.apache.roller.weblogger.business.PropertiesManager;
+import org.apache.roller.weblogger.business.Roller;
+import org.apache.roller.weblogger.business.UserManager;
+import org.apache.roller.weblogger.business.WeblogManager;
+import org.apache.roller.weblogger.business.pings.AutoPingManager;
+import org.apache.roller.weblogger.business.pings.PingQueueManager;
+import org.apache.roller.weblogger.business.pings.PingTargetManager;
+import org.apache.roller.weblogger.business.plugins.PluginManager;
+import org.apache.roller.weblogger.business.plugins.PluginManagerImpl;
+import org.apache.roller.weblogger.business.referrers.RefererManager;
+import org.apache.roller.weblogger.business.referrers.ReferrerQueueManager;
+import org.apache.roller.weblogger.business.referrers.ReferrerQueueManagerImpl;
+import org.apache.roller.weblogger.business.runnable.ThreadManager;
+import org.apache.roller.weblogger.business.search.IndexManager;
+import org.apache.roller.weblogger.business.search.IndexManagerImpl;
+import org.apache.roller.weblogger.business.themes.ThemeManager;
+import org.apache.roller.weblogger.business.themes.ThemeManagerImpl;
+
+/**
+ * Guice module for configuring JPA as Roller-backend.
+ */
+public class RollerModule implements Module {
+
+    public void configure(Binder binder) {
+
+        binder.bind(Roller.class).to(JPARollerImpl.class);
+        
+        binder.bind(JPAPersistenceStrategy.class);       
+        binder.bind(org.apache.roller.weblogger.planet.business.jpa.JPARollerPlanetPersistenceStrategy.class);   
+        
+        binder.bind(AutoPingManager.class).to(     JPAAutoPingManagerImpl.class);   
+        binder.bind(BookmarkManager.class).to(     JPABookmarkManagerImpl.class);  
+        binder.bind(PingQueueManager.class).to(    JPAPingQueueManagerImpl.class);   
+        binder.bind(PingTargetManager.class).to(   JPAPingTargetManagerImpl.class); 
+        binder.bind(PropertiesManager.class).to(   JPAPropertiesManagerImpl.class);   
+        binder.bind(RefererManager.class).to(      JPARefererManagerImpl.class);
+        binder.bind(ThreadManager.class).to(       JPAThreadManagerImpl.class);  
+        binder.bind(UserManager.class).to(         JPAUserManagerImpl.class);   
+        binder.bind(WeblogManager.class).to(       JPAWeblogManagerImpl.class);   
+                
+        binder.bind(ReferrerQueueManager.class).to(ReferrerQueueManagerImpl.class); 
+        binder.bind(FileManager.class).to(         FileManagerImpl.class);   
+        binder.bind(IndexManager.class).to(        IndexManagerImpl.class);
+        binder.bind(PluginManager.class).to(       PluginManagerImpl.class);    
+        binder.bind(ThemeManager.class).to(        ThemeManagerImpl.class);  
+    }    
+}
+

Modified: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/referrers/ReferrerQueueManagerImpl.java
URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/referrers/ReferrerQueueManagerImpl.java?view=diff&rev=550055&r1=550054&r2=550055
==============================================================================
--- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/referrers/ReferrerQueueManagerImpl.java (original)
+++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/referrers/ReferrerQueueManagerImpl.java Sat Jun 23 08:27:55 2007
@@ -31,10 +31,10 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.weblogger.WebloggerException;
+import org.apache.roller.weblogger.business.Roller;
 import org.apache.roller.weblogger.business.runnable.ContinuousWorkerThread;
 import org.apache.roller.weblogger.business.runnable.WorkerThread;
 import org.apache.roller.weblogger.config.RollerConfig;
-import org.apache.roller.weblogger.business.RollerFactory;
 
 
 /**
@@ -58,27 +58,26 @@
  *
  * @author Allen Gilliland
  */
+@com.google.inject.Singleton
 public class ReferrerQueueManagerImpl implements ReferrerQueueManager {
     
     private static Log mLogger = LogFactory.getLog(ReferrerQueueManagerImpl.class);
     
-    private static ReferrerQueueManager instance = null;
+    private Roller roller = null;
     
     private boolean asyncMode = false;
     private int numWorkers = 1;
     private int sleepTime = 10000;
     private List workers = null;
     private List referrerQueue = null;
-    
-    static {
-        instance = new ReferrerQueueManagerImpl();
-    }
-    
+
     
     // private because we are a singleton
-    private ReferrerQueueManagerImpl() {
+    @com.google.inject.Inject
+    protected ReferrerQueueManagerImpl(Roller roller) {
         mLogger.info("Initializing Referrer Queue Manager");
-        
+        this.roller = roller;
+
         // lookup config options
         this.asyncMode = RollerConfig.getBooleanProperty("referrers.asyncProcessing.enabled");
         
@@ -123,15 +122,6 @@
         }
     }
     
-    
-    /**
-     * Get access to the singleton instance.
-     */
-    public static ReferrerQueueManager getInstance() {
-        return instance;
-    }
-    
-    
     /**
      * Process an incoming referrer.
      *
@@ -160,7 +150,7 @@
             
             try {
                 // flush changes
-                RollerFactory.getRoller().flush();
+                roller.flush();
             } catch (WebloggerException ex) {
                 mLogger.error("ERROR commiting referrer", ex);
             }

Modified: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/runnable/ThreadManagerImpl.java
URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/runnable/ThreadManagerImpl.java?view=diff&rev=550055&r1=550054&r2=550055
==============================================================================
--- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/runnable/ThreadManagerImpl.java (original)
+++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/runnable/ThreadManagerImpl.java Sat Jun 23 08:27:55 2007
@@ -34,6 +34,7 @@
 /**
  * Manage Roller's thread use.
  */
+@com.google.inject.Singleton
 public class ThreadManagerImpl implements ThreadManager {
     
     private static final Log log = LogFactory.getLog(ThreadManagerImpl.class);
@@ -42,14 +43,13 @@
     private final ScheduledExecutorService serviceScheduler;
     
     
-    public ThreadManagerImpl() {
+    protected ThreadManagerImpl() {
         
         log.info("Intializing Thread Manager");
         
         serviceScheduler = Executors.newScheduledThreadPool(10);
     }
     
-    
     public void initialize() throws InitializationException {
         
         Date now = new Date();
@@ -84,10 +84,8 @@
                     log.error("Error instantiating task", ex);
                 }
             }
-        }
-        
+        }        
     }
-    
     
     public void executeInBackground(Runnable runnable)
             throws InterruptedException {

Modified: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/search/IndexManager.java
URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/search/IndexManager.java?view=diff&rev=550055&r1=550054&r2=550055
==============================================================================
--- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/search/IndexManager.java (original)
+++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/search/IndexManager.java Sat Jun 23 08:27:55 2007
@@ -46,7 +46,7 @@
     
     /** Execute operation immediately */
     public abstract void executeIndexOperationNow(final IndexOperation op);
-    
+
     /**
      * Release all resources associated with Roller session.
      */

Modified: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/search/IndexManagerImpl.java
URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/search/IndexManagerImpl.java?view=diff&rev=550055&r1=550054&r2=550055
==============================================================================
--- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/search/IndexManagerImpl.java (original)
+++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/search/IndexManagerImpl.java Sat Jun 23 08:27:55 2007
@@ -45,7 +45,6 @@
 import EDU.oswego.cs.dl.util.concurrent.ReadWriteLock;
 import EDU.oswego.cs.dl.util.concurrent.WriterPreferenceReadWriteLock;
 import org.apache.roller.weblogger.config.RollerConfig;
-import org.apache.roller.weblogger.business.RollerFactory;
 import org.apache.commons.lang.StringUtils;
 
 /**
@@ -54,11 +53,13 @@
  * @author Mindaugas Idzelis (min@idzelis.com)
  * @author mraible (formatting and making indexDir configurable)
  */
+@com.google.inject.Singleton
 public class IndexManagerImpl implements IndexManager {
     //~ Static fields/initializers
     // =============================================
     
     private IndexReader reader;
+    private Roller roller;
     
     static Log mLogger = LogFactory.getFactory().getInstance(
             IndexManagerImpl.class);
@@ -92,8 +93,10 @@
      * @param indexDir -
      *            the path to the index directory
      */
-    public IndexManagerImpl() {
-        
+    @com.google.inject.Inject
+    protected IndexManagerImpl(Roller roller) {
+        this.roller = roller;
+
         // check config to see if the internal search is enabled
         String enabled = RollerConfig.getProperty("search.enabled");
         if("false".equalsIgnoreCase(enabled))
@@ -180,31 +183,31 @@
     
     public void rebuildWebsiteIndex() throws WebloggerException {
         scheduleIndexOperation(
-                new RebuildWebsiteIndexOperation(this, null));
+                new RebuildWebsiteIndexOperation(roller, this, null));
     }
     
     public void rebuildWebsiteIndex(Weblog website) throws WebloggerException {
         scheduleIndexOperation(
-                new RebuildWebsiteIndexOperation(this, website));
+                new RebuildWebsiteIndexOperation(roller, this, website));
     }
     
     public void removeWebsiteIndex(Weblog website) throws WebloggerException {
         scheduleIndexOperation(
-                new RemoveWebsiteIndexOperation(this, website));
+                new RemoveWebsiteIndexOperation(roller, this, website));
     }
     
     public void addEntryIndexOperation(WeblogEntry entry) throws WebloggerException {
-        AddEntryOperation addEntry = new AddEntryOperation(this, entry);
+        AddEntryOperation addEntry = new AddEntryOperation(roller, this, entry);
         scheduleIndexOperation(addEntry);
     }
     
     public void addEntryReIndexOperation(WeblogEntry entry) throws WebloggerException {
-        ReIndexEntryOperation reindex = new ReIndexEntryOperation(this, entry);
+        ReIndexEntryOperation reindex = new ReIndexEntryOperation(roller, this, entry);
         scheduleIndexOperation(reindex);
     }
     
     public void removeEntryIndexOperation(WeblogEntry entry) throws WebloggerException {
-        RemoveEntryOperation removeOp = new RemoveEntryOperation(this, entry);
+        RemoveEntryOperation removeOp = new RemoveEntryOperation(roller, this, entry);
         executeIndexOperationNow(removeOp);
     }
     
@@ -230,7 +233,7 @@
             // only if search is enabled
             if(this.searchEnabled) {
                 mLogger.debug("Starting scheduled index operation: "+op.getClass().getName());
-                RollerFactory.getRoller().getThreadManager().executeInBackground(op);
+                roller.getThreadManager().executeInBackground(op);
             }
         } catch (InterruptedException e) {
             mLogger.error("Error executing operation", e);
@@ -245,7 +248,7 @@
             // only if search is enabled
             if(this.searchEnabled) {
                 mLogger.debug("Executing index operation now: "+op.getClass().getName());
-                RollerFactory.getRoller().getThreadManager().executeInForeground(op);
+                roller.getThreadManager().executeInForeground(op);
             }
         } catch (InterruptedException e) {
             mLogger.error("Error executing operation", e);

Modified: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/search/operations/AddEntryOperation.java
URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/search/operations/AddEntryOperation.java?view=diff&rev=550055&r1=550054&r2=550055
==============================================================================
--- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/search/operations/AddEntryOperation.java (original)
+++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/search/operations/AddEntryOperation.java Sat Jun 23 08:27:55 2007
@@ -26,7 +26,6 @@
 import org.apache.roller.weblogger.WebloggerException;
 import org.apache.roller.weblogger.business.search.IndexManagerImpl;
 import org.apache.roller.weblogger.business.Roller;
-import org.apache.roller.weblogger.business.RollerFactory;
 import org.apache.roller.weblogger.business.WeblogManager;
 import org.apache.roller.weblogger.pojos.WeblogEntry;
 
@@ -44,14 +43,16 @@
     //~ Instance fields ========================================================
     
     private WeblogEntry data;
+    private Roller roller;
     
     //~ Constructors ===========================================================
     
     /**
      * Adds a web log entry into the index.
      */
-    public AddEntryOperation(IndexManagerImpl mgr,WeblogEntry data) {
+    public AddEntryOperation(Roller roller, IndexManagerImpl mgr,WeblogEntry data) {
         super(mgr);
+        this.roller = roller;
         this.data = data;
     }
     
@@ -64,14 +65,13 @@
         // the weblog object passed in as a detached object which is proned to
         // lazy initialization problems, so requery for the object now
         try {
-            WeblogManager wMgr = RollerFactory.getRoller().getWeblogManager();
+            WeblogManager wMgr = roller.getWeblogManager();
             this.data = wMgr.getWeblogEntry(this.data.getId());
         } catch (WebloggerException ex) {
             mLogger.error("Error getting weblogentry object", ex);
             return;
         }
         
-        Roller roller = RollerFactory.getRoller();
         try {
             if (writer != null) {
                 writer.addDocument(getDocument(data));

Modified: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/search/operations/ReIndexEntryOperation.java
URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/search/operations/ReIndexEntryOperation.java?view=diff&rev=550055&r1=550054&r2=550055
==============================================================================
--- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/search/operations/ReIndexEntryOperation.java (original)
+++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/search/operations/ReIndexEntryOperation.java Sat Jun 23 08:27:55 2007
@@ -29,7 +29,6 @@
 import org.apache.roller.weblogger.business.search.IndexManagerImpl;
 import org.apache.roller.weblogger.business.search.FieldConstants;
 import org.apache.roller.weblogger.business.Roller;
-import org.apache.roller.weblogger.business.RollerFactory;
 import org.apache.roller.weblogger.business.WeblogManager;
 import org.apache.roller.weblogger.pojos.WeblogEntry;
 
@@ -47,14 +46,16 @@
     //~ Instance fields ========================================================
     
     private WeblogEntry data;
+    private Roller roller;
     
     //~ Constructors ===========================================================
     
     /**
      * Adds a web log entry into the index.
      */
-    public ReIndexEntryOperation(IndexManagerImpl mgr,WeblogEntry data) {
+    public ReIndexEntryOperation(Roller roller, IndexManagerImpl mgr,WeblogEntry data) {
         super(mgr);
+        this.roller = roller;
         this.data = data;
     }
     
@@ -66,7 +67,7 @@
         // the weblog object passed in as a detached object which is proned to
         // lazy initialization problems, so requery for the object now
         try {
-            WeblogManager wMgr = RollerFactory.getRoller().getWeblogManager();
+            WeblogManager wMgr = roller.getWeblogManager();
             this.data = wMgr.getWeblogEntry(this.data.getId());
         } catch (WebloggerException ex) {
             mLogger.error("Error getting weblogentry object", ex);
@@ -86,7 +87,6 @@
         }
         
         IndexWriter writer = beginWriting();
-        Roller roller = RollerFactory.getRoller();
         try {
             if (writer != null) {
                 writer.addDocument(getDocument(data));

Modified: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/search/operations/RebuildWebsiteIndexOperation.java
URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/search/operations/RebuildWebsiteIndexOperation.java?view=diff&rev=550055&r1=550054&r2=550055
==============================================================================
--- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/search/operations/RebuildWebsiteIndexOperation.java (original)
+++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/search/operations/RebuildWebsiteIndexOperation.java Sat Jun 23 08:27:55 2007
@@ -34,7 +34,6 @@
 import org.apache.roller.weblogger.business.search.FieldConstants;
 import org.apache.roller.weblogger.business.search.IndexUtil;
 import org.apache.roller.weblogger.business.Roller;
-import org.apache.roller.weblogger.business.RollerFactory;
 import org.apache.roller.weblogger.business.UserManager;
 import org.apache.roller.weblogger.business.WeblogManager;
 import org.apache.roller.weblogger.pojos.WeblogEntry;
@@ -54,6 +53,7 @@
     //~ Instance fields ========================================================
     
     private Weblog website;
+    private Roller roller;
     
     //~ Constructors ===========================================================
     
@@ -62,8 +62,9 @@
      *
      * @param website The website to rebuild the index for, or null for all users.
      */
-    public RebuildWebsiteIndexOperation(IndexManagerImpl mgr, Weblog website) {
+    public RebuildWebsiteIndexOperation(Roller roller, IndexManagerImpl mgr, Weblog website) {
         super(mgr);
+        this.roller = roller;
         this.website = website;
     }
     
@@ -77,7 +78,7 @@
         // lazy initialization problems, so requery for the object now
         if(this.website != null) {
             try {
-                UserManager uMgr = RollerFactory.getRoller().getUserManager();
+                UserManager uMgr = roller.getUserManager();
                 this.website = uMgr.getWebsite(this.website.getId());
             } catch (WebloggerException ex) {
                 mLogger.error("Error getting website object", ex);
@@ -111,7 +112,6 @@
         
         IndexWriter writer = beginWriting();
         
-        Roller roller = RollerFactory.getRoller();
         try {
             if (writer != null) {
                 WeblogManager weblogManager = roller.getWeblogManager();

Modified: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/search/operations/RemoveEntryOperation.java
URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/search/operations/RemoveEntryOperation.java?view=diff&rev=550055&r1=550054&r2=550055
==============================================================================
--- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/search/operations/RemoveEntryOperation.java (original)
+++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/search/operations/RemoveEntryOperation.java Sat Jun 23 08:27:55 2007
@@ -25,7 +25,7 @@
 import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.index.Term;
 import org.apache.roller.weblogger.WebloggerException;
-import org.apache.roller.weblogger.business.RollerFactory;
+import org.apache.roller.weblogger.business.Roller;
 import org.apache.roller.weblogger.business.WeblogManager;
 import org.apache.roller.weblogger.business.search.IndexManagerImpl;
 import org.apache.roller.weblogger.business.search.FieldConstants;
@@ -46,11 +46,13 @@
     //~ Instance fields ========================================================
     
     private WeblogEntry data;
+    private Roller roller;
     
     //~ Constructors ===========================================================
     
-    public RemoveEntryOperation(IndexManagerImpl mgr,WeblogEntry data) {
+    public RemoveEntryOperation(Roller roller, IndexManagerImpl mgr,WeblogEntry data) {
         super(mgr);
+        this.roller = roller;
         this.data = data;
     }
     
@@ -62,7 +64,7 @@
         // the weblog object passed in as a detached object which is proned to
         // lazy initialization problems, so requery for the object now
         try {
-            WeblogManager wMgr = RollerFactory.getRoller().getWeblogManager();
+            WeblogManager wMgr = roller.getWeblogManager();
             this.data = wMgr.getWeblogEntry(this.data.getId());
         } catch (WebloggerException ex) {
             mLogger.error("Error getting weblogentry object", ex);

Modified: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/search/operations/RemoveWebsiteIndexOperation.java
URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/search/operations/RemoveWebsiteIndexOperation.java?view=diff&rev=550055&r1=550054&r2=550055
==============================================================================
--- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/search/operations/RemoveWebsiteIndexOperation.java (original)
+++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/search/operations/RemoveWebsiteIndexOperation.java Sat Jun 23 08:27:55 2007
@@ -26,7 +26,7 @@
 import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.index.Term;
 import org.apache.roller.weblogger.WebloggerException;
-import org.apache.roller.weblogger.business.RollerFactory;
+import org.apache.roller.weblogger.business.Roller;
 import org.apache.roller.weblogger.business.UserManager;
 import org.apache.roller.weblogger.business.search.IndexManagerImpl;
 import org.apache.roller.weblogger.business.search.FieldConstants;
@@ -48,6 +48,7 @@
     //~ Instance fields ========================================================
     
     private Weblog website;
+    private Roller roller;
     
     //~ Constructors ===========================================================
     
@@ -55,8 +56,9 @@
      * Create a new operation that will recreate an index.
      * @param website The website to rebuild the index for, or null for all sites.
      */
-    public RemoveWebsiteIndexOperation(IndexManagerImpl mgr, Weblog website) {
+    public RemoveWebsiteIndexOperation(Roller roller, IndexManagerImpl mgr, Weblog website) {
         super(mgr);
+        this.roller = roller;
         this.website = website;
     }
     
@@ -69,7 +71,7 @@
         // the weblog object passed in as a detached object which is proned to
         // lazy initialization problems, so requery for the object now
         try {
-            UserManager uMgr = RollerFactory.getRoller().getUserManager();
+            UserManager uMgr = roller.getUserManager();
             this.website = uMgr.getWebsite(this.website.getId());
         } catch (WebloggerException ex) {
             mLogger.error("Error getting website object", ex);

Modified: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/themes/ThemeManagerImpl.java
URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/themes/ThemeManagerImpl.java?view=diff&rev=550055&r1=550054&r2=550055
==============================================================================
--- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/themes/ThemeManagerImpl.java (original)
+++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/business/themes/ThemeManagerImpl.java Sat Jun 23 08:27:55 2007
@@ -34,7 +34,7 @@
 import org.apache.roller.weblogger.WebloggerException;
 import org.apache.roller.weblogger.business.FileManager;
 import org.apache.roller.weblogger.business.InitializationException;
-import org.apache.roller.weblogger.business.RollerFactory;
+import org.apache.roller.weblogger.business.Roller;
 import org.apache.roller.weblogger.business.UserManager;
 import org.apache.roller.weblogger.config.RollerConfig;
 import org.apache.roller.weblogger.pojos.Theme;
@@ -51,9 +51,11 @@
  * This particular implementation reads theme data off the filesystem 
  * and assumes that those themes are not changable at runtime.
  */
+@com.google.inject.Singleton
 public class ThemeManagerImpl implements ThemeManager {
     
     private static Log log = LogFactory.getLog(ThemeManagerImpl.class);
+    private Roller roller = null;
     
     // directory where themes are kept
     private String themeDir = null;
@@ -61,8 +63,9 @@
     // the Map contains ... (theme id, Theme)
     private Map themes = null;
     
-    
-    public ThemeManagerImpl() {
+    @com.google.inject.Inject
+    protected ThemeManagerImpl(Roller roller) {
+        this.roller = roller;
         // get theme directory from config and verify it
         this.themeDir = RollerConfig.getProperty("themes.dir");
         if(themeDir == null || themeDir.trim().length() < 1) {
@@ -133,7 +136,7 @@
             
         // otherwise we are returning a WeblogSharedTheme
         } else {
-            ThemeManager themeMgr = RollerFactory.getRoller().getThemeManager();
+            ThemeManager themeMgr = roller.getThemeManager();
             SharedTheme staticTheme =
                     (SharedTheme) this.themes.get(weblog.getEditorTheme());
             if(staticTheme != null) {
@@ -175,7 +178,7 @@
         log.debug("Importing theme ["+theme.getName()+"] to weblog ["+website.getName()+"]");
         
         try {
-            UserManager userMgr = RollerFactory.getRoller().getUserManager();
+            UserManager userMgr = roller.getUserManager();
             
             Set importedActionTemplates = new HashSet();
             ThemeTemplate themeTemplate = null;
@@ -255,7 +258,7 @@
             
             
             // now lets import all the theme resources
-            FileManager fileMgr = RollerFactory.getRoller().getFileManager();
+            FileManager fileMgr = roller.getFileManager();
             
             List resources = theme.getResources();
             Iterator iterat = resources.iterator();

Modified: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/config/PingConfig.java
URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/config/PingConfig.java?view=diff&rev=550055&r1=550054&r2=550055
==============================================================================
--- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/config/PingConfig.java (original)
+++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/config/PingConfig.java Sat Jun 23 08:27:55 2007
@@ -98,6 +98,11 @@
     // targets that implement minor variants of the WeblogUpdates.ping call.
     // This is initialized once at startup, and referenced when pings are made.
     private static final Map configuredVariants = new HashMap();
+    
+    // Pattern used to parse common ping targets as well as ping variants.
+    // Each initial commmon ping target is specified in the format {{name}{url}}
+    // Ping variants are also specified in a nested brace format {{url}{options}}
+    private static final Pattern NESTED_BRACE_PAIR = Pattern.compile("\\{\\{(.*?)\\}\\{(.*?)\\}\\}");
 
 
     // Inhibit construction
@@ -166,11 +171,6 @@
     public static boolean getSuspendPingProcessing() {
         return RollerRuntimeConfig.getBooleanProperty(PINGS_SUSPEND_PING_PROCESSING_PROP);
     }
-
-    // Pattern used to parse common ping targets as well as ping variants.
-    // Each initial commmon ping target is specified in the format {{name}{url}}
-    // Ping variants are also specified in a nested brace format {{url}{options}}
-    private static final Pattern NESTED_BRACE_PAIR = Pattern.compile("\\{\\{(.*?)\\}\\{(.*?)\\}\\}");
 
     /**
      * Initialize the common ping targets from the configuration properties. If the current list of common ping targets

Modified: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/config/roller.properties
URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/config/roller.properties?view=diff&rev=550055&r1=550054&r2=550055
==============================================================================
--- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/config/roller.properties (original)
+++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/config/roller.properties Sat Jun 23 08:27:55 2007
@@ -79,7 +79,11 @@
 # Hibernate dialect: You MUST override this to use a database other than MySQL4
 hibernate.dialect=org.hibernate.dialect.MySQLDialect
 
+#---------------------------------
+# Pluggable backend
+
 # No need to touch these two settings unless you are customizing Roller
+guice.backend.module=org.apache.roller.weblogger.business.jpa.RollerModule
 hibernate.connectionProvider=org.apache.roller.weblogger.business.hibernate.HibernateConnectionProvider
 
 #---------------------------------

Added: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/planet/business/hibernate/HibernateRollerPlanetPersistenceStrategy.java
URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/planet/business/hibernate/HibernateRollerPlanetPersistenceStrategy.java?view=auto&rev=550055
==============================================================================
--- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/planet/business/hibernate/HibernateRollerPlanetPersistenceStrategy.java (added)
+++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/planet/business/hibernate/HibernateRollerPlanetPersistenceStrategy.java Sat Jun 23 08:27:55 2007
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  The ASF licenses this file to You
+ * under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.  For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+
+package org.apache.roller.weblogger.planet.business.hibernate;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.roller.planet.PlanetException;
+import org.apache.roller.planet.business.hibernate.HibernatePersistenceStrategy;
+import org.apache.roller.weblogger.config.RollerConfig;
+
+/**
+ * Hibernate strategy for Planet, uses RollerConfig to get Hibernate configuration.
+ */
+@com.google.inject.Singleton
+public class HibernateRollerPlanetPersistenceStrategy extends HibernatePersistenceStrategy {
+    private static Log logger = 
+        LogFactory.getFactory().getInstance(HibernateRollerPlanetPersistenceStrategy.class); 
+    
+    /**
+     * Persistence strategy configures itself by using 'planet-hibernate.cfg.xml' 
+     * and Roller properties: 'hibernate.dialect' - the classname of the Hibernate 
+     * dialect to be used, 'hibernate.connectionProvider - the classname of 
+     * Roller's connnection provider impl.
+     */
+    protected HibernateRollerPlanetPersistenceStrategy() throws PlanetException {        
+        String dialect =  
+            RollerConfig.getProperty("hibernate.dialect");
+        String connectionProvider = 
+            RollerConfig.getProperty("hibernate.connectionProvider");        
+        String configuration = "planet-hibernate.cfg.xml";
+        init(dialect, connectionProvider, configuration);
+    }   
+}

Added: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/planet/business/hibernate/RollerPlanetModule.java
URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/planet/business/hibernate/RollerPlanetModule.java?view=auto&rev=550055
==============================================================================
--- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/planet/business/hibernate/RollerPlanetModule.java (added)
+++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/planet/business/hibernate/RollerPlanetModule.java Sat Jun 23 08:27:55 2007
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  The ASF licenses this file to You
+ * under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.  For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+
+package org.apache.roller.weblogger.planet.business.hibernate;
+
+import com.google.inject.Binder;
+import com.google.inject.Module;
+import org.apache.roller.planet.business.FeedFetcher;
+import org.apache.roller.planet.business.MultiPlanetURLStrategy;
+import org.apache.roller.planet.business.Planet;
+import org.apache.roller.planet.business.PlanetManager;
+import org.apache.roller.planet.business.PropertiesManager;
+import org.apache.roller.planet.business.RomeFeedFetcher;
+import org.apache.roller.planet.business.URLStrategy;
+import org.apache.roller.planet.business.hibernate.HibernatePlanetImpl;
+import org.apache.roller.planet.business.hibernate.HibernatePlanetManagerImpl;
+import org.apache.roller.planet.business.hibernate.HibernatePropertiesManagerImpl;
+
+/**
+ * Guice module for configuring Roller's built-in Planet, Hibernate version.
+ */
+public class RollerPlanetModule implements Module {
+
+    public void configure(Binder binder) {
+        
+        binder.bind(Planet.class).to(HibernatePlanetImpl.class);
+
+        // Use special Planet persistence strategy that works against RollerConfig
+        binder.bind(HibernateRollerPlanetPersistenceStrategy.class); 
+        
+        binder.bind(PlanetManager.class).to(     HibernatePlanetManagerImpl.class);   
+        binder.bind(PropertiesManager.class).to( HibernatePropertiesManagerImpl.class);   
+        binder.bind(URLStrategy.class).to(       MultiPlanetURLStrategy.class);
+        binder.bind(FeedFetcher.class).to(       RomeFeedFetcher.class);
+    }    
+}
+

Added: roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/planet/business/jpa/JPARollerPlanetPersistenceStrategy.java
URL: http://svn.apache.org/viewvc/roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/planet/business/jpa/JPARollerPlanetPersistenceStrategy.java?view=auto&rev=550055
==============================================================================
--- roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/planet/business/jpa/JPARollerPlanetPersistenceStrategy.java (added)
+++ roller/trunk/apps/weblogger/src/java/org/apache/roller/weblogger/planet/business/jpa/JPARollerPlanetPersistenceStrategy.java Sat Jun 23 08:27:55 2007
@@ -0,0 +1,96 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  The ASF licenses this file to You
+ * under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.  For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
+
+package org.apache.roller.weblogger.planet.business.jpa;
+
+import java.util.Enumeration;
+import java.util.Properties;
+import javax.persistence.Persistence;
+import javax.persistence.PersistenceException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.roller.planet.PlanetException;
+import org.apache.roller.planet.business.jpa.JPAPersistenceStrategy;
+import org.apache.roller.weblogger.business.DatabaseProvider;
+import org.apache.roller.weblogger.business.startup.WebloggerStartup;
+import org.apache.roller.weblogger.config.RollerConfig;
+
+/**
+ * JPA strategy for Planet, uses RollerConfig to get JPA configuration.
+ */
+@com.google.inject.Singleton
+public class JPARollerPlanetPersistenceStrategy extends JPAPersistenceStrategy {
+    private static Log logger = 
+        LogFactory.getFactory().getInstance(JPARollerPlanetPersistenceStrategy.class); 
+    
+    /**
+     * Construct by finding using DatabaseProvider and RollerConfig.
+     * @throws org.apache.roller.PlanetException on any error
+     */
+    protected JPARollerPlanetPersistenceStrategy() throws PlanetException { 
+
+        DatabaseProvider dbProvider = WebloggerStartup.getDatabaseProvider();
+        
+        // Pull in any properties defined in JMAEMF.properties config file
+        Properties emfProps = loadPropertiesFromResourceName(
+           "JPAEMF.properties", getContextClassLoader());
+                
+        // Add all OpenJPA and Toplinks properties found in RollerConfig
+        Enumeration keys = RollerConfig.keys();
+        while (keys.hasMoreElements()) {
+            String key = (String)keys.nextElement();
+            if (key.startsWith("openjpa.") || key.startsWith("toplink.")) {
+                String value = RollerConfig.getProperty(key);
+                logger.info(key + ": " + value);
+                emfProps.setProperty(key, value);
+            }
+        }
+        
+        if (dbProvider.getType() == DatabaseProvider.ConfigurationType.JNDI_NAME) {
+            // We're doing JNDI, so set OpenJPA JNDI name property
+            String jndiName = "java:comp/env/" + dbProvider.getJndiName();
+            emfProps.setProperty("openjpa.ConnectionFactoryName", jndiName);
+            
+        } else {
+            // So set JDBD properties for OpenJPA
+            emfProps.setProperty("openjpa.ConnectionDriverName",     dbProvider.getJdbcDriverClass());
+            emfProps.setProperty("openjpa.ConnectionURL",            dbProvider.getJdbcConnectionURL());
+            emfProps.setProperty("openjpa.ConnectionUserName",       dbProvider.getJdbcUsername());
+            emfProps.setProperty("openjpa.ConnectionPassword",       dbProvider.getJdbcPassword()); 
+
+            // And Toplink JPA
+            emfProps.setProperty("toplink.jdbc.driver",              dbProvider.getJdbcDriverClass());
+            emfProps.setProperty("toplink.jdbc.url",                 dbProvider.getJdbcConnectionURL());
+            emfProps.setProperty("toplink.jdbc.user",                dbProvider.getJdbcUsername());
+            emfProps.setProperty("toplink.jdbc.password",            dbProvider.getJdbcPassword());
+
+            // And Hibernate JPA
+            emfProps.setProperty("hibernate.connection.driver_class",dbProvider.getJdbcDriverClass());
+            emfProps.setProperty("hibernate.connection.url",         dbProvider.getJdbcConnectionURL());
+            emfProps.setProperty("hibernate.connection.username",    dbProvider.getJdbcUsername());
+            emfProps.setProperty("hibernate.connection.password",    dbProvider.getJdbcPassword()); 
+        }
+        
+        try {
+            this.emf = Persistence.createEntityManagerFactory("PlanetPU", emfProps);
+        } catch (PersistenceException pe) {
+            logger.error("ERROR: creating entity manager", pe);
+            throw new PlanetException(pe);
+        }
+    }  
+}