You are viewing a plain text version of this content. The canonical link for it is here.
Posted to pluto-scm@portals.apache.org by dd...@apache.org on 2005/11/17 03:40:03 UTC
svn commit: r345171 - in /portals/pluto/trunk: pluto-portal-driver/
pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/container/
pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/container/db/
pluto-portal/src/main/web...
Author: ddewolf
Date: Wed Nov 16 18:39:55 2005
New Revision: 345171
URL: http://svn.apache.org/viewcvs?rev=345171&view=rev
Log:
Implementing an approach to db access for the portal; Support both Memory and DB preference services; Create infrastructure for embedding derby; Configure all of this through spring;
Added:
portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/container/MemoryPreferencesService.java
portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/container/db/
portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/container/db/DBPortletPreferencesService.java
portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/container/db/DataSourceManager.java
portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/container/db/EmbeddedDataSourceManager.java
portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/container/db/JNDIDataSourceManager.java
Removed:
portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/container/PortletPreferencesProviderImpl.java
Modified:
portals/pluto/trunk/pluto-portal-driver/pom.xml
portals/pluto/trunk/pluto-portal/src/main/webapp/WEB-INF/pluto-portal-driver-services-config.xml
portals/pluto/trunk/pluto-testsuite/src/main/java/org/apache/pluto/core/impl/PreferencesValidatorImpl.java
Modified: portals/pluto/trunk/pluto-portal-driver/pom.xml
URL: http://svn.apache.org/viewcvs/portals/pluto/trunk/pluto-portal-driver/pom.xml?rev=345171&r1=345170&r2=345171&view=diff
==============================================================================
--- portals/pluto/trunk/pluto-portal-driver/pom.xml (original)
+++ portals/pluto/trunk/pluto-portal-driver/pom.xml Wed Nov 16 18:39:55 2005
@@ -20,6 +20,14 @@
<version>${pom.version}</version>
<scope>provided</scope>
</dependency>
+
+ <dependency>
+ <groupId>org.apache.derby</groupId>
+ <artifactId>derby</artifactId>
+ <version>10.1.1.0</version>
+ <scope>compile</scope>
+ </dependency>
+
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging-api</artifactId>
Added: portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/container/MemoryPreferencesService.java
URL: http://svn.apache.org/viewcvs/portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/container/MemoryPreferencesService.java?rev=345171&view=auto
==============================================================================
--- portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/container/MemoryPreferencesService.java (added)
+++ portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/container/MemoryPreferencesService.java Wed Nov 16 18:39:55 2005
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+package org.apache.pluto.driver.services.container;
+
+import java.util.Collection;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
+import java.io.File;
+import java.io.IOException;
+import java.io.FileWriter;
+import java.io.PrintWriter;
+
+import javax.portlet.PortletRequest;
+
+import org.apache.pluto.PortletWindow;
+import org.apache.pluto.PortletContainerException;
+import org.apache.pluto.driver.services.container.PortletPreferenceImpl;
+import org.apache.pluto.core.PortletPreference;
+import org.apache.pluto.services.PortletPreferencesService;
+import org.apache.commons.digester.Digester;
+import org.apache.commons.logging.LogFactory;
+import org.apache.commons.logging.Log;
+import org.xml.sax.SAXException;
+
+/**
+ * The Portal Driver's simple PortletPreferencesService implementation. This
+ * implementation makes use of memory for storing writing portlet preferences.
+ * @author <a href="ddewolf@apache.org">David H. DeWolf</a>
+ * @version 1.0
+ * @since Sep 22, 2004
+ */
+public class MemoryPreferencesService
+ implements PortletPreferencesService {
+
+ private static final Log LOG =
+ LogFactory.getLog(MemoryPreferencesService.class);
+
+ private Map storage;
+
+ public MemoryPreferencesService() {
+ storage = new HashMap();
+ }
+
+ public PortletPreference[] getStoredPreferences(PortletWindow window,
+ PortletRequest req)
+ throws PortletContainerException {
+ String key = getFormattedKey(window, req.getRemoteUser());
+ PortletPreference[] prefs = (PortletPreference[])storage.get(key);
+ if(prefs == null) {
+ if(LOG.isDebugEnabled()) {
+ LOG.debug("No portlet preferences found for: "+key);
+ }
+ return new PortletPreference[0];
+ }
+ return prefs;
+ }
+
+ public void store(PortletWindow window,
+ PortletRequest request,
+ PortletPreference[] preferences)
+ throws PortletContainerException {
+ String key = getFormattedKey(window, request.getRemoteUser());
+ storage.put(key, preferences);
+ if(LOG.isDebugEnabled()) {
+ LOG.debug("Portlet preferences saved for: "+key);
+ }
+
+ }
+
+ private String getFormattedKey(PortletWindow window, String user) {
+ return "user="+user+";"+"window="+window;
+ }
+}
+
Added: portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/container/db/DBPortletPreferencesService.java
URL: http://svn.apache.org/viewcvs/portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/container/db/DBPortletPreferencesService.java?rev=345171&view=auto
==============================================================================
--- portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/container/db/DBPortletPreferencesService.java (added)
+++ portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/container/db/DBPortletPreferencesService.java Wed Nov 16 18:39:55 2005
@@ -0,0 +1,96 @@
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+package org.apache.pluto.driver.services.container.db;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+
+import javax.portlet.PortletRequest;
+
+import org.apache.pluto.PortletWindow;
+import org.apache.pluto.PortletContainerException;
+import org.apache.pluto.core.PortletPreference;
+import org.apache.pluto.services.PortletPreferencesService;
+import org.apache.commons.logging.LogFactory;
+import org.apache.commons.logging.Log;
+
+/**
+ * The Portal Driver's PortletPreferencesService implementation. This
+ * implementation makes use of the embeded derby db for writing portlet preferences.
+ * @author <a href="ddewolf@apache.org">David H. DeWolf</a>
+ * @version 1.0
+ * @since Sep 22, 2004
+ */
+public class DBPortletPreferencesService
+ implements PortletPreferencesService {
+
+ private static final Log LOG =
+ LogFactory.getLog(DBPortletPreferencesService.class);
+
+ private DataSourceManager dataSourceManager;
+
+ public DBPortletPreferencesService(DataSourceManager dataSourceManager)
+ throws InstantiationException {
+ this.dataSourceManager = dataSourceManager;
+ if(!dataSourceManager.isRunning()) {
+ try {
+ dataSourceManager.startup();
+ }
+ catch(PortletContainerException pce) {
+ String msg =
+ "Unable to startup portlet preferences service due to dataSourceManager error."+
+ pce.getMessage();
+ if(LOG.isErrorEnabled()) {
+ LOG.error(msg, pce);
+ }
+ throw new InstantiationException(msg);
+ }
+ }
+ }
+
+ public PortletPreference[] getStoredPreferences(PortletWindow window,
+ PortletRequest req)
+ throws PortletContainerException {
+
+ try {
+ Connection conn = getConnection();
+ conn.close();
+ }
+ catch(SQLException sql) {
+ throw new PortletContainerException(sql);
+ }
+ return new PortletPreference[0];
+ }
+
+ public void store(PortletWindow window,
+ PortletRequest request,
+ PortletPreference[] preferences)
+ throws PortletContainerException {
+ try {
+ Connection conn = getConnection();
+ conn.close();
+ }
+ catch(SQLException sql) {
+ throw new PortletContainerException(sql);
+ }
+ }
+
+ private Connection getConnection() throws SQLException {
+ return dataSourceManager.getPortalDataSource().getConnection();
+ }
+
+}
+
Added: portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/container/db/DataSourceManager.java
URL: http://svn.apache.org/viewcvs/portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/container/db/DataSourceManager.java?rev=345171&view=auto
==============================================================================
--- portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/container/db/DataSourceManager.java (added)
+++ portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/container/db/DataSourceManager.java Wed Nov 16 18:39:55 2005
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+package org.apache.pluto.driver.services.container.db;
+
+import org.apache.pluto.PortletContainerException;
+
+import javax.sql.DataSource;
+
+/**
+ *
+ */
+public interface DataSourceManager {
+
+ void startup() throws PortletContainerException;
+
+ void shutdown() throws PortletContainerException;
+
+ boolean isRunning();
+
+ DataSource getPortalDataSource();
+}
Added: portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/container/db/EmbeddedDataSourceManager.java
URL: http://svn.apache.org/viewcvs/portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/container/db/EmbeddedDataSourceManager.java?rev=345171&view=auto
==============================================================================
--- portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/container/db/EmbeddedDataSourceManager.java (added)
+++ portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/container/db/EmbeddedDataSourceManager.java Wed Nov 16 18:39:55 2005
@@ -0,0 +1,96 @@
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+package org.apache.pluto.driver.services.container.db;
+
+import org.apache.derby.jdbc.EmbeddedDataSource;
+
+import javax.sql.DataSource;
+
+
+/**
+ * Provides access to the DataSource used for Derby.
+ * Provided so that advanced configuration may be
+ * provided in the future.
+ *
+ */
+public class EmbeddedDataSourceManager implements DataSourceManager {
+
+ private String connectionString;
+
+
+ private String shutdown = "shutdownDatabase=true";
+
+ private EmbeddedDataSource embeddedDataSource;
+
+ public EmbeddedDataSourceManager() {
+ connectionString =
+ "databaseName=PLUTO_PORTAL_DRIVER;name=pluto;password=apachep0rtals;create=true";
+
+ System.setProperty(
+ "derby.system.home",
+ System.getProperty("user.home") + ".pluto/portal-driver/data"
+ );
+ }
+
+ public EmbeddedDataSourceManager(String connectionString, String systemDirectory) {
+ this.connectionString = connectionString;
+ System.setProperty("derby.system.home", systemDirectory);
+ }
+
+ public void startup() {
+ embeddedDataSource = new EmbeddedDataSource();
+ embeddedDataSource.setConnectionAttributes(connectionString);
+ initDatabase();
+ }
+
+ public void shutdown() {
+ if(embeddedDataSource != null)
+ embeddedDataSource.setConnectionAttributes(connectionString+shutdown);
+ embeddedDataSource = null;
+ }
+
+ public boolean isRunning() {
+ return embeddedDataSource != null;
+ }
+
+
+ public DataSource getPortalDataSource() {
+ return embeddedDataSource;
+ }
+
+ /**
+ * Eventually we should ensure pooling.
+ */
+ private void initDatabase() {
+ if(!isDatabaseInitialized()) {
+
+ }
+ // 1) Read in the PORTABLE CREATE SQL Script
+ // 2) Execute the CREATE Script via JDBC
+ // 3) Retrieve default data
+ // 4) Insert default data via JDBC
+ }
+
+ /**
+ * @return true if the database is valid
+ */
+ private boolean isDatabaseInitialized() {
+ // 1) Test for Version Table
+ return false;
+ }
+
+
+}
Added: portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/container/db/JNDIDataSourceManager.java
URL: http://svn.apache.org/viewcvs/portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/container/db/JNDIDataSourceManager.java?rev=345171&view=auto
==============================================================================
--- portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/container/db/JNDIDataSourceManager.java (added)
+++ portals/pluto/trunk/pluto-portal-driver/src/main/java/org/apache/pluto/driver/services/container/db/JNDIDataSourceManager.java Wed Nov 16 18:39:55 2005
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+package org.apache.pluto.driver.services.container.db;
+
+import org.apache.derby.jdbc.EmbeddedDataSource;
+import org.apache.pluto.PortletContainerException;
+
+import javax.sql.DataSource;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import java.io.File;
+
+
+/**
+ * Provides access to the DataSource used for Derby.
+ * Provided so that advanced configuration may be
+ * provided in the future.
+ *
+ */
+public class JNDIDataSourceManager implements DataSourceManager {
+
+ private String jndiName;
+
+ private DataSource dataSource;
+
+ public JNDIDataSourceManager(String jndiName) {
+ this.jndiName = jndiName;
+ }
+
+
+ public void startup() throws PortletContainerException {
+ try {
+ Context ctx = new InitialContext();
+ ctx = (Context)ctx.lookup("java:comp/env");
+ dataSource = (DataSource)ctx.lookup(jndiName);
+ }
+ catch(NamingException ne) {
+ throw new PortletContainerException(ne);
+ }
+ }
+
+ public void shutdown() throws PortletContainerException {
+ if(dataSource != null)
+ dataSource = null;
+ }
+
+ public boolean isRunning() {
+ return dataSource != null;
+ }
+
+
+ public DataSource getPortalDataSource() {
+ return dataSource;
+ }
+}
Modified: portals/pluto/trunk/pluto-portal/src/main/webapp/WEB-INF/pluto-portal-driver-services-config.xml
URL: http://svn.apache.org/viewcvs/portals/pluto/trunk/pluto-portal/src/main/webapp/WEB-INF/pluto-portal-driver-services-config.xml?rev=345171&r1=345170&r2=345171&view=diff
==============================================================================
--- portals/pluto/trunk/pluto-portal/src/main/webapp/WEB-INF/pluto-portal-driver-services-config.xml (original)
+++ portals/pluto/trunk/pluto-portal/src/main/webapp/WEB-INF/pluto-portal-driver-services-config.xml Wed Nov 16 18:39:55 2005
@@ -35,8 +35,34 @@
</bean>
<bean name="PortletPreferencesService"
- class="org.apache.pluto.driver.services.container.PortletPreferencesServiceImpl"
+ class="org.apache.pluto.driver.services.container.MemoryPreferencesService"
singleton="true">
</bean>
+ <!-- Uncomment for Embedded Derby Service Implementations -->
+ <!--
+ <bean name="PortletPreferencesService"
+ class="org.apache.pluto.driver.services.container.db.DBPortletPreferencesService"
+ singleton="true">
+ <constructor-arg><ref bean="DataSourceManager"/></constructor-arg>
+ </bean>
+
+ <bean name="DataSourceManager"
+ class="org.apache.pluto.driver.services.container.db.EmbeddedDataSourceManager"
+ singleton="true">
+ </bean>
+ -->
+
+ <!-- Uncomment to utilize a JNDI bound DataSource instead of
+ the embedded database datasource. You must ensure that
+ the schema is created before startup if you wish to use
+ this DataSourceManager
+ -->
+ <!--
+ <bean name="DataSourceManager"
+ class="org.apache.pluto.driver.services.container.db.JNDIDataSourceManager"
+ singleton="true">
+ <constructor-arg><value>plutoDB</value></constructor-arg>
+ </bean>
+ -->
</beans>
Modified: portals/pluto/trunk/pluto-testsuite/src/main/java/org/apache/pluto/core/impl/PreferencesValidatorImpl.java
URL: http://svn.apache.org/viewcvs/portals/pluto/trunk/pluto-testsuite/src/main/java/org/apache/pluto/core/impl/PreferencesValidatorImpl.java?rev=345171&r1=345170&r2=345171&view=diff
==============================================================================
--- portals/pluto/trunk/pluto-testsuite/src/main/java/org/apache/pluto/core/impl/PreferencesValidatorImpl.java (original)
+++ portals/pluto/trunk/pluto-testsuite/src/main/java/org/apache/pluto/core/impl/PreferencesValidatorImpl.java Wed Nov 16 18:39:55 2005
@@ -40,6 +40,11 @@
Enumeration names = preferences.getNames();
String[] defValues = {"no values"};
+ // TODO: Determine why we use this - I seem to remember it's a
+ // spec requirement, and fix it so that we don't have issues
+ // anymore. When enabled, all preferences fail in testsuite
+
+ /*
String[] values = null;
String key = null;
@@ -64,6 +69,7 @@
}
}
}
+ */
if (!failedKeys.isEmpty())
{