svnno****@sourc*****
svnno****@sourc*****
2008年 5月 16日 (金) 14:55:14 JST
Revision: 941 http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=pal&view=rev&rev=941 Author: shinsuke Date: 2008-05-16 14:55:14 +0900 (Fri, 16 May 2008) Log Message: ----------- backout of 937. Modified Paths: -------------- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/prefs/src/java/org/apache/jetspeed/prefs/impl/PersistenceBrokerPreferencesProvider.java pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/prefs/src/java/org/apache/jetspeed/prefs/impl/PreferencesFactoryImpl.java pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/prefs/src/java/org/apache/jetspeed/prefs/impl/PreferencesImpl.java pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/src/webapp/WEB-INF/assembly/prefs.xml Removed Paths: ------------- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/commons/src/java/org/apache/jetspeed/util/PreferencesRootWrapper.java pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/prefs/src/java/org/apache/jetspeed/prefs/impl/PreferencesProviderWrapper.java -------------- next part -------------- Deleted: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/commons/src/java/org/apache/jetspeed/util/PreferencesRootWrapper.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/commons/src/java/org/apache/jetspeed/util/PreferencesRootWrapper.java 2008-05-16 01:54:54 UTC (rev 940) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/commons/src/java/org/apache/jetspeed/util/PreferencesRootWrapper.java 2008-05-16 05:55:14 UTC (rev 941) @@ -1,240 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * 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. - */ -package org.apache.jetspeed.util; - -import java.io.IOException; -import java.io.OutputStream; -import java.util.Observable; -import java.util.Observer; -import java.util.prefs.BackingStoreException; -import java.util.prefs.NodeChangeListener; -import java.util.prefs.PreferenceChangeListener; -import java.util.prefs.Preferences; - -/** - * PreferencesRootWrapper is a lightweight wrapper around the Jetspeed - * persistent PreferencesImpl to allow restarting the Jetspeed Portal. - * <p> - * As the (Sun) Java Preferences implementation only creates a - * PreferencesFactory instance *once* per JVM (as static final), reloading the - * Jetspeed Portal (using a new classloader) requires a wrapper solution to - * prevent ClassCastExceptions and/or out-of-sync kept proxies and caches. - * </p> - * <p> - * As a newly created Jetspeed Portal classloader can no longer cast a previous - * Preferences root to its own PreferencesImpl, a "trick" is used by also - * implementing the Observer interface (which is provided by the Java system - * classloader). The Observer interface is used because it is very lightweight - * and allows passing an Object instance through its update method. That update - * method is used to "inject" the newly created Preferences root instance. - * </p> - * - * @author <a href="mailto:ate****@douma*****">Ate Douma</a> - * @version $Id$ - */ -public class PreferencesRootWrapper extends Preferences implements Observer -{ - - private Preferences root; - - public String absolutePath() - { - return root.absolutePath(); - } - - public void addNodeChangeListener(NodeChangeListener ncl) - { - root.addNodeChangeListener(ncl); - } - - public void addPreferenceChangeListener(PreferenceChangeListener pcl) - { - root.addPreferenceChangeListener(pcl); - } - - public String[] childrenNames() throws BackingStoreException - { - return root.childrenNames(); - } - - public void clear() throws BackingStoreException - { - root.clear(); - } - - public boolean equals(Object obj) - { - return root.equals(obj); - } - - public void exportNode(OutputStream os) throws IOException, - BackingStoreException - { - root.exportNode(os); - } - - public void exportSubtree(OutputStream os) throws IOException, - BackingStoreException - { - root.exportSubtree(os); - } - - public void flush() throws BackingStoreException - { - root.flush(); - } - - public String get(String key, String def) - { - return root.get(key, def); - } - - public boolean getBoolean(String key, boolean def) - { - return root.getBoolean(key, def); - } - - public byte[] getByteArray(String key, byte[] def) - { - return root.getByteArray(key, def); - } - - public double getDouble(String key, double def) - { - return root.getDouble(key, def); - } - - public float getFloat(String key, float def) - { - return root.getFloat(key, def); - } - - public int getInt(String key, int def) - { - return root.getInt(key, def); - } - - public long getLong(String key, long def) - { - return root.getLong(key, def); - } - - public int hashCode() - { - return root.hashCode(); - } - - public boolean isUserNode() - { - return root.isUserNode(); - } - - public String[] keys() throws BackingStoreException - { - return root.keys(); - } - - public String name() - { - return root.name(); - } - - public Preferences node(String pathName) - { - return root.node(pathName); - } - - public boolean nodeExists(String pathName) throws BackingStoreException - { - return root.nodeExists(pathName); - } - - public Preferences parent() - { - return root.parent(); - } - - public void put(String key, String value) - { - root.put(key, value); - } - - public void putBoolean(String key, boolean value) - { - root.putBoolean(key, value); - } - - public void putByteArray(String key, byte[] value) - { - root.putByteArray(key, value); - } - - public void putDouble(String key, double value) - { - root.putDouble(key, value); - } - - public void putFloat(String key, float value) - { - root.putFloat(key, value); - } - - public void putInt(String key, int value) - { - root.putInt(key, value); - } - - public void putLong(String key, long value) - { - root.putLong(key, value); - } - - public void remove(String key) - { - root.remove(key); - } - - public void removeNode() throws BackingStoreException - { - root.removeNode(); - } - - public void removeNodeChangeListener(NodeChangeListener ncl) - { - root.removeNodeChangeListener(ncl); - } - - public void removePreferenceChangeListener(PreferenceChangeListener pcl) - { - root.removePreferenceChangeListener(pcl); - } - - public void sync() throws BackingStoreException - { - root.sync(); - } - - public String toString() - { - return root.toString(); - } - - public void update(Observable o, Object arg) - { - root = (Preferences) arg; - } -} Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/prefs/src/java/org/apache/jetspeed/prefs/impl/PersistenceBrokerPreferencesProvider.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/prefs/src/java/org/apache/jetspeed/prefs/impl/PersistenceBrokerPreferencesProvider.java 2008-05-16 01:54:54 UTC (rev 940) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/prefs/src/java/org/apache/jetspeed/prefs/impl/PersistenceBrokerPreferencesProvider.java 2008-05-16 05:55:14 UTC (rev 941) @@ -49,7 +49,8 @@ * </p> * * @author <a href="mailto:weave****@apach*****">Scott T. Weaver </a> - * @version $Id$ + * @version $Id: PersistenceBrokerPreferencesProvider.java 605797 2007-12-20 + * 03:39:09Z woonsan $ */ public class PersistenceBrokerPreferencesProvider extends InitablePersistenceBrokerDaoSupport implements PreferencesProvider @@ -227,13 +228,6 @@ this.preloadEntities = preloadEntities; } - public void destroy() - { - NodeImplProxy.setProvider(null); - preferenceCache = null; - preloadedApplications = null; - } - protected void addToCache(NodeCache content) { CacheElement cachedElement = preferenceCache.createElement(content @@ -487,15 +481,15 @@ NodeCache key = new NodeCache(hit); getPersistenceBrokerTemplate().store(hit.getNode()); // avoid racing - // condition - // with the db - // and with - // cluster - // notification + // condition + // with the db + // and with + // cluster + // notification // do the db first preferenceCache.remove(key.getCacheKey()); // not sure we should - // actually do that, could - // also just update the node + // actually do that, could + // also just update the node addToCache(key); } @@ -512,12 +506,12 @@ { getPersistenceBrokerTemplate().delete( ((NodeImplProxy) node).getNode()); // avoid race conditions - // - do this first + // - do this first } else getPersistenceBrokerTemplate().delete(node); // avoid race - // conditions - do - // this first + // conditions - do + // this first if (node instanceof NodeImplProxy) { Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/prefs/src/java/org/apache/jetspeed/prefs/impl/PreferencesFactoryImpl.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/prefs/src/java/org/apache/jetspeed/prefs/impl/PreferencesFactoryImpl.java 2008-05-16 01:54:54 UTC (rev 940) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/prefs/src/java/org/apache/jetspeed/prefs/impl/PreferencesFactoryImpl.java 2008-05-16 05:55:14 UTC (rev 941) @@ -16,13 +16,11 @@ */ package org.apache.jetspeed.prefs.impl; -import java.util.Observer; import java.util.prefs.Preferences; import java.util.prefs.PreferencesFactory; import org.apache.jetspeed.prefs.PreferencesException; import org.apache.jetspeed.prefs.PreferencesProvider; -import org.apache.jetspeed.util.PreferencesRootWrapper; /** * <p> @@ -31,39 +29,15 @@ * </p> * * @author <a href="mailto:dlest****@apach*****">David Le Strat</a> - * @author <a href="mailto:ate****@douma*****">Ate Douma</a> - * @version $Id$ */ public class PreferencesFactoryImpl implements PreferencesFactory { - private Preferences userRootWrapper; + protected static PreferencesProvider prefsProvider; - private Preferences systemRootWrapper; - - private PreferencesImpl userRoot; - - private PreferencesImpl systemRoot; - - private PreferencesProvider preferencesProvider; - - /** - * Java Preferences invoked constructor - */ public PreferencesFactoryImpl() { - userRootWrapper = new PreferencesRootWrapper(); - systemRootWrapper = new PreferencesRootWrapper(); - } - - /** - * Spring invoked constructor with a dummy parameter to distinguish it from - * the default constructor invoked by the Java Preferences - * - * @param dummy - */ - public PreferencesFactoryImpl(int dummy) - { + super(); System.setProperty("java.util.prefs.PreferencesFactory", getClass() .getName()); } @@ -73,7 +47,7 @@ */ public Preferences systemRoot() { - return systemRootWrapper; + return PreferencesImpl.systemRoot; } /** @@ -81,7 +55,7 @@ */ public Preferences userRoot() { - return userRootWrapper; + return PreferencesImpl.userRoot; } /** @@ -95,37 +69,26 @@ { try { - // Wrap the PreferencesProvider to provide a single instance to be - // stored in the Preferences nodes - // which can be disposed at once for all - PreferencesProviderWrapper ppw = new PreferencesProviderWrapper( - preferencesProvider); - preferencesProvider = null; - userRoot = new PreferencesImpl(null, ppw, "", - PreferencesImpl.USER_NODE_TYPE); - systemRoot = new PreferencesImpl(null, ppw, "", + PreferencesImpl.setPreferencesProvider(prefsProvider); + PreferencesImpl.systemRoot = new PreferencesImpl(null, "", PreferencesImpl.SYSTEM_NODE_TYPE); - // set/update the Java Preferences userRoot and systeRoot - // PreferencesRootWrapper instances - ((Observer) Preferences.userRoot()).update(null, userRoot); - ((Observer) Preferences.systemRoot()).update(null, systemRoot); + PreferencesImpl.userRoot = new PreferencesImpl(null, "", + PreferencesImpl.USER_NODE_TYPE); } catch (Throwable e) { + e.printStackTrace(); throw new PreferencesException("Failed to initialize prefs api. " - + e.getMessage(), e); + + e.toString()); } } - public void dispose() + /** + * @return The {@link PreferencesProvider} + */ + public PreferencesProvider getPrefsProvider() { - ((Observer) Preferences.userRoot()).update(null, null); - ((Observer) Preferences.systemRoot()).update(null, null); - userRoot.disposeNode(); - systemRoot.disposeNode(); - userRoot.ppw.dispose(); - userRoot = null; - systemRoot = null; + return prefsProvider; } /** @@ -133,11 +96,11 @@ * Set the preferences provider. * </p> * - * @param preferencesProvider + * @param prefsProvider * The {@link PreferencesProvider} */ - public void setPrefsProvider(PreferencesProvider preferencesProvider) + public void setPrefsProvider(PreferencesProvider prefsProvider) { - this.preferencesProvider = preferencesProvider; + PreferencesFactoryImpl.prefsProvider = prefsProvider; } } Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/prefs/src/java/org/apache/jetspeed/prefs/impl/PreferencesImpl.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/prefs/src/java/org/apache/jetspeed/prefs/impl/PreferencesImpl.java 2008-05-16 01:54:54 UTC (rev 940) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/prefs/src/java/org/apache/jetspeed/prefs/impl/PreferencesImpl.java 2008-05-16 05:55:14 UTC (rev 941) @@ -29,6 +29,7 @@ import org.apache.jetspeed.prefs.FailedToCreateNodeException; import org.apache.jetspeed.prefs.NodeAlreadyExistsException; import org.apache.jetspeed.prefs.NodeDoesNotExistException; +import org.apache.jetspeed.prefs.PreferencesProvider; import org.apache.jetspeed.prefs.om.Node; import org.apache.jetspeed.prefs.om.Property; import org.apache.jetspeed.prefs.om.impl.PropertyImpl; @@ -40,8 +41,6 @@ * </p> * * @author <a href="mailto:dlest****@apach*****">David Le Strat </a> - * @author <a href="mailto:ate****@douma*****">Ate Douma</a> - * @version $Id$ */ public class PreferencesImpl extends AbstractPreferences { @@ -58,13 +57,12 @@ /** Logger. */ private static final Log log = LogFactory.getLog(PreferencesImpl.class); - protected PreferencesProviderWrapper ppw; + protected static PreferencesProvider prefsProvider; - void disposeNode() - { - node = null; - } + static PreferencesImpl systemRoot; + static PreferencesImpl userRoot; + /** * <p> * Constructs a root node in the underlying datastore if they have not yet @@ -81,22 +79,21 @@ * @param nodeType * The node type. */ - PreferencesImpl(PreferencesImpl parent, PreferencesProviderWrapper ppw, - String nodeName, int nodeType) throws IllegalStateException + public PreferencesImpl(PreferencesImpl parent, String nodeName, int nodeType) + throws IllegalStateException { super(parent, nodeName); try { - this.ppw = ppw; if (parent != null) { - this.node = ppw.provider().createNode(parent.getNode(), + this.node = prefsProvider.createNode(parent.getNode(), nodeName, nodeType, this.absolutePath()); } else { - this.node = ppw.provider().createNode(null, nodeName, nodeType, + this.node = prefsProvider.createNode(null, nodeName, nodeType, this.absolutePath()); } @@ -114,7 +111,7 @@ { try { - node = ppw.provider().getNode(this.absolutePath(), nodeType); + node = prefsProvider.getNode(this.absolutePath(), nodeType); newNode = false; } catch (NodeDoesNotExistException e1) @@ -138,7 +135,7 @@ */ public String[] childrenNamesSpi() throws BackingStoreException { - Collection nodes = ppw.provider().getChildren(getNode()); + Collection nodes = prefsProvider.getChildren(getNode()); if (null != nodes) { @@ -163,7 +160,7 @@ */ public AbstractPreferences childSpi(String name) { - return new PreferencesImpl(this, ppw, name, node.getNodeType()); + return new PreferencesImpl(this, name, node.getNodeType()); } /** @@ -171,7 +168,7 @@ */ public void flushSpi() throws BackingStoreException { - ppw.provider().storeNode(this.node); + prefsProvider.storeNode(this.node); } /** @@ -181,13 +178,12 @@ { String value = null; // Collection properties = node.getNodeProperties(); - // TODO review below // BEGIN Node targetNode = null; try { - targetNode = ppw.provider().getNode(node.getFullPath(), - node.getNodeType()); + targetNode = prefsProvider.getNode(node.getFullPath(), node + .getNodeType()); } catch (NodeDoesNotExistException e) { @@ -277,7 +273,7 @@ properties.add(new PropertyImpl(node.getNodeId(), key, value)); } - ppw.provider().storeNode(node); + prefsProvider.storeNode(node); } /** @@ -291,7 +287,7 @@ { parentNode = ((PreferencesImpl) parent).getNode(); } - ppw.provider().removeNode(parentNode, node); + prefsProvider.removeNode(parentNode, node); } /** @@ -311,7 +307,7 @@ } } // Update node. - ppw.provider().storeNode(node); + prefsProvider.storeNode(node); } /** @@ -334,4 +330,20 @@ { return node; } + + /** + * + * <p> + * setPreferencesProvider + * </p> + * Sets the <code>org.apache.jetspeed.prefs.PreferencesProvider</code> + * that will support backing store operations for all + * <code>PreferencesImpls</code> + * + * @param prefsProvider + */ + public static void setPreferencesProvider(PreferencesProvider prefsProvider) + { + PreferencesImpl.prefsProvider = prefsProvider; + } } Deleted: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/prefs/src/java/org/apache/jetspeed/prefs/impl/PreferencesProviderWrapper.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/prefs/src/java/org/apache/jetspeed/prefs/impl/PreferencesProviderWrapper.java 2008-05-16 01:54:54 UTC (rev 940) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/prefs/src/java/org/apache/jetspeed/prefs/impl/PreferencesProviderWrapper.java 2008-05-16 05:55:14 UTC (rev 941) @@ -1,44 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * 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. - */ -package org.apache.jetspeed.prefs.impl; - -import org.apache.jetspeed.prefs.PreferencesProvider; - -/** - * @author <a href="mailto:ate****@douma*****">Ate Douma</a> - * @version $Id$ - */ -public class PreferencesProviderWrapper -{ - - PreferencesProvider provider; - - PreferencesProviderWrapper(PreferencesProvider provider) - { - this.provider = provider; - } - - PreferencesProvider provider() - { - return provider; - } - - void dispose() - { - provider = null; - } -} Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/src/webapp/WEB-INF/assembly/prefs.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/src/webapp/WEB-INF/assembly/prefs.xml 2008-05-16 01:54:54 UTC (rev 940) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/src/webapp/WEB-INF/assembly/prefs.xml 2008-05-16 05:55:14 UTC (rev 941) @@ -19,7 +19,7 @@ <beans> <!-- Preferences Implementation --> - <bean id="PreferencesProviderImpl" class="org.apache.jetspeed.prefs.impl.PersistenceBrokerPreferencesProvider" name="prefsPersistenceBroker" init-method="init" destroy-method="destroy"> + <bean id="PreferencesProviderImpl" class="org.apache.jetspeed.prefs.impl.PersistenceBrokerPreferencesProvider" name="prefsPersistenceBroker" init-method="init"> <constructor-arg index="0"> <value>JETSPEED-INF/ojb/prefs_repository.xml</value> </constructor-arg> @@ -36,7 +36,7 @@ <constructor-arg index='3'><value type="boolean">false</value></constructor-arg> </bean> - <bean id="org.apache.jetspeed.prefs.PreferencesProvider" parent="baseTransactionProxy" name="prefsProvider" destroy-method="destroy"> + <bean id="org.apache.jetspeed.prefs.PreferencesProvider" parent="baseTransactionProxy" name="prefsProvider"> <property name="proxyInterfaces"> <value>org.apache.jetspeed.prefs.PreferencesProvider</value> </property> @@ -55,9 +55,7 @@ </bean> <!-- PreferencesFactory implementation --> - <bean id="java.util.prefs.PreferencesFactory" class="org.apache.jetspeed.prefs.impl.PreferencesFactoryImpl" name="prefsFactory" init-method="init" destroy-method="destroy"> - <!-- dummy constructor argument to distinguish it from the default constructor invoked by the Java Preferences itself --> - <constructor-arg><value>1</value></constructor-arg> + <bean id="java.util.prefs.PreferencesFactory" class="org.apache.jetspeed.prefs.impl.PreferencesFactoryImpl" name="prefsFactory" init-method="init"> <property name="prefsProvider"> <ref bean="prefsProvider" /> </property>