From svnnotify @ sourceforge.jp Wed Mar 4 12:07:50 2009 From: svnnotify @ sourceforge.jp (svnnotify @ sourceforge.jp) Date: Wed, 04 Mar 2009 12:07:50 +0900 Subject: [pal-cvs 4050] [1785] applied patch 'r725578: Distributed Database Page Manager EhCache Cache Backport' Message-ID: <1236136070.709423.31363.nullmailer@users.sourceforge.jp> Revision: 1785 http://svn.sourceforge.jp/view?root=pal&view=rev&rev=1785 Author: sone Date: 2009-03-04 12:07:50 +0900 (Wed, 04 Mar 2009) Log Message: ----------- applied patch 'r725578: Distributed Database Page Manager EhCache Cache Backport' Modified Paths: -------------- pal-portal/branches/pal-portal-1.x/installer/etc/database/build.xml pal-portal/branches/pal-portal-1.x/installer/etc/database/import/assembly/import-page-manager.xml pal-portal/branches/pal-portal-1.x/installer/etc/database/import/import.properties pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/.classpath pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheDistributedImpl.java pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheImpl.java pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/test/org/apache/jetspeed/cache/TestContentCache.java pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/test/org/apache/jetspeed/cache/TestDecorationContentCache.java pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/project.xml pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/AbstractPageManager.java pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManager.java pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManagerCache.java pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/util/interceptors/PageManagerInterceptor.java pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/database-page-manager.xml pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/interceptors.xml pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/org/apache/jetspeed/page/TestTransactions.java pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/secure-database-page-manager.xml pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/secure-permissions-database-page-manager.xml pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/db-ojb/ehcache.xml pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/import/assembly/import-page-manager.xml pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/import/build.xml pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/import/export.properties pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/import/import.properties pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/jetspeed-api/src/java/org/apache/jetspeed/cache/JetspeedCache.java pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/jetspeed-api/src/java/org/apache/jetspeed/page/PageManager.java pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/maven.xml pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/src/webapp/WEB-INF/assembly/alternate/db-page-manager.xml pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/src/webapp/WEB-INF/assembly/cache.xml Added Paths: ----------- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheConfigResource.java pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManagerCacheObject.java pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/database-page-manager-base.xml pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/distributed-ehcache.xml pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/ehcache.xml pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/log4j-stdout.properties pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/org/apache/jetspeed/page/cache/ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/org/apache/jetspeed/page/cache/DatabasePageManagerServer.java pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/org/apache/jetspeed/page/cache/TestDatabasePageManagerCache.java pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/db-ojb/distributed-ehcache.xml Removed Paths: ------------- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/tx-page-manager.xml -------------- next part -------------- Modified: pal-portal/branches/pal-portal-1.x/installer/etc/database/build.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/installer/etc/database/build.xml 2009-02-25 13:40:55 UTC (rev 1784) +++ pal-portal/branches/pal-portal-1.x/installer/etc/database/build.xml 2009-03-04 03:07:50 UTC (rev 1785) @@ -343,6 +343,7 @@ + Modified: pal-portal/branches/pal-portal-1.x/installer/etc/database/import/assembly/import-page-manager.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/installer/etc/database/import/assembly/import-page-manager.xml 2009-02-25 13:40:55 UTC (rev 1784) +++ pal-portal/branches/pal-portal-1.x/installer/etc/database/import/assembly/import-page-manager.xml 2009-03-04 03:07:50 UTC (rev 1785) @@ -44,14 +44,14 @@ class="org.apache.jetspeed.page.impl.DatabasePageManager"> JETSPEED-INF/ojb/page-manager-repository.xml - - 128 - - 0 - false + false - false + false + + + + Modified: pal-portal/branches/pal-portal-1.x/installer/etc/database/import/import.properties =================================================================== --- pal-portal/branches/pal-portal-1.x/installer/etc/database/import/import.properties 2009-02-25 13:40:55 UTC (rev 1784) +++ pal-portal/branches/pal-portal-1.x/installer/etc/database/import/import.properties 2009-03-04 03:07:50 UTC (rev 1785) @@ -1,7 +1,7 @@ # comma-separated list of boot assemblies for Spring boot.assemblies = repository-datasource-spring.xml # comma-separated list of assemblies for Spring -assemblies = import-page-manager.xml, transaction.xml, interceptors.xml +assemblies = import-page-manager.xml, transaction.xml, interceptors.xml, cache.xml # root folder to start exporting from root.folder = / # overwrite folders flag, set to true to replace existing folders Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/.classpath =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/.classpath 2009-02-25 13:40:55 UTC (rev 1784) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/.classpath 2009-03-04 03:07:50 UTC (rev 1785) @@ -108,5 +108,6 @@ + Added: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheConfigResource.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheConfigResource.java (rev 0) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheConfigResource.java 2009-03-04 03:07:50 UTC (rev 1785) @@ -0,0 +1,400 @@ +/* + * 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.cache.impl; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; + +import org.apache.commons.configuration.PropertiesConfiguration; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.core.io.AbstractResource; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.Resource; + +/** + * EhCacheConfigResource + * + * @author Randy Watler + * @version $Id: $ + */ +public class EhCacheConfigResource extends AbstractResource implements + InitializingBean +{ + + protected static Log log = LogFactory.getLog(EhCacheConfigResource.class); + + // Constants + + public static final String EHCACHE_CONFIG_RESOURCE_PROP_NAME = "org.apache.jetspeed.ehcache.config.resource"; + + public static final String EHCACHE_CONFIG_RESOURCE_DEFAULT = "ehcache.xml"; + + public static final String EHCACHE_CONFIG_RESOURCE_DISTRIBUTED_CACHE = "distributed-ehcache.xml"; + + public static final String EHCACHE_GROUP_ADDRESS_PROP_NAME = "org.apache.jetspeed.ehcache.group.address"; + + public static final String EHCACHE_GROUP_ADDRESS_DEFAULT = "230.0.0.1"; + + public static final String EHCACHE_GROUP_PORT_PROP_NAME = "org.apache.jetspeed.ehcache.group.port"; + + public static final String EHCACHE_GROUP_PORT_DEFAULT = "4446"; + + public static final String EHCACHE_GROUP_TTL_PROP_NAME = "org.apache.jetspeed.ehcache.group.ttl"; + + public static final String EHCACHE_GROUP_TTL_DEFAULT = "1"; + + public static final String EHCACHE_GROUP_TTL_TEST_DEFAULT = "0"; + + public static final String EHCACHE_HOSTNAME_PROP_NAME = "org.apache.jetspeed.ehcache.hostname"; + + public static final String EHCACHE_HOSTNAME_DEFAULT = ""; + + public static final String EHCACHE_HOSTNAME_TEST_DEFAULT = "localhost"; + + public static final String EHCACHE_PORT_PROP_NAME = "org.apache.jetspeed.ehcache.port"; + + public static final String EHCACHE_PORT_DEFAULT = "40001"; + + public static final String EHCACHE_PAGE_MANAGER_MAX_ELEMENTS_LEGACY_PROP_NAME = "db.page.manager.cache.size"; + + public static final String EHCACHE_PAGE_MANAGER_MAX_ELEMENTS_PROP_NAME = "org.apache.jetspeed.ehcache.pagemanager.maxelements"; + + public static final String EHCACHE_PAGE_MANAGER_MAX_ELEMENTS_DEFAULT = "128"; + + public static final String EHCACHE_PAGE_MANAGER_ELEMENT_TTL_LEGACY_PROP_NAME = "db.page.manager.cache.expire"; + + public static final String EHCACHE_PAGE_MANAGER_ELEMENT_TTL_PROP_NAME = "org.apache.jetspeed.ehcache.pagemanager.element.ttl"; + + public static final String EHCACHE_PAGE_MANAGER_ELEMENT_TTL_DEFAULT = "150"; + + // Singleton implementation + + private static EhCacheConfigResource instance; + + public static EhCacheConfigResource getInstance( + final String defaultConfigResource, final boolean test) + { + // construct and return a default instance + if (instance == null) + { + instance = new EhCacheConfigResource(); + instance.setDefaultConfigResource(defaultConfigResource); + instance.setTest(test); + instance.afterPropertiesSet(); + } + return instance; + } + + // Members + + private PropertiesConfiguration configuration; + + private String defaultConfigResource; + + private boolean test; + + private String defaultGroupAddress; + + private String defaultGroupPort; + + private String defaultGroupTTL; + + private String defaultHostname; + + private String defaultPort; + + private String defaultPageManagerMaxElements; + + private String defaultPageManagerElementTTL; + + private ClassPathResource classPathResource; + + // InitializingBean implementation + + /* (non-Javadoc) + * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet() + */ + public void afterPropertiesSet() + { + // copy specified configuration settings + if (configuration != null) + { + if (configuration.getString(EHCACHE_CONFIG_RESOURCE_PROP_NAME) != null) + { + defaultConfigResource = configuration + .getString(EHCACHE_CONFIG_RESOURCE_PROP_NAME); + } + if (configuration.getString(EHCACHE_GROUP_ADDRESS_PROP_NAME) != null) + { + defaultGroupAddress = configuration + .getString(EHCACHE_GROUP_ADDRESS_PROP_NAME); + } + if (configuration.getString(EHCACHE_GROUP_PORT_PROP_NAME) != null) + { + defaultGroupPort = configuration + .getString(EHCACHE_GROUP_PORT_PROP_NAME); + } + if (configuration.getString(EHCACHE_GROUP_TTL_PROP_NAME) != null) + { + defaultGroupTTL = configuration + .getString(EHCACHE_GROUP_TTL_PROP_NAME); + } + if (configuration.getString(EHCACHE_HOSTNAME_PROP_NAME) != null) + { + defaultHostname = configuration + .getString(EHCACHE_HOSTNAME_PROP_NAME); + } + if (configuration.getString(EHCACHE_PORT_PROP_NAME) != null) + { + defaultPort = configuration.getString(EHCACHE_PORT_PROP_NAME); + } + if (configuration + .getString(EHCACHE_PAGE_MANAGER_MAX_ELEMENTS_PROP_NAME) != null) + { + defaultPageManagerMaxElements = configuration + .getString(EHCACHE_PAGE_MANAGER_MAX_ELEMENTS_PROP_NAME); + } + if (configuration + .getString(EHCACHE_PAGE_MANAGER_ELEMENT_TTL_PROP_NAME) != null) + { + defaultPageManagerElementTTL = configuration + .getString(EHCACHE_PAGE_MANAGER_ELEMENT_TTL_PROP_NAME); + } + } + + // set system properties used in global cache configuration + if (System.getProperty(EHCACHE_CONFIG_RESOURCE_PROP_NAME) == null) + { + System.setProperty(EHCACHE_CONFIG_RESOURCE_PROP_NAME, + ((defaultConfigResource != null) ? defaultConfigResource + : EHCACHE_CONFIG_RESOURCE_DEFAULT)); + } + if (System.getProperty(EHCACHE_GROUP_ADDRESS_PROP_NAME) == null) + { + System.setProperty(EHCACHE_GROUP_ADDRESS_PROP_NAME, + ((defaultGroupAddress != null) ? defaultGroupAddress + : EHCACHE_GROUP_ADDRESS_DEFAULT)); + } + if (System.getProperty(EHCACHE_GROUP_PORT_PROP_NAME) == null) + { + System.setProperty(EHCACHE_GROUP_PORT_PROP_NAME, + ((defaultGroupPort != null) ? defaultGroupPort + : EHCACHE_GROUP_PORT_DEFAULT)); + } + if (System.getProperty(EHCACHE_GROUP_TTL_PROP_NAME) == null) + { + System.setProperty(EHCACHE_GROUP_TTL_PROP_NAME, + ((defaultGroupTTL != null) ? defaultGroupTTL + : (test ? EHCACHE_GROUP_TTL_TEST_DEFAULT + : EHCACHE_GROUP_TTL_DEFAULT))); + } + if (System.getProperty(EHCACHE_HOSTNAME_PROP_NAME) == null) + { + System.setProperty(EHCACHE_HOSTNAME_PROP_NAME, + ((defaultHostname != null) ? defaultHostname + : (test ? EHCACHE_HOSTNAME_TEST_DEFAULT + : EHCACHE_HOSTNAME_DEFAULT))); + } + if (System.getProperty(EHCACHE_PORT_PROP_NAME) == null) + { + System + .setProperty(EHCACHE_PORT_PROP_NAME, + ((defaultPort != null) ? defaultPort + : EHCACHE_PORT_DEFAULT)); + } + + // set system properties used in page manager cache configuration + if (System.getProperty(EHCACHE_PAGE_MANAGER_MAX_ELEMENTS_PROP_NAME) == null) + { + String pageManagerMaxElements = ((defaultPageManagerMaxElements != null) ? defaultPageManagerMaxElements + : System.getProperty( + EHCACHE_PAGE_MANAGER_MAX_ELEMENTS_LEGACY_PROP_NAME, + EHCACHE_PAGE_MANAGER_MAX_ELEMENTS_DEFAULT)); + if ((pageManagerMaxElements != null) + && (Integer.parseInt(pageManagerMaxElements) < 0)) + { + pageManagerMaxElements = EHCACHE_PAGE_MANAGER_MAX_ELEMENTS_DEFAULT; + } + System.setProperty(EHCACHE_PAGE_MANAGER_MAX_ELEMENTS_PROP_NAME, + pageManagerMaxElements); + } + if (System.getProperty(EHCACHE_PAGE_MANAGER_ELEMENT_TTL_PROP_NAME) == null) + { + String pageManagerElementTTL = ((defaultPageManagerElementTTL != null) ? defaultPageManagerElementTTL + : System.getProperty( + EHCACHE_PAGE_MANAGER_ELEMENT_TTL_LEGACY_PROP_NAME, + EHCACHE_PAGE_MANAGER_ELEMENT_TTL_DEFAULT)); + if ((pageManagerElementTTL != null) + && (Integer.parseInt(pageManagerElementTTL) < 0)) + { + pageManagerElementTTL = EHCACHE_PAGE_MANAGER_ELEMENT_TTL_DEFAULT; + } + System.setProperty(EHCACHE_PAGE_MANAGER_ELEMENT_TTL_PROP_NAME, + pageManagerElementTTL); + } + + // setup delegate ClassPathResource + final String configResource = System + .getProperty(EHCACHE_CONFIG_RESOURCE_PROP_NAME); + log.info("Configured with resource: " + configResource); + classPathResource = new ClassPathResource(configResource); + } + + // AbstractResource implementation + + /* (non-Javadoc) + * @see org.springframework.core.io.AbstractResource#createRelative(java.lang.String) + */ + public Resource createRelative(String relativePath) throws IOException + { + // delegate to ClassPathResource + return classPathResource.createRelative(relativePath); + } + + /* (non-Javadoc) + * @see org.springframework.core.io.AbstractResource#getFile() + */ + public File getFile() throws IOException + { + // delegate to ClassPathResource + return classPathResource.getFile(); + } + + /* (non-Javadoc) + * @see org.springframework.core.io.AbstractResource#getFilename() + */ + public String getFilename() throws IllegalStateException + { + // delegate to ClassPathResource + return classPathResource.getFilename(); + } + + /* (non-Javadoc) + * @see org.springframework.core.io.AbstractResource#getURL() + */ + public URL getURL() throws IOException + { + // delegate to ClassPathResource + return classPathResource.getURL(); + } + + /* (non-Javadoc) + * @see org.springframework.core.io.Resource#getDescription() + */ + public String getDescription() + { + // delegate to ClassPathResource + return classPathResource.getDescription(); + } + + /* (non-Javadoc) + * @see org.springframework.core.io.InputStreamSource#getInputStream() + */ + public InputStream getInputStream() throws IOException + { + // delegate to ClassPathResource + return classPathResource.getInputStream(); + } + + // Data access + + /** + * @param configuration the configuration to set + */ + public void setConfiguration(PropertiesConfiguration configuration) + { + this.configuration = configuration; + } + + /** + * @param defaultConfigResource the defaultConfigResource to set + */ + public void setDefaultConfigResource(String defaultConfigResource) + { + this.defaultConfigResource = defaultConfigResource; + } + + /** + * @param test the test to set + */ + public void setTest(boolean test) + { + this.test = test; + } + + /** + * @param defaultGroupAddress the defaultGroupAddress to set + */ + public void setDefaultGroupAddress(String defaultGroupAddress) + { + this.defaultGroupAddress = defaultGroupAddress; + } + + /** + * @param defaultGroupPort the defaultGroupPort to set + */ + public void setDefaultGroupPort(String defaultGroupPort) + { + this.defaultGroupPort = defaultGroupPort; + } + + /** + * @param defaultGroupTTL the defaultGroupTTL to set + */ + public void setDefaultGroupTTL(String defaultGroupTTL) + { + this.defaultGroupTTL = defaultGroupTTL; + } + + /** + * @param defaultHostname the defaultHostname to set + */ + public void setDefaultHostname(String defaultHostname) + { + this.defaultHostname = defaultHostname; + } + + /** + * @param defaultPort the defaultPort to set + */ + public void setDefaultPort(String defaultPort) + { + this.defaultPort = defaultPort; + } + + /** + * @param defaultPageManagerMaxElements the defaultPageManagerMaxElements to set + */ + public void setDefaultPageManagerMaxElements( + String defaultPageManagerMaxElements) + { + this.defaultPageManagerMaxElements = defaultPageManagerMaxElements; + } + + /** + * @param defaultPageManagerElementTTL the defaultPageManagerElementTTL to set + */ + public void setDefaultPageManagerElementTTL( + String defaultPageManagerElementTTL) + { + this.defaultPageManagerElementTTL = defaultPageManagerElementTTL; + } +} Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheDistributedImpl.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheDistributedImpl.java 2009-02-25 13:40:55 UTC (rev 1784) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheDistributedImpl.java 2009-03-04 03:07:50 UTC (rev 1785) @@ -51,6 +51,8 @@ private Map refList = Collections.synchronizedMap(new HashMap()); + private boolean removeAllLocal = false; + public EhCacheDistributedImpl(Ehcache ehcache) { super(ehcache); @@ -94,6 +96,11 @@ public CacheElement createElement(Object key, Object content) { + if (!(key instanceof Serializable)) { throw new IllegalArgumentException( + "The cache key must be serializable."); } + if (!(content instanceof DistributedCacheObject)) { throw new IllegalArgumentException( + "The cache content must be a distributed cache object."); } + return new EhCacheDistributedElementImpl((Serializable) key, (DistributedCacheObject) content); } @@ -131,7 +138,13 @@ public void clear() { - super.clear(); + // invoke removeAll with local flag set + synchronized (refList) + { + removeAllLocal = true; + super.clear(); + removeAllLocal = false; + } notifyListeners(true, CacheElement.ActionRemoved, null, null); } @@ -306,16 +319,23 @@ } try { - Iterator it = refList.entrySet().iterator(); - while (it.hasNext()) + // synchronize on refList to ensure exclusive + // operation on refList and removeAllLocal flag + synchronized (refList) { - EhCacheDistributedElementImpl e = (EhCacheDistributedElementImpl) it - .next(); - notifyListeners(false, CacheElement.ActionRemoved, e.getKey(), - e); - e.notifyChange(CacheElement.ActionRemoved); + // notify all listeners of element removal + // and each element of its removal + Iterator it = refList.values().iterator(); + while (it.hasNext()) + { + EhCacheDistributedElementImpl e = (EhCacheDistributedElementImpl) it + .next(); + notifyListeners(removeAllLocal, CacheElement.ActionRemoved, + e.getKey(), e.getContent()); + e.notifyChange(CacheElement.ActionRemoved); + } + refList.clear(); } - refList.clear(); } catch (Exception e) { Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheImpl.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheImpl.java 2009-02-25 13:40:55 UTC (rev 1784) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheImpl.java 2009-03-04 03:07:50 UTC (rev 1785) @@ -23,8 +23,10 @@ import jp.sf.pal.portal.logging.Log; import jp.sf.pal.portal.logging.LogFactory; +import net.sf.ehcache.CacheException; import net.sf.ehcache.Ehcache; import net.sf.ehcache.Element; +import net.sf.ehcache.distribution.CacheManagerPeerProvider; import net.sf.ehcache.event.CacheEventListener; import org.apache.jetspeed.cache.CacheElement; @@ -78,12 +80,17 @@ public CacheElement createElement(Object key, Object content) { - if (!((key instanceof Serializable) || !(content instanceof Serializable))) - throw new IllegalArgumentException( - "The cache key and the object to cache must be serializable."); // return - // null; - return new EhCacheElementImpl((Serializable) key, - (Serializable) content); + if (!(key instanceof Serializable)) { throw new IllegalArgumentException( + "The cache key must be serializable."); } + if (content instanceof Serializable) + { + return new EhCacheElementImpl((Serializable) key, + (Serializable) content); + } + else + { + return new EhCacheElementImpl((Serializable) key, content); + } } public boolean remove(Object key) @@ -194,6 +201,22 @@ return ehcache.getKeys(); } + public boolean isDistributed() + { + // check if cache part of a distributed cluster + try + { + CacheManagerPeerProvider peerProvider = ehcache.getCacheManager() + .getCachePeerProvider(); + return ((peerProvider != null) && (peerProvider + .listRemoteCachePeers(ehcache).size() > 0)); + } + catch (CacheException ce) + { + } + return false; + } + // ------------------------------------------------------ public Object clone() throws CloneNotSupportedException Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/test/org/apache/jetspeed/cache/TestContentCache.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/test/org/apache/jetspeed/cache/TestContentCache.java 2009-02-25 13:40:55 UTC (rev 1784) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/test/org/apache/jetspeed/cache/TestContentCache.java 2009-03-04 03:07:50 UTC (rev 1785) @@ -26,6 +26,7 @@ import net.sf.ehcache.CacheManager; import org.apache.jetspeed.aggregator.PortletContent; +import org.apache.jetspeed.cache.impl.EhCacheConfigResource; import org.apache.jetspeed.cache.impl.EhPortletContentCacheImpl; import org.apache.jetspeed.cache.impl.JetspeedCacheKeyGenerator; import org.apache.jetspeed.mockobjects.request.MockRequestContext; @@ -52,6 +53,8 @@ public void testContentCacheByUser() throws Exception { // initialize ehCache + EhCacheConfigResource.getInstance( + EhCacheConfigResource.EHCACHE_CONFIG_RESOURCE_DEFAULT, true); CacheManager cacheManager = new CacheManager(); Cache ehContentCache = new Cache("ehPortletContentCache", 10000, false, false, 28800, 28800); @@ -151,6 +154,8 @@ public void testContentCacheBySession() throws Exception { // initialize ehCache + EhCacheConfigResource.getInstance( + EhCacheConfigResource.EHCACHE_CONFIG_RESOURCE_DEFAULT, true); CacheManager cacheManager = new CacheManager(); Cache ehContentCache = new Cache("ehPortletContentCache", 10000, false, false, 28800, 28800); Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/test/org/apache/jetspeed/cache/TestDecorationContentCache.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/test/org/apache/jetspeed/cache/TestDecorationContentCache.java 2009-02-25 13:40:55 UTC (rev 1784) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/test/org/apache/jetspeed/cache/TestDecorationContentCache.java 2009-03-04 03:07:50 UTC (rev 1785) @@ -25,6 +25,7 @@ import net.sf.ehcache.Cache; import net.sf.ehcache.CacheManager; +import org.apache.jetspeed.cache.impl.EhCacheConfigResource; import org.apache.jetspeed.cache.impl.EhDecorationContentCacheImpl; import org.apache.jetspeed.cache.impl.JetspeedCacheKeyGenerator; import org.apache.jetspeed.mockobjects.request.MockRequestContext; @@ -51,6 +52,8 @@ public void testContentCacheByUser() throws Exception { // initialize ehCache + EhCacheConfigResource.getInstance( + EhCacheConfigResource.EHCACHE_CONFIG_RESOURCE_DEFAULT, true); CacheManager cacheManager = new CacheManager(); Cache ehContentCache = new Cache("ehDecorationContentCache", 10000, false, false, 28800, 28800); @@ -146,6 +149,8 @@ public void testContentCacheBySession() throws Exception { // initialize ehCache + EhCacheConfigResource.getInstance( + EhCacheConfigResource.EHCACHE_CONFIG_RESOURCE_DEFAULT, true); CacheManager cacheManager = new CacheManager(); Cache ehContentCache = new Cache("ehDecorationContentCache", 10000, false, false, 28800, 28800); Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/project.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/project.xml 2009-02-25 13:40:55 UTC (rev 1784) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/project.xml 2009-03-04 03:07:50 UTC (rev 1785) @@ -80,6 +80,11 @@ org.apache.portals.jetspeed-2:jetspeed-rdbms ${jetspeed.version} + + commons-jexl + commons-jexl + 1.1 + Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/AbstractPageManager.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/AbstractPageManager.java 2009-02-25 13:40:55 UTC (rev 1784) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/AbstractPageManager.java 2009-03-04 03:07:50 UTC (rev 1785) @@ -881,6 +881,14 @@ // nothing to shutdown by default } + /* (non-Javadoc) + * @see org.apache.jetspeed.page.PageManager#isDistributed() + */ + public boolean isDistributed() + { + return false; + } + /** * notifyNewNode - notify page manager event listeners of new node event * Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManager.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManager.java 2009-02-25 13:40:55 UTC (rev 1784) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManager.java 2009-03-04 03:07:50 UTC (rev 1785) @@ -28,6 +28,7 @@ import jp.sf.pal.portal.logging.LogFactory; import org.apache.jetspeed.JetspeedActions; +import org.apache.jetspeed.cache.JetspeedCache; import org.apache.jetspeed.components.dao.InitablePersistenceBrokerDaoSupport; import org.apache.jetspeed.om.common.SecurityConstraint; import org.apache.jetspeed.om.common.SecurityConstraints; @@ -105,12 +106,6 @@ implements PageManager { - private static final int DEFAULT_CACHE_SIZE = 128; - - private static final int MIN_CACHE_EXPIRES_SECONDS = 30; - - private static final int DEFAULT_CACHE_EXPIRES_SECONDS = 150; - private static Map modelClasses = new HashMap(); static { @@ -159,60 +154,22 @@ private DelegatingPageManager delegator; - private int cacheSize; - - private int cacheExpiresSeconds; - private PageManager pageManagerProxy; protected static final Log log = LogFactory .getLog(DatabasePageManager.class); - public DatabasePageManager(String repositoryPath, int cacheSize, - int cacheExpiresSeconds, boolean isPermissionsSecurity, - boolean isConstraintsSecurity) + public DatabasePageManager(String repositoryPath, + boolean isPermissionsSecurity, boolean isConstraintsSecurity, + JetspeedCache oidCache, JetspeedCache pathCache) { super(repositoryPath); delegator = new DelegatingPageManager(isPermissionsSecurity, isConstraintsSecurity, modelClasses); - this.cacheSize = Math.max(cacheSize, DEFAULT_CACHE_SIZE); - if (cacheExpiresSeconds < 0) - { - this.cacheExpiresSeconds = DEFAULT_CACHE_EXPIRES_SECONDS; - } - else if (cacheExpiresSeconds == 0) - { - this.cacheExpiresSeconds = 0; - } - else - { - this.cacheExpiresSeconds = Math.max(cacheExpiresSeconds, - MIN_CACHE_EXPIRES_SECONDS); - } - DatabasePageManagerCache.cacheInit(this); + DatabasePageManagerCache.cacheInit(oidCache, pathCache, this); } /** - * getCacheSize - * - * @return configured cache size - */ - public int getCacheSize() - { - return cacheSize; - } - - /** - * getCacheExpiresSeconds - * - * @return configured cache expiration in seconds - */ - public int getCacheExpiresSeconds() - { - return cacheExpiresSeconds; - } - - /** * getPageManagerProxy * * @return proxied page manager interface used to inject into Folder @@ -2246,4 +2203,11 @@ return pages.length; } + /* (non-Javadoc) + * @see org.apache.jetspeed.page.PageManager#isDistributed() + */ + public boolean isDistributed() + { + return DatabasePageManagerCache.isDistributed(); + } } Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManagerCache.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManagerCache.java 2009-02-25 13:40:55 UTC (rev 1784) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManagerCache.java 2009-03-04 03:07:50 UTC (rev 1785) @@ -16,12 +16,15 @@ */ package org.apache.jetspeed.page.impl; -import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Properties; +import org.apache.jetspeed.cache.CacheElement; +import org.apache.jetspeed.cache.JetspeedCache; +import org.apache.jetspeed.cache.JetspeedCacheEventListener; +import org.apache.jetspeed.om.folder.Folder; import org.apache.jetspeed.om.folder.impl.FolderImpl; import org.apache.jetspeed.page.PageManager; import org.apache.jetspeed.page.document.impl.NodeImpl; @@ -38,22 +41,22 @@ public class DatabasePageManagerCache implements ObjectCache { - private static HashMap cacheByOID; + // Members - private static LinkedList cacheLRUList; + private static JetspeedCache oidCache; - private static HashMap cacheByPath; + private static JetspeedCache pathCache; - private static int cacheSize; - - private static int cacheExpiresSeconds; - private static boolean constraintsEnabled; private static boolean permissionsEnabled; private static PageManager pageManager; + private static ThreadLocal transactionedOperations = new ThreadLocal(); + + // Implementation + /** * cacheInit * @@ -62,24 +65,189 @@ * @param pageManager * configured page manager */ - public synchronized static void cacheInit(DatabasePageManager dbPageManager) + public synchronized static void cacheInit(final JetspeedCache oidCache, + final JetspeedCache pathCache, final DatabasePageManager pageManager) { - if (pageManager != null) + + // initialize + DatabasePageManagerCache.oidCache = oidCache; + DatabasePageManagerCache.pathCache = pathCache; + constraintsEnabled = pageManager.getConstraintsEnabled(); + permissionsEnabled = pageManager.getPermissionsEnabled(); + + // setup local oid cache listener + oidCache.addEventListener(new JetspeedCacheEventListener() { - cacheClear(); - } - cacheByOID = new HashMap(); - cacheLRUList = new LinkedList(); - cacheByPath = new HashMap(); - cacheSize = dbPageManager.getCacheSize(); - cacheExpiresSeconds = dbPageManager.getCacheExpiresSeconds(); - constraintsEnabled = dbPageManager.getConstraintsEnabled(); - permissionsEnabled = dbPageManager.getPermissionsEnabled(); - pageManager = dbPageManager; + + /* (non-Javadoc) + * @see org.apache.jetspeed.cache.JetspeedCacheEventListener#notifyElementAdded(org.apache.jetspeed.cache.JetspeedCache, boolean, java.lang.Object, java.lang.Object) + */ + public void notifyElementAdded(final JetspeedCache cache, + final boolean local, final Object key, final Object element) + { + final NodeImpl node = (NodeImpl) element; + // infuse node with page manager configuration + // or the page manager itself and add to the + // paths cache + node.setConstraintsEnabled(constraintsEnabled); + node.setPermissionsEnabled(permissionsEnabled); + if (node instanceof FolderImpl) + { + ((FolderImpl) node).setPageManager(pageManager); + } + } + + /* (non-Javadoc) + * @see org.apache.jetspeed.cache.JetspeedCacheEventListener#notifyElementChanged(org.apache.jetspeed.cache.JetspeedCache, boolean, java.lang.Object, java.lang.Object) + */ + public void notifyElementChanged(final JetspeedCache cache, + final boolean local, final Object key, final Object element) + { + final NodeImpl node = (NodeImpl) element; + // infuse node with page manager configuration + // or the page manager itself and add to the + // paths cache + node.setConstraintsEnabled(constraintsEnabled); + node.setPermissionsEnabled(permissionsEnabled); + if (node instanceof FolderImpl) + { + ((FolderImpl) node).setPageManager(pageManager); + } + } + + /* (non-Javadoc) + * @see org.apache.jetspeed.cache.JetspeedCacheEventListener#notifyElementEvicted(org.apache.jetspeed.cache.JetspeedCache, boolean, java.lang.Object, java.lang.Object) + */ + public void notifyElementEvicted(final JetspeedCache cache, + final boolean local, final Object key, final Object element) + { + final NodeImpl node = (NodeImpl) element; + // reset internal FolderImpl caches + if (node instanceof FolderImpl) + { + ((FolderImpl) node).resetAll(false); + } + } + + /* (non-Javadoc) + * @see org.apache.jetspeed.cache.JetspeedCacheEventListener#notifyElementExpired(org.apache.jetspeed.cache.JetspeedCache, boolean, java.lang.Object, java.lang.Object) + */ + public void notifyElementExpired(final JetspeedCache cache, + final boolean local, final Object key, final Object element) + { + final NodeImpl node = (NodeImpl) element; + // reset internal FolderImpl caches + if (node instanceof FolderImpl) + { + ((FolderImpl) node).resetAll(false); + } + } + + /* (non-Javadoc) + * @see org.apache.jetspeed.cache.JetspeedCacheEventListener#notifyElementRemoved(org.apache.jetspeed.cache.JetspeedCache, boolean, java.lang.Object, java.lang.Object) + */ + public void notifyElementRemoved(final JetspeedCache cache, + final boolean local, final Object key, final Object element) + { + final NodeImpl node = (NodeImpl) element; + // reset internal FolderImpl caches + if (node instanceof FolderImpl) + { + ((FolderImpl) node).resetAll(false); + } + } + }, true); + + // setup remote path cache listener + pathCache.addEventListener(new JetspeedCacheEventListener() + { + + /* (non-Javadoc) + * @see org.apache.jetspeed.cache.JetspeedCacheEventListener#notifyElementAdded(org.apache.jetspeed.cache.JetspeedCache, boolean, java.lang.Object, java.lang.Object) + */ + public void notifyElementAdded(final JetspeedCache cache, + final boolean local, final Object key, final Object element) + { + } + + /* (non-Javadoc) + * @see org.apache.jetspeed.cache.JetspeedCacheEventListener#notifyElementChanged(org.apache.jetspeed.cache.JetspeedCache, boolean, java.lang.Object, java.lang.Object) + */ + public void notifyElementChanged(final JetspeedCache cache, + final boolean local, final Object key, final Object element) + { + } + + /* (non-Javadoc) + * @see org.apache.jetspeed.cache.JetspeedCacheEventListener#notifyElementEvicted(org.apache.jetspeed.cache.JetspeedCache, boolean, java.lang.Object, java.lang.Object) + */ + public void notifyElementEvicted(final JetspeedCache cache, + final boolean local, final Object key, final Object element) + { + } + + /* (non-Javadoc) + * @see org.apache.jetspeed.cache.JetspeedCacheEventListener#notifyElementExpired(org.apache.jetspeed.cache.JetspeedCache, boolean, java.lang.Object, java.lang.Object) + */ + public void notifyElementExpired(final JetspeedCache cache, + final boolean local, final Object key, final Object element) + { + } + + /* (non-Javadoc) + * @see org.apache.jetspeed.cache.JetspeedCacheEventListener#notifyElementRemoved(org.apache.jetspeed.cache.JetspeedCache, boolean, java.lang.Object, java.lang.Object) + */ + public void notifyElementRemoved(final JetspeedCache cache, + final boolean local, final Object key, final Object element) + { + final DatabasePageManagerCacheObject cacheObject = (DatabasePageManagerCacheObject) element; + // remove cache object from local oid cache + if (cacheObject != null) + { + final Identity oid = cacheObject.getId(); + final String path = cacheObject.getPath(); + if ((oid != null) || (path != null)) + { + synchronized (DatabasePageManagerCache.class) + { + if (oid != null) + { + // get object cached by oid + final NodeImpl node = (NodeImpl) cacheLookup(oid); + // reset internal FolderImpl caches + if (node instanceof FolderImpl) + { + ((FolderImpl) node).resetAll(false); + } + // remove from cache + oidCache.removeQuiet(oid); + } + if (path != null) + { + // lookup parent object cached by path and oid + final int pathLastSeparatorIndex = path + .lastIndexOf(Folder.PATH_SEPARATOR); + final String parentPath = ((pathLastSeparatorIndex > 0) ? path + .substring(0, pathLastSeparatorIndex) + : Folder.PATH_SEPARATOR); + final NodeImpl parentNode = cacheLookup(parentPath); + // reset internal FolderImpl caches in case element removed + if (parentNode instanceof FolderImpl) + { + ((FolderImpl) parentNode).resetAll(false); + } + // remove from cache + pathCache.removeQuiet(path); + } + } + } + } + } + }, false); } /** - * setPageManagerProxy + * Override page manager specified during create with proxy. * * @param proxy * proxied page manager interface used to inject into Folder @@ -99,293 +267,225 @@ /** * cacheLookup * - * Lookup node instances by unique path. + * Lookup object instances by unique path. * * @param path * node unique path * @return cached node */ - public synchronized static NodeImpl cacheLookup(String path) + public synchronized static NodeImpl cacheLookup(final String path) { if (path != null) { - // return valid object cached by path - return (NodeImpl) cacheValidateEntry((Entry) cacheByPath.get(path)); + // return valid object cached by path and oid + final CacheElement pathElement = pathCache.get(path); + if (pathElement != null) + { + final DatabasePageManagerCacheObject cacheObject = (DatabasePageManagerCacheObject) pathElement + .getContent(); + final NodeImpl node = (NodeImpl) cacheLookup(cacheObject + .getId()); + return node; + } + } return null; } /** - * cacheAdd - * - * Add object to cache and cache node instances by unique path; infuse nodes + * Add object to cache and cache instances by unique path; * loaded by OJB with page manager configuration. * * @param oid - * object/node indentity + * object/node identity * @param obj * object/node to cache */ - public synchronized static void cacheAdd(Identity oid, Object obj) + public synchronized static void cacheAdd(final Identity oid, + final Object obj) { - Entry entry = (Entry) cacheByOID.get(oid); - if (entry != null) + if (obj instanceof NodeImpl) { - // update cache LRU order - cacheLRUList.remove(entry); - cacheLRUList.addFirst(entry); - // refresh cache entry - entry.touch(); + final NodeImpl node = (NodeImpl) obj; + final String nodePath = node.getPath(); + + // add node to caches + oidCache.remove(oid); + final CacheElement element = oidCache.createElement(oid, node); + oidCache.put(element); + pathCache.remove(nodePath); + final CacheElement pathElement = pathCache.createElement(nodePath, + new DatabasePageManagerCacheObject(oid, nodePath)); + pathCache.put(pathElement); } - else - { - // create new cache entry and map - entry = new Entry(obj, oid); - cacheByOID.put(oid, entry); - cacheLRUList.addFirst(entry); - // infuse node with page manager configuration - // or the page manager itself and add to the - // paths cache - if (obj instanceof NodeImpl) - { - NodeImpl node = (NodeImpl) obj; - node.setConstraintsEnabled(constraintsEnabled); - node.setPermissionsEnabled(permissionsEnabled); - cacheByPath.put(node.getPath(), entry); - if (obj instanceof FolderImpl) - { - ((FolderImpl) obj).setPageManager(pageManager); - } - } - // trim cache as required to maintain cache size - while (cacheLRUList.size() > cacheSize) - { - cacheRemoveEntry((Entry) cacheLRUList.getLast(), true); - } - } } /** * cacheClear * - * Clear object and node caches. + * Clear object and path caches. */ public synchronized static void cacheClear() { - // remove all cache entries - Iterator removeIter = cacheLRUList.iterator(); - while (removeIter.hasNext()) + // remove all items from oid cache individually + // to ensure notifications are run to detach + // elements; do not invoke oidCache.clear() + final Iterator removeOidIter = oidCache.getKeys().iterator(); + while (removeOidIter.hasNext()) { - cacheRemoveEntry((Entry) removeIter.next(), false); + oidCache.remove((Identity) removeOidIter.next()); } - // clear cache - cacheByOID.clear(); - cacheLRUList.clear(); - cacheByPath.clear(); + // remove all items from path cache individually + // to avoid potential distributed clear invocation + // that would be performed against all peers; do + // not invoke pathCache.clear() + final Iterator removePathIter = pathCache.getKeys().iterator(); + while (removePathIter.hasNext()) + { + pathCache.removeQuiet(removePathIter.next()); + } } /** - * cacheLookup - * * Lookup objects by identity. * * @param oid * object identity * @return cached object */ - public synchronized static Object cacheLookup(Identity oid) + public synchronized static Object cacheLookup(final Identity oid) { if (oid != null) { // return valid object cached by oid - return cacheValidateEntry((Entry) cacheByOID.get(oid)); + final CacheElement element = oidCache.get(oid); + if (element != null) { return element.getContent(); } + } return null; } /** - * cacheRemove + * Remove identified object from object and path caches. * - * Remove identified object from object and node caches. - * * @param oid * object identity */ - public synchronized static void cacheRemove(Identity oid) + public synchronized static void cacheRemove(final Identity oid) { // remove from cache by oid - cacheRemoveEntry((Entry) cacheByOID.get(oid), true); + if (oid != null) + { + final NodeImpl node = (NodeImpl) cacheLookup(oid); + if (node != null) + { + // remove from caches + oidCache.remove(oid); + pathCache.remove(node.getPath()); + } + } } /** - * cacheRemove + * Remove identified object from object and path caches. * - * Remove identified object from object and node caches. - * * @param path * object path */ - public synchronized static void cacheRemove(String path) + public synchronized static void cacheRemove(final String path) { // remove from cache by path - cacheRemoveEntry((Entry) cacheByPath.get(path), true); + if (path != null) + { + final CacheElement pathElement = pathCache.get(path); + if (pathElement != null) + { + final DatabasePageManagerCacheObject cacheObject = (DatabasePageManagerCacheObject) pathElement + .getContent(); + // remove from caches + oidCache.remove(cacheObject.getId()); + pathCache.remove(path); + } + } } /** - * cacheValidateEntry - * - * Validate specified entry from cache, returning cached object if valid. - * - * @param entry - * cache entry to validate - * @return validated object from cache + * Reset cached security constraints in all cached objects. */ - private synchronized static Object cacheValidateEntry(Entry entry) + public synchronized static void resetCachedSecurityConstraints() { - if (entry != null) + // reset cached objects + final Iterator resetIter = oidCache.getKeys().iterator(); + while (resetIter.hasNext()) { - if (!entry.isExpired()) - { - // update cache LRU order - cacheLRUList.remove(entry); - cacheLRUList.addFirst(entry); - // refresh cache entry and return object - entry.touch(); - return entry.getObject(); - } - else - { - // remove expired entry - cacheRemoveEntry(entry, true); - } + final NodeImpl node = (NodeImpl) cacheLookup((Identity) resetIter + .next()); + node.resetCachedSecurityConstraints(); } - return null; } /** - * cacheRemoveEntry + * Get transactions registered on current thread * - * Remove specified entry from cache. - * - * @param entry - * cache entry to remove - * @param remove - * enable removal from cache + * @return transactions list */ - private synchronized static void cacheRemoveEntry(Entry entry, - boolean remove) + public static List getTransactions() { - if (entry != null) + List operations = (List) transactionedOperations.get(); + if (operations == null) { - Object removeObj = entry.getObject(); - if (remove) - { - // remove entry, optimize for removal from end - // of list as cache size is met or entries expire - if (cacheLRUList.getLast() == entry) - { - cacheLRUList.removeLast(); - } - else - { - int removeIndex = cacheLRUList.lastIndexOf(entry); - if (removeIndex > 0) - { - cacheLRUList.remove(removeIndex); - } - } - // unmap entry - cacheByOID.remove(entry.getOID()); - if (removeObj instanceof NodeImpl) - { - cacheByPath.remove(((NodeImpl) removeObj).getPath()); - } - } - // reset internal FolderImpl caches - if (removeObj instanceof FolderImpl) - { - ((FolderImpl) removeObj).resetAll(false); - } + operations = new LinkedList(); + transactionedOperations.set(operations); } + return operations; } /** - * resetCachedSecurityConstraints + * Register transactions with current thread * - * Reset cached security constraints in all cached node objects. + * @param operation transaction operation */ - public synchronized static void resetCachedSecurityConstraints() + public static void addTransaction(TransactionedOperation operation) { - // reset cached objects - Iterator resetIter = cacheLRUList.iterator(); - while (resetIter.hasNext()) - { - Object obj = ((Entry) resetIter.next()).getObject(); - if (obj instanceof NodeImpl) - { - ((NodeImpl) obj).resetCachedSecurityConstraints(); - } - } + final List transactions = getTransactions(); + transactions.add(operation); } /** - * Entry - * - * Cache entry class adding entry timestamp to track expiration + * Rollback transactions registered with current thread. */ - private static class Entry + public synchronized static void rollbackTransactions() { - - public long timestamp; - - public Object object; - - public Identity oid; - - public Entry(Object object, Identity oid) + final Iterator transactions = getTransactions().iterator(); + while (transactions.hasNext()) { - touch(); - this.object = object; - this.oid = oid; + final TransactionedOperation operation = (TransactionedOperation) transactions + .next(); + cacheRemove(operation.getPath()); } + } - public boolean isExpired() - { - if (DatabasePageManagerCache.cacheExpiresSeconds > 0) - { - long now = System.currentTimeMillis(); - if (((now - timestamp) / 1000) < DatabasePageManagerCache.cacheExpiresSeconds) - { - timestamp = now; - return false; - } - return true; - } - return false; - } + /** + * Clear transactions registered with current thread. + */ + public synchronized static void clearTransactions() + { + transactionedOperations.set(null); + } - public void touch() - { - if (DatabasePageManagerCache.cacheExpiresSeconds > 0) - { - timestamp = System.currentTimeMillis(); - } - } + /** + * Returns whether this cache is currently part of a distributed cache cluster. + * + * @return distributed flag + */ + public static boolean isDistributed() + { + return pathCache.isDistributed(); + } - public Object getObject() - { - return object; - } + // OJB Constructor - public Identity getOID() - { - return oid; - } - } - /** - * DatabasePageManagerCache - * * Construct a cache instance using OJB compliant signatures. * * @param broker @@ -397,6 +497,8 @@ { } + // OJB ObjectCache Implementation + /* * (non-Javadoc) * @@ -443,61 +545,24 @@ cacheRemove(oid); } + // Utilities + + /** + * Dump cache paths and oids to standard out. + */ + public synchronized static void dump() { - System.out.println("--------------------------1"); - Iterator dumpIter = cacheLRUList.iterator(); + System.out.println("--------------------------"); + final Iterator dumpIter = oidCache.getKeys().iterator(); while (dumpIter.hasNext()) { - Entry entry = (Entry) dumpIter.next(); - Object entryObject = entry.getObject(); - if (entryObject instanceof NodeImpl) - { - System.out.println("entry = " - + ((NodeImpl) entryObject).getPath() + ", " - + entry.getOID()); - } - else - { - System.out.println("entry = , " + entry.getOID()); - } + final Identity oid = (Identity) dumpIter.next(); + final NodeImpl node = (NodeImpl) cacheLookup(oid); + System.out.println("node=" + node.getPath() + ", oid=" + oid); } - System.out.println("--------------------------2"); - } - // TODO Findbugs - protected static ThreadLocal transactionedOperations = new ThreadLocal(); - - public static List getTransactions() - { - List operations = (List) transactionedOperations.get(); - if (operations == null) - { - operations = new LinkedList(); - transactionedOperations.set(operations); - } - - return operations; + System.out.println("--------------------------"); } - /** - * @param principal - * The principal to set. - */ - public static void addTransaction(TransactionedOperation operation) - { - List transactions = getTransactions(); - transactions.add(operation); - } - - public static void rollbackTransactions() - { - Iterator transactions = getTransactions().iterator(); - while (transactions.hasNext()) - { - TransactionedOperation operation = (TransactionedOperation) transactions - .next(); - cacheRemove(operation.getPath()); - } - } } Added: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManagerCacheObject.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManagerCacheObject.java (rev 0) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManagerCacheObject.java 2009-03-04 03:07:50 UTC (rev 1785) @@ -0,0 +1,120 @@ +/* + * 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.page.impl; + +import org.apache.jetspeed.cache.CacheElement; +import org.apache.jetspeed.cache.DistributedCacheObject; +import org.apache.ojb.broker.Identity; + +/** + * DatabasePageManagerCacheObject + * + * @author Randy Watler + * @version $Id: $ +*/ +public class DatabasePageManagerCacheObject implements DistributedCacheObject +{ + + private static final long serialVersionUID = 3575475610695136850L; + + // Members + + private Identity id = null; + + private String path = null; + + // Constructor + + /** + * Construct new cache object with id and path + * + * @param id + * @param path + */ + public DatabasePageManagerCacheObject(final Identity id, final String path) + { + this.path = path; + this.id = id; + } + + /** + * Serialization constructor + */ + public DatabasePageManagerCacheObject() + { + } + + // Implementation + + /* (non-Javadoc) + * @see org.apache.jetspeed.cache.DistributedCacheObject#notifyChange(int) + */ + public void notifyChange(int action) + { + switch (action) + { + case CacheElement.ActionAdded: + case CacheElement.ActionChanged: + case CacheElement.ActionRemoved: + case CacheElement.ActionEvicted: + case CacheElement.ActionExpired: + break; + default: + return; + } + return; + } + + /* (non-Javadoc) + * @see java.lang.Object#equals(java.lang.Object) + */ + public boolean equals(Object obj) + { + if ((obj != null) && (obj instanceof DatabasePageManagerCacheObject)) + { + final DatabasePageManagerCacheObject other = (DatabasePageManagerCacheObject) obj; + return getPath().equals(other.getPath()); + } + return false; + } + + /* (non-Javadoc) + * @see java.lang.Object#hashCode() + */ + public int hashCode() + { + return getPath().hashCode(); + } + + // Data access + + /** + * @return wrapper id + */ + public Identity getId() + { + return id; + } + + /** + * @return wrapper path + */ + public String getPath() + { + return path; + } +} Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/util/interceptors/PageManagerInterceptor.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/util/interceptors/PageManagerInterceptor.java 2009-02-25 13:40:55 UTC (rev 1784) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/util/interceptors/PageManagerInterceptor.java 2009-03-04 03:07:50 UTC (rev 1785) @@ -46,6 +46,11 @@ DatabasePageManagerCache.rollbackTransactions(); throw exp; } + finally + { + DatabasePageManagerCache.clearTransactions(); + } + } } Added: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/database-page-manager-base.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/database-page-manager-base.xml (rev 0) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/database-page-manager-base.xml 2009-03-04 03:07:50 UTC (rev 1785) @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + org.apache.jetspeed.page.PageManager + + + + + + + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + + + + + + + + + + + + + setPageManagerProxy + + + + + + + + Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/database-page-manager.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/database-page-manager.xml 2009-02-25 13:40:55 UTC (rev 1784) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/database-page-manager.xml 2009-03-04 03:07:50 UTC (rev 1785) @@ -18,65 +18,20 @@ --> + + - + - JETSPEED-INF/ojb/page-manager-repository.xml - - 128 - - 0 + JETSPEED-INF/ojb/page-manager-repository.xml - false + false - false + false + + + + - - - - org.apache.jetspeed.page.PageManager - - - - - - - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - - - - - - - - setPageManagerProxy - - - - - - - Added: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/distributed-ehcache.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/distributed-ehcache.xml (rev 0) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/distributed-ehcache.xml 2009-03-04 03:07:50 UTC (rev 1785) @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + Added: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/ehcache.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/ehcache.xml (rev 0) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/ehcache.xml 2009-03-04 03:07:50 UTC (rev 1785) @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/interceptors.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/interceptors.xml 2009-02-25 13:40:55 UTC (rev 1784) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/interceptors.xml 2009-03-04 03:07:50 UTC (rev 1785) @@ -16,35 +16,14 @@ limitations under the License. --> - + + - - - - - - - - - PROPAGATION_REQUIRED - - - - - - - - - - - + --> + Added: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/log4j-stdout.properties =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/log4j-stdout.properties (rev 0) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/log4j-stdout.properties 2009-03-04 03:07:50 UTC (rev 1785) @@ -0,0 +1,31 @@ +# 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. + +# ------------------------------------------------------------------------ +# +# Stdout Logging Configuration +# +# $Id: log4j.properties 722139 2008-12-01 17:22:03Z rwatler $ +# +# ------------------------------------------------------------------------ + +log4j.rootLogger = ERROR, stdout + +log4j.category.org.apache.jetspeed = INFO, stdout +log4j.additivity.org.apache.jetspeed = false + +log4j.appender.stdout = org.apache.log4j.ConsoleAppender +log4j.appender.stdout.layout = org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.conversionPattern = %d [%t] %-5p %c - %m%n Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/org/apache/jetspeed/page/TestTransactions.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/org/apache/jetspeed/page/TestTransactions.java 2009-02-25 13:40:55 UTC (rev 1784) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/org/apache/jetspeed/page/TestTransactions.java 2009-03-04 03:07:50 UTC (rev 1785) @@ -71,12 +71,6 @@ {"tx-page-manager.xml", "transaction.xml", "interceptors.xml"}; } - protected String[] getBootConfigurations() - { - return new String[] - {"boot/datasource.xml"}; - } - public void testTx() throws Exception { if (pageManager.folderExists("/")) Added: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/org/apache/jetspeed/page/cache/DatabasePageManagerServer.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/org/apache/jetspeed/page/cache/DatabasePageManagerServer.java (rev 0) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/org/apache/jetspeed/page/cache/DatabasePageManagerServer.java 2009-03-04 03:07:50 UTC (rev 1785) @@ -0,0 +1,223 @@ +/* + * 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.page.cache; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.util.Properties; + +import org.apache.commons.jexl.JexlContext; +import org.apache.commons.jexl.JexlHelper; +import org.apache.commons.jexl.Script; +import org.apache.commons.jexl.ScriptFactory; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.jetspeed.components.jndi.JetspeedTestJNDIComponent; +import org.apache.jetspeed.engine.JetspeedEngineConstants; +import org.apache.jetspeed.page.PageManager; +import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +/** + * DatabasePageManagerServer + * + * @author Randy Watler + * @version $Id: $ + */ +public class DatabasePageManagerServer +{ + + protected static Log log = LogFactory + .getLog(DatabasePageManagerServer.class); + + // Constants + + public static final String SCRIPT_RESULT_LINE_PREFIX = "> "; + + // Members + + private JetspeedTestJNDIComponent jndiDS; + + protected ClassPathXmlApplicationContext ctx; + + private String baseDir; + + private PageManager pageManager; + + private JexlContext jexlContext; + + private boolean exit; + + // Life cycle + + /** + * Initialize page manager server instance and script context. + * + * @throws Exception + */ + public void initialize() throws Exception + { + // setup jetspeed test datasource and component manager + jndiDS = new JetspeedTestJNDIComponent(); + jndiDS.setup(); + final String[] bootConfigurations = new String[] + {"boot/datasource.xml"}; + final String[] configurations = new String[] + {"database-page-manager.xml", "transaction.xml"}; + baseDir = System.getProperty("basedir"); + if ((baseDir == null) || (baseDir.length() == 0)) + { + baseDir = System.getProperty("user.dir"); + } + final String appRoot = baseDir + "/target/test-classes/webapp"; + final ApplicationContext bootContext = new ClassPathXmlApplicationContext( + bootConfigurations, true); + ctx = new ClassPathXmlApplicationContext(configurations, false, + bootContext); + PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer(); + Properties p = new Properties(); + p.setProperty(JetspeedEngineConstants.APPLICATION_ROOT_KEY, appRoot); + ppc.setProperties(p); + ctx.addBeanFactoryPostProcessor(ppc); + ctx.refresh(); + + // access page manager + pageManager = (PageManager) ctx.getBean("pageManager"); + + // craete jexl context + jexlContext = JexlHelper.createContext(); + jexlContext.getVars().put("pageManager", pageManager); + jexlContext.getVars().put("pageManagerServer", this); + + log.info("DatabasePageManager server initialized"); + } + + /** + * Terminate page manager server instance. + * + * @throws Exception + */ + public void terminate() throws Exception + { + // tear down jetspeed component manager and test datasource + ctx.close(); + jndiDS.tearDown(); + + log.info("DatabasePageManager server terminated"); + } + + // Implementation + + /** + * Execute a single line script against page manager server context. + * + * @param scriptLine jexl script + * @return script result line + */ + public String execute(final String scriptLine) + { + // execute script line and return result line + String resultLine = scriptLine; + try + { + final Script jexlScript = ScriptFactory.createScript(scriptLine); + final Object result = jexlScript.execute(jexlContext); + if (result != null) + { + resultLine += " -> " + result; + } + } + catch (final Exception e) + { + resultLine += " -> " + e; + } + return resultLine; + } + + /** + * Sets server exit flag. + */ + public void exit() + { + exit = true; + } + + // Data access + + /** + * @return server exit flag + */ + public boolean isExit() + { + return exit; + } + + // Application entry point + + /** + * Server main entry point. + * + * @param args not used + */ + public static void main(final String[] args) + { + try + { + // create and initialize server + final DatabasePageManagerServer server = new DatabasePageManagerServer(); + server.initialize(); + + // simple server reads script lines from standard + // input and writes results on standard output + final BufferedReader in = new BufferedReader(new InputStreamReader( + System.in)); + final PrintWriter out = new PrintWriter(System.out, true); + do + { + // read single line scripts to execute + String scriptLine = in.readLine(); + if (scriptLine != null) + { + scriptLine = scriptLine.trim(); + String resultLine = ""; + if (scriptLine.length() > 0) + { + // execute script + resultLine = server.execute(scriptLine); + } + + // write prefixed single line results + out.println(SCRIPT_RESULT_LINE_PREFIX + resultLine); + } + else + { + // exit server on input EOF + server.exit(); + } + } while (!server.isExit()); + + // terminate server + server.terminate(); + } + catch (final Throwable t) + { + log.error("Unexpected exception: " + t, t); + } + } +} Added: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/org/apache/jetspeed/page/cache/TestDatabasePageManagerCache.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/org/apache/jetspeed/page/cache/TestDatabasePageManagerCache.java (rev 0) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/org/apache/jetspeed/page/cache/TestDatabasePageManagerCache.java 2009-03-04 03:07:50 UTC (rev 1785) @@ -0,0 +1,692 @@ +/* + * 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.page.cache; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.net.URI; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.jetspeed.cache.impl.EhCacheConfigResource; + +/** + * TestDatabasePageManagerCache + * + * @author Randy Watler + * @version $Id: $ + */ +public class TestDatabasePageManagerCache extends TestCase +{ + + protected static Log log = LogFactory + .getLog(TestDatabasePageManagerCache.class); + + // Members + + private String osExecutableExtension; + + private String fileSeparator; + + private File javaExecutablePath; + + private String classPathSeparator; + + private File projectDirectoryPath; + + private Map systemProperties; + + private String classPath; + + // Test methods + + /** + * Tests distributed cache operation for DatabasePageManager + */ + public void testDatabasePageManagerCache() + { + String result; + + // create and start servers + final TestProgram server0 = new TestProgram("server-0", + DatabasePageManagerServer.class, 0); + final TestProgram server1 = new TestProgram("server-1", + DatabasePageManagerServer.class, 1); + try + { + // start servers + server0.start(); + server1.start(); + + // wait until servers have started + server0.execute(""); + server1.execute(""); + + // check to ensure servers have distributed page manager caches + boolean server0Distributed = false; + boolean server1Distributed = false; + final long distributedCheckStarted = System.currentTimeMillis(); + do + { + // check servers + if (!server0Distributed) + { + result = server0.execute("pageManager.isDistributed();"); + assertTrue(result.indexOf("Exception") == -1); + server0Distributed = result.endsWith("true"); + } + if (!server1Distributed) + { + result = server1.execute("pageManager.isDistributed();"); + assertTrue(result.indexOf("Exception") == -1); + server1Distributed = result.endsWith("true"); + } + + // wait if servers not distributed + if (!server0Distributed || !server1Distributed) + { + Thread.sleep(250); + } + } while ((!server0Distributed || !server1Distributed) + && (System.currentTimeMillis() - distributedCheckStarted < 5000)); + if (!server0Distributed && !server1Distributed) + { + System.out + .println("Server page managers not distributed: possible system limitation... test skipped"); + log + .warn("Server page managers not distributed: possible system limitation... test skipped"); + return; + } + assertTrue(server0Distributed); + assertTrue(server1Distributed); + + // clean and setup database page managers + result = server0 + .execute("removeRootFolder = pageManager.getFolder(\"/\");"); + if (result.indexOf("FolderNotFoundException") == -1) + { + result = server0 + .execute("pageManager.removeFolder(removeRootFolder);"); + assertTrue(result.indexOf("Exception") == -1); + } + result = server0.execute("pageManager.reset();"); + assertTrue(result.indexOf("Exception") == -1); + result = server1.execute("pageManager.reset();"); + assertTrue(result.indexOf("Exception") == -1); + + // create folder and documents in first page manager + result = server0.execute("folder = pageManager.newFolder(\"/\");"); + assertTrue(result.indexOf("Exception") == -1); + result = server0.execute("folder.setTitle(\"Root Folder\");"); + assertTrue(result.indexOf("Exception") == -1); + result = server0.execute("pageManager.updateFolder(folder);"); + assertTrue(result.indexOf("Exception") == -1); + result = server0 + .execute("page = pageManager.newPage(\"/default-page.psml\");"); + assertTrue(result.indexOf("Exception") == -1); + result = server0.execute("page.setTitle(\"Default Page\");"); + assertTrue(result.indexOf("Exception") == -1); + result = server0.execute("pageManager.updatePage(page);"); + assertTrue(result.indexOf("Exception") == -1); + result = server0 + .execute("page = pageManager.newPage(\"/another-page.psml\");"); + assertTrue(result.indexOf("Exception") == -1); + result = server0.execute("page.setTitle(\"Another Page\");"); + assertTrue(result.indexOf("Exception") == -1); + result = server0.execute("pageManager.updatePage(page);"); + assertTrue(result.indexOf("Exception") == -1); + result = server0 + .execute("page = pageManager.newPage(\"/some-other-page.psml\");"); + assertTrue(result.indexOf("Exception") == -1); + result = server0.execute("page.setTitle(\"Some Other Page\");"); + assertTrue(result.indexOf("Exception") == -1); + result = server0.execute("pageManager.updatePage(page);"); + assertTrue(result.indexOf("Exception") == -1); + result = server0 + .execute("link = pageManager.newLink(\"/default.link\");"); + assertTrue(result.indexOf("Exception") == -1); + result = server0.execute("link.setTitle(\"Default Link\");"); + assertTrue(result.indexOf("Exception") == -1); + result = server0 + .execute("link.setUrl(\"http://www.default.org/\");"); + assertTrue(result.indexOf("Exception") == -1); + result = server0.execute("pageManager.updateLink(link);"); + assertTrue(result.indexOf("Exception") == -1); + result = server0 + .execute("folder = pageManager.newFolder(\"/deep-0\");"); + assertTrue(result.indexOf("Exception") == -1); + result = server0.execute("folder.setTitle(\"Deep 0 Folder\");"); + assertTrue(result.indexOf("Exception") == -1); + result = server0.execute("pageManager.updateFolder(folder);"); + assertTrue(result.indexOf("Exception") == -1); + result = server0 + .execute("page = pageManager.newPage(\"/deep-0/deep-page-0.psml\");"); + assertTrue(result.indexOf("Exception") == -1); + result = server0.execute("page.setTitle(\"Deep Page 0\");"); + assertTrue(result.indexOf("Exception") == -1); + result = server0.execute("pageManager.updatePage(page);"); + assertTrue(result.indexOf("Exception") == -1); + result = server0 + .execute("folder = pageManager.newFolder(\"/deep-1\");"); + assertTrue(result.indexOf("Exception") == -1); + result = server0.execute("folder.setTitle(\"Deep 1 Folder\");"); + assertTrue(result.indexOf("Exception") == -1); + result = server0.execute("pageManager.updateFolder(folder);"); + assertTrue(result.indexOf("Exception") == -1); + result = server0 + .execute("page = pageManager.newPage(\"/deep-1/deep-page-1.psml\");"); + assertTrue(result.indexOf("Exception") == -1); + result = server0.execute("page.setTitle(\"Deep Page 1\");"); + assertTrue(result.indexOf("Exception") == -1); + result = server0.execute("pageManager.updatePage(page);"); + assertTrue(result.indexOf("Exception") == -1); + result = server0 + .execute("pageSecurity = pageManager.newPageSecurity();"); + assertTrue(result.indexOf("Exception") == -1); + result = server0 + .execute("pageManager.updatePageSecurity(pageSecurity);"); + assertTrue(result.indexOf("Exception") == -1); + + // populate folders and documents in second page manager + result = server1 + .execute("pageManager.getFolder(\"/\").getTitle();"); + assertTrue(result.endsWith("Root Folder")); + result = server1 + .execute("pageManager.getPage(\"/default-page.psml\").getTitle();"); + assertTrue(result.endsWith("Default Page")); + result = server1 + .execute("pageManager.getPage(\"/another-page.psml\").getTitle();"); + assertTrue(result.endsWith("Another Page")); + result = server1 + .execute("pageManager.getPage(\"/some-other-page.psml\").getTitle();"); + assertTrue(result.endsWith("Some Other Page")); + result = server1 + .execute("pageManager.getLink(\"/default.link\").getTitle();"); + assertTrue(result.endsWith("Default Link")); + result = server1 + .execute("pageManager.getFolder(\"/deep-0\").getTitle();"); + assertTrue(result.endsWith("Deep 0 Folder")); + result = server1 + .execute("pageManager.getPage(\"/deep-0/deep-page-0.psml\").getTitle();"); + assertTrue(result.endsWith("Deep Page 0")); + result = server1 + .execute("pageManager.getFolder(\"/deep-1\").getTitle();"); + assertTrue(result.endsWith("Deep 1 Folder")); + result = server1 + .execute("pageManager.getPage(\"/deep-1/deep-page-1.psml\").getTitle();"); + assertTrue(result.endsWith("Deep Page 1")); + result = server1 + .execute("pageManager.getPageSecurity().getPath();"); + assertTrue(result.endsWith("/page.security")); + + // update/remove objects in second page manager + result = server1 + .execute("page = pageManager.getPage(\"/default-page.psml\");"); + assertTrue(result.indexOf("Exception") == -1); + result = server1.execute("page.setTitle(\"Edited Default Page\");"); + assertTrue(result.indexOf("Exception") == -1); + result = server1.execute("pageManager.updatePage(page);"); + assertTrue(result.indexOf("Exception") == -1); + result = server1 + .execute("page = pageManager.getPage(\"/some-other-page.psml\");"); + assertTrue(result.indexOf("Exception") == -1); + result = server1.execute("pageManager.removePage(page);"); + assertTrue(result.indexOf("Exception") == -1); + result = server1 + .execute("link = pageManager.getLink(\"/default.link\");"); + assertTrue(result.indexOf("Exception") == -1); + result = server1.execute("link.setTitle(\"Edited Default Link\");"); + assertTrue(result.indexOf("Exception") == -1); + result = server1.execute("pageManager.updateLink(link);"); + assertTrue(result.indexOf("Exception") == -1); + result = server1 + .execute("folder = pageManager.getFolder(\"/deep-0\");"); + assertTrue(result.indexOf("Exception") == -1); + result = server1 + .execute("folder.setTitle(\"Edited Deep 0 Folder\");"); + assertTrue(result.indexOf("Exception") == -1); + result = server1.execute("pageManager.updateFolder(folder);"); + assertTrue(result.indexOf("Exception") == -1); + result = server1 + .execute("folder = pageManager.getFolder(\"/deep-1\");"); + assertTrue(result.indexOf("Exception") == -1); + result = server1.execute("pageManager.removeFolder(folder);"); + assertTrue(result.indexOf("Exception") == -1); + + // test objects in both page managers for cache coherency + result = server1 + .execute("pageManager.getPage(\"/default-page.psml\").getTitle();"); + assertTrue(result.endsWith("Edited Default Page")); + result = server1 + .execute("pageManager.getPage(\"/some-other-page.psml\");"); + assertTrue(result.indexOf("PageNotFoundException") != -1); + result = server1 + .execute("pageManager.getFolder(\"/\").getPages().size();"); + assertTrue(result.endsWith("2")); + result = server1 + .execute("pageManager.getLink(\"/default.link\").getTitle();"); + assertTrue(result.endsWith("Edited Default Link")); + result = server1 + .execute("pageManager.getFolder(\"/deep-0\").getTitle();"); + assertTrue(result.endsWith("Edited Deep 0 Folder")); + result = server1 + .execute("pageManager.getPage(\"/deep-1/deep-page-1.psml\");"); + assertTrue(result.indexOf("PageNotFoundException") != -1); + result = server1.execute("pageManager.getFolder(\"/deep-1\");"); + assertTrue(result.indexOf("FolderNotFoundException") != -1); + result = server1 + .execute("pageManager.getFolder(\"/\").getFolders().size();"); + assertTrue(result.endsWith("1")); + boolean defaultPageUpdated = false; + boolean someOtherPageRemoved = false; + boolean rootFolderPagesCountTwo = false; + boolean defaultLinkUpdated = false; + boolean deep0FolderUpdated = false; + boolean deepPage1Removed = false; + boolean deep1FolderRemoved = false; + boolean rootFolderFoldersCountOne = false; + final long coherencyCheckStarted = System.currentTimeMillis(); + do + { + // check cache coherency + if (!defaultPageUpdated) + { + result = server0 + .execute("pageManager.getPage(\"/default-page.psml\").getTitle();"); + defaultPageUpdated = result.endsWith("Edited Default Page"); + } + if (!someOtherPageRemoved) + { + result = server0 + .execute("pageManager.getPage(\"/some-other-page.psml\");"); + someOtherPageRemoved = (result + .indexOf("PageNotFoundException") != -1); + } + if (!rootFolderPagesCountTwo) + { + result = server0 + .execute("pageManager.getFolder(\"/\").getPages().size();"); + rootFolderPagesCountTwo = result.endsWith("2"); + } + if (!defaultLinkUpdated) + { + result = server0 + .execute("pageManager.getLink(\"/default.link\").getTitle();"); + defaultLinkUpdated = result.endsWith("Edited Default Link"); + } + if (!deep0FolderUpdated) + { + result = server0 + .execute("pageManager.getFolder(\"/deep-0\").getTitle();"); + deep0FolderUpdated = result + .endsWith("Edited Deep 0 Folder"); + } + if (!deepPage1Removed) + { + result = server0 + .execute("pageManager.getPage(\"/deep-1/deep-page-1.psml\");"); + deepPage1Removed = (result.indexOf("PageNotFoundException") != -1); + } + if (!deep1FolderRemoved) + { + result = server0 + .execute("pageManager.getFolder(\"/deep-1\");"); + deep1FolderRemoved = (result + .indexOf("FolderNotFoundException") != -1); + } + if (!rootFolderFoldersCountOne) + { + result = server0 + .execute("pageManager.getFolder(\"/\").getFolders().size();"); + rootFolderFoldersCountOne = result.endsWith("1"); + } + + // wait for cache coherency + if (!defaultPageUpdated || !someOtherPageRemoved + || !rootFolderPagesCountTwo || !defaultLinkUpdated + || !deep0FolderUpdated || !deepPage1Removed + || !deep1FolderRemoved || !rootFolderFoldersCountOne) + { + Thread.sleep(250); + } + } while ((!defaultPageUpdated || !someOtherPageRemoved + || !rootFolderPagesCountTwo || !defaultLinkUpdated + || !deep0FolderUpdated || !deepPage1Removed + || !deep1FolderRemoved || !rootFolderFoldersCountOne) + && (System.currentTimeMillis() - coherencyCheckStarted < 5000)); + assertTrue(defaultPageUpdated); + assertTrue(someOtherPageRemoved); + assertTrue(rootFolderPagesCountTwo); + assertTrue(defaultLinkUpdated); + assertTrue(deep0FolderUpdated); + assertTrue(deepPage1Removed); + assertTrue(deep1FolderRemoved); + assertTrue(rootFolderFoldersCountOne); + + // reset database page managers + result = server0.execute("pageManager.reset();"); + assertTrue(result.indexOf("Exception") == -1); + result = server1.execute("pageManager.reset();"); + assertTrue(result.indexOf("Exception") == -1); + } + catch (final Exception e) + { + log.error("Server test exception: " + e, e); + fail("Server test exception: " + e); + } + finally + { + // silently shutdown servers + try + { + server0.shutdown(); + } + catch (final Exception e) + { + log.error("Server shutdown exception: " + e, e); + } + try + { + server1.shutdown(); + } + catch (final Exception e) + { + log.error("Server shutdown exception: " + e, e); + } + } + } + + // Implementation classes + + protected class TestProgram + { + + private String name; + + private Class mainClass; + + private int index; + + private Process process; + + private BufferedWriter processInput; + + private BufferedReader processOutput; + + public TestProgram(final String name, final Class mainClass, + final int index) + { + this.name = name; + this.mainClass = mainClass; + this.index = index; + } + + public synchronized void start() throws IOException + { + assertNull(process); + + // configure launcher with paths, properties, and indexed properties + final List commandAndArgs = new ArrayList(); + commandAndArgs.add(javaExecutablePath.getCanonicalPath()); + for (Iterator iter = systemProperties.entrySet().iterator(); iter + .hasNext();) + { + final Map.Entry systemProperty = (Map.Entry) iter.next(); + final String propertyName = (String) systemProperty.getKey(); + String propertyValue = (String) systemProperty.getValue(); + if (propertyName + .equals(EhCacheConfigResource.EHCACHE_PORT_PROP_NAME)) + { + propertyValue = Integer.toString(Integer + .parseInt(propertyValue) + + index); + } + commandAndArgs.add("-D" + propertyName + "=" + propertyValue); + } + commandAndArgs.add("-Dlog4j.configuration=log4j-stdout.properties"); + commandAndArgs.add("-classpath"); + commandAndArgs.add(classPath); + commandAndArgs.add(mainClass.getName()); + + // launch test programs + process = Runtime.getRuntime().exec( + (String[]) commandAndArgs.toArray(new String[commandAndArgs + .size()]), null, projectDirectoryPath); + + // setup I/O for process + processInput = new BufferedWriter(new OutputStreamWriter(process + .getOutputStream())); + processOutput = new BufferedReader(new InputStreamReader(process + .getInputStream())); + + // read messages from process + for (String line; (processOutput.ready() && ((line = processOutput + .readLine()) != null));) + { + logProcessLine(line); + } + } + + public synchronized String execute(final String scriptLine) + throws IOException + { + assertNotNull(process); + + // read messages from process + for (String line; (processOutput.ready() && ((line = processOutput + .readLine()) != null));) + { + logProcessLine(line); + } + + // write script line to process + processInput.write(scriptLine); + processInput.newLine(); + processInput.flush(); + + // read result or messages from process + String resultLine = null; + for (String line; ((line = processOutput.readLine()) != null);) + { + if (!line + .startsWith(DatabasePageManagerServer.SCRIPT_RESULT_LINE_PREFIX)) + { + logProcessLine(line); + } + else + { + resultLine = line; + break; + } + } + if (resultLine == null) { throw new IOException( + "Unexpected EOF from process output"); } + return resultLine; + } + + public synchronized void shutdown() throws IOException, + InterruptedException + { + assertNotNull(process); + + // start thread to destroy process on timeout + final Thread destroyThread = new Thread(new Runnable() + { + + public void run() + { + try + { + Thread.sleep(10000); + if (process != null) + { + log.warn("Forcibly stopping " + name); + process.destroy(); + } + } + catch (final Exception e) + { + } + } + }, "DestroyThread"); + destroyThread.setDaemon(true); + destroyThread.start(); + + // close process input to shutdown server and read messages + processInput.close(); + for (String line; ((line = processOutput.readLine()) != null);) + { + logProcessLine(line); + } + + // join on process completion + process.waitFor(); + processOutput.close(); + process = null; + + // join on destroy thread + destroyThread.interrupt(); + destroyThread.join(); + } + + private void logProcessLine(final String line) + { + if ((line.indexOf("ERROR") == -1) + && ((line.indexOf("ERROR") != -1) + || (line.indexOf("Exception") != -1) || line + .startsWith(" at "))) + { + log.error("{" + name + "} " + line); + } + else + { + log.info("{" + name + "} " + line); + } + } + } + + // TestCase implementation + + /* (non-Javadoc) + * @see junit.framework.TestCase#setUp() + */ + protected void setUp() throws Exception + { + // setup cache properties + EhCacheConfigResource + .getInstance( + EhCacheConfigResource.EHCACHE_CONFIG_RESOURCE_DISTRIBUTED_CACHE, + true); + + // environment setup + osExecutableExtension = (System.getProperty("os.name").startsWith( + "Windows") ? ".exe" : ""); + fileSeparator = System.getProperty("file.separator"); + javaExecutablePath = new File(System.getProperty("java.home") + + fileSeparator + "bin" + fileSeparator + "java" + + osExecutableExtension); + classPathSeparator = System.getProperty("path.separator"); + projectDirectoryPath = new File(System.getProperty("basedir")); + systemProperties = new HashMap(); + for (Iterator iter = System.getProperties().entrySet().iterator(); iter + .hasNext();) + { + final Map.Entry systemProperty = (Map.Entry) iter.next(); + final String propertyName = systemProperty.getKey().toString(); + final String propertyValue = systemProperty.getValue().toString(); + if (propertyName.startsWith("org.apache.jetspeed.") + || propertyName.startsWith("java.net.") + || propertyName.equals("basedir")) + { + systemProperties.put(propertyName, propertyValue); + } + } + + // construct launcher classpath from current class loader + final StringBuffer classPathBuilder = new StringBuffer(); + final ClassLoader loader = this.getClass().getClassLoader(); + assertTrue(loader instanceof URLClassLoader); + final URLClassLoader urlLoader = (URLClassLoader) loader; + assertNotNull(urlLoader.getURLs()); + for (int i = 0; (i < urlLoader.getURLs().length); i++) + { + final URL pathURL = urlLoader.getURLs()[i]; + + // convert path URL to file path + final String path = new File(new URI(pathURL.toString())) + .getCanonicalPath(); + + // build class path + if (classPathBuilder.length() > 0) + { + classPathBuilder.append(classPathSeparator); + } + classPathBuilder.append(path); + } + classPath = classPathBuilder.toString(); + assertTrue(classPath.length() > 0); + + // continue setup + super.setUp(); + } + + /* (non-Javadoc) + * @see junit.framework.TestCase#tearDown() + */ + protected void tearDown() throws Exception + { + super.tearDown(); + } + + // Application entry point + + /** + * Start the tests. + * + * @param args not used + */ + public static void main(final String[] args) + { + junit.awtui.TestRunner.main(new String[] + {TestDatabasePageManagerCache.class.getName()}); + } + + /** + * Creates the test suite. + * + * @return a test suite that includes all methods starting with "test" + */ + public static Test suite() + { + return new TestSuite(TestDatabasePageManagerCache.class); + } +} Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/secure-database-page-manager.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/secure-database-page-manager.xml 2009-02-25 13:40:55 UTC (rev 1784) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/secure-database-page-manager.xml 2009-03-04 03:07:50 UTC (rev 1785) @@ -18,65 +18,20 @@ --> + + - + JETSPEED-INF/ojb/page-manager-repository.xml - - 128 - - 0 - false + false - true + true + + + + - - - - org.apache.jetspeed.page.PageManager - - - - - - - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - - - - - - - - setPageManagerProxy - - - - - - - Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/secure-permissions-database-page-manager.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/secure-permissions-database-page-manager.xml 2009-02-25 13:40:55 UTC (rev 1784) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/secure-permissions-database-page-manager.xml 2009-03-04 03:07:50 UTC (rev 1785) @@ -18,65 +18,20 @@ --> + + - + JETSPEED-INF/ojb/page-manager-repository.xml - - 128 - - 0 - true + true - false + false + + + + - - - - org.apache.jetspeed.page.PageManager - - - - - - - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - - - - - - - - setPageManagerProxy - - - - - - - Deleted: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/tx-page-manager.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/tx-page-manager.xml 2009-02-25 13:40:55 UTC (rev 1784) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/tx-page-manager.xml 2009-03-04 03:07:50 UTC (rev 1785) @@ -1,82 +0,0 @@ - - - - - - - - - JETSPEED-INF/ojb/page-manager-repository.xml - - 128 - - 0 - - false - - false - - - - - - org.apache.jetspeed.page.PageManager - - - - - - - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - - - - - - - - setPageManagerProxy - - - - - - - - Added: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/db-ojb/distributed-ehcache.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/db-ojb/distributed-ehcache.xml (rev 0) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/db-ojb/distributed-ehcache.xml 2009-03-04 03:07:50 UTC (rev 1785) @@ -0,0 +1,543 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/db-ojb/ehcache.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/db-ojb/ehcache.xml 2009-02-25 13:40:55 UTC (rev 1784) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/db-ojb/ehcache.xml 2009-03-04 03:07:50 UTC (rev 1785) @@ -135,13 +135,7 @@ * stashRemoteCachePeers (optional) - specify "true" or "false". Defaults to true. CachePeer objects are stashed for performance. * jndiUrls (mandatory) - specify a pipe separated list of jndiUrls, - in the form protocol//hostname:port - - + in the form protocol//hostname:port --> @@ -185,9 +179,6 @@ net.sf.ehcache.distribution.JNDIManualRMICacheManagerPeerProviderFactoryerFactory. Properties for JNDIRMICacheManagerPeerListenerFactory are the same as RMICacheManagerPeerListenerFactory. - - --> @@ -332,8 +323,7 @@ If there are more than 10000 elements it will overflow to the disk cache, which in this configuration will go to wherever java.io.tmp is - defined on your system. On a standard Linux system this will be /tmp" - + defined on your system. On a standard Linux system this will be /tmp timeToIdleSeconds and timeToLiveSeconds to live are both set at 8 hours (28800) this is the default setting for portlets who set their expiration cache as -1 --> @@ -355,13 +345,6 @@ timeToIdleSeconds="28800" timeToLiveSeconds="28800" memoryStoreEvictionPolicy="LFU"> - @@ -383,13 +366,6 @@ timeToIdleSeconds="28800" timeToLiveSeconds="28800" memoryStoreEvictionPolicy="LFU"> - - @@ -541,4 +510,24 @@ memoryStoreEvictionPolicy="LFU" /> + + + + + + Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/import/assembly/import-page-manager.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/import/assembly/import-page-manager.xml 2009-02-25 13:40:55 UTC (rev 1784) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/import/assembly/import-page-manager.xml 2009-03-04 03:07:50 UTC (rev 1785) @@ -24,14 +24,14 @@ class="org.apache.jetspeed.page.impl.DatabasePageManager"> JETSPEED-INF/ojb/page-manager-repository.xml - - 128 - - 0 - false + false - false + false + + + + Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/import/build.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/import/build.xml 2009-02-25 13:40:55 UTC (rev 1784) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/import/build.xml 2009-03-04 03:07:50 UTC (rev 1785) @@ -89,6 +89,7 @@ + Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/import/export.properties =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/import/export.properties 2009-02-25 13:40:55 UTC (rev 1784) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/import/export.properties 2009-03-04 03:07:50 UTC (rev 1785) @@ -16,7 +16,7 @@ # comma-separated list of boot assemblies for Spring boot.assemblies = repository-datasource-spring.xml # comma-separated list of assemblies for Spring -assemblies = import-page-manager.xml, transaction.xml, interceptors.xml +assemblies = import-page-manager.xml, transaction.xml, interceptors.xml, cache.xml # root folder to start importing from root.folder = / # overwrite folders flag, set to true to replace existing folders Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/import/import.properties =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/import/import.properties 2009-02-25 13:40:55 UTC (rev 1784) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/import/import.properties 2009-03-04 03:07:50 UTC (rev 1785) @@ -16,7 +16,7 @@ # comma-separated list of boot assemblies for Spring boot.assemblies = repository-datasource-spring.xml # comma-separated list of assemblies for Spring -assemblies = import-page-manager.xml, transaction.xml, interceptors.xml +assemblies = import-page-manager.xml, transaction.xml, interceptors.xml, cache.xml # root folder to start exporting from root.folder = / # overwrite folders flag, set to true to replace existing folders Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/jetspeed-api/src/java/org/apache/jetspeed/cache/JetspeedCache.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/jetspeed-api/src/java/org/apache/jetspeed/cache/JetspeedCache.java 2009-02-25 13:40:55 UTC (rev 1784) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/jetspeed-api/src/java/org/apache/jetspeed/cache/JetspeedCache.java 2009-03-04 03:07:50 UTC (rev 1785) @@ -145,4 +145,11 @@ * @return the size of the cache */ int getSize(); + + /** + * Returns whether this cache is currently part of a distributed cache cluster. + * + * @return distributed flag + */ + boolean isDistributed(); } \ No newline at end of file Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/jetspeed-api/src/java/org/apache/jetspeed/page/PageManager.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/jetspeed-api/src/java/org/apache/jetspeed/page/PageManager.java 2009-02-25 13:40:55 UTC (rev 1784) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/jetspeed-api/src/java/org/apache/jetspeed/page/PageManager.java 2009-03-04 03:07:50 UTC (rev 1785) @@ -781,4 +781,13 @@ * @return */ public boolean checkConstraint(String securityConstraintName, String actions); + + /** + * Returns whether the page manager cache is currently part of a distributed + * cache cluster. + * + * @return distributed flag + */ + public boolean isDistributed(); + } Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/maven.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/maven.xml 2009-02-25 13:40:55 UTC (rev 1784) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/maven.xml 2009-03-04 03:07:50 UTC (rev 1785) @@ -348,6 +348,8 @@ file="./src/webapp/WEB-INF/assembly/transaction.xml"/> + @@ -385,6 +387,8 @@ file="./src/webapp/WEB-INF/assembly/transaction.xml"/> + Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/src/webapp/WEB-INF/assembly/alternate/db-page-manager.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/src/webapp/WEB-INF/assembly/alternate/db-page-manager.xml 2009-02-25 13:40:55 UTC (rev 1784) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/src/webapp/WEB-INF/assembly/alternate/db-page-manager.xml 2009-03-04 03:07:50 UTC (rev 1785) @@ -25,15 +25,14 @@ class="org.apache.jetspeed.page.impl.DatabasePageManager"> JETSPEED-INF/ojb/page-manager-repository.xml - - 128 - - - -1 - false + false - true + true + + + + Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/src/webapp/WEB-INF/assembly/cache.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/src/webapp/WEB-INF/assembly/cache.xml 2009-02-25 13:40:55 UTC (rev 1784) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/src/webapp/WEB-INF/assembly/cache.xml 2009-03-04 03:07:50 UTC (rev 1785) @@ -18,11 +18,14 @@ --> + + + + + - + + + + + + + + + + + + + + + + + + + From svnnotify @ sourceforge.jp Wed Mar 4 13:23:20 2009 From: svnnotify @ sourceforge.jp (svnnotify @ sourceforge.jp) Date: Wed, 04 Mar 2009 13:23:20 +0900 Subject: [pal-cvs 4051] [1786] applied patch 'r725897: M1 Build Fixes For Distributed Cache Backport' Message-ID: <1236140600.803605.24237.nullmailer@users.sourceforge.jp> Revision: 1786 http://svn.sourceforge.jp/view?root=pal&view=rev&rev=1786 Author: sone Date: 2009-03-04 13:23:20 +0900 (Wed, 04 Mar 2009) Log Message: ----------- applied patch 'r725897: M1 Build Fixes For Distributed Cache Backport' Modified Paths: -------------- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/project.xml pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/core-build.xml pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/src/webapp/WEB-INF/assembly/cache.xml -------------- next part -------------- Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/project.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/project.xml 2009-03-04 03:07:50 UTC (rev 1785) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/project.xml 2009-03-04 04:23:20 UTC (rev 1786) @@ -95,6 +95,7 @@ **/PageManagerTestShared.java **/DirectoryXMLTransform.java + **/DatabasePageManagerServer.java @@ -115,6 +116,10 @@ ${basedir}/../../etc/db-ojb + + **/ehcache.xml + **/distributed-ehcache.xml + ${basedir}/../../src/webapp/WEB-INF/assembly Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/core-build.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/core-build.xml 2009-03-04 03:07:50 UTC (rev 1785) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/core-build.xml 2009-03-04 04:23:20 UTC (rev 1786) @@ -106,11 +106,25 @@ ehcache - 1.2.4 + 1.5.0 true + + backport-util-concurrent + 3.1 + + true + + + + jsr107cache + 1.0 + + true + + @@ -251,6 +265,13 @@ false + + commons-jexl + 1.1 + + false + + Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/src/webapp/WEB-INF/assembly/cache.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/src/webapp/WEB-INF/assembly/cache.xml 2009-03-04 03:07:50 UTC (rev 1785) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/src/webapp/WEB-INF/assembly/cache.xml 2009-03-04 04:23:20 UTC (rev 1786) @@ -20,6 +20,7 @@ + From svnnotify @ sourceforge.jp Wed Mar 4 13:36:19 2009 From: svnnotify @ sourceforge.jp (svnnotify @ sourceforge.jp) Date: Wed, 04 Mar 2009 13:36:19 +0900 Subject: [pal-cvs 4052] [1787] applied patch r725921: patched failing test case under M1 Message-ID: <1236141379.965631.12661.nullmailer@users.sourceforge.jp> Revision: 1787 http://svn.sourceforge.jp/view?root=pal&view=rev&rev=1787 Author: sone Date: 2009-03-04 13:36:19 +0900 (Wed, 04 Mar 2009) Log Message: ----------- applied patch r725921: patched failing test case under M1 Modified Paths: -------------- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/portal/src/test/org/apache/jetspeed/container/state/TestNavigationalState.java -------------- next part -------------- Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/portal/src/test/org/apache/jetspeed/container/state/TestNavigationalState.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/portal/src/test/org/apache/jetspeed/container/state/TestNavigationalState.java 2009-03-04 04:23:20 UTC (rev 1786) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/portal/src/test/org/apache/jetspeed/container/state/TestNavigationalState.java 2009-03-04 04:36:19 UTC (rev 1787) @@ -131,6 +131,9 @@ portletApplicationMock.expects(new AnyArgumentsMatcher()).method( "getId").withNoArguments().will( new ReturnStub(new JetspeedLongObjectID(1))); + portletApplicationMock.expects(new AnyArgumentsMatcher()).method( + "getName").withNoArguments().will(new ReturnStub("app1")); + portletDefinitionMock.expects(new AnyArgumentsMatcher()).method( "getPortletApplicationDefinition").withNoArguments().will( new ReturnStub(portletApplicationMock.proxy())); From svnnotify @ sourceforge.jp Wed Mar 4 14:38:03 2009 From: svnnotify @ sourceforge.jp (svnnotify @ sourceforge.jp) Date: Wed, 04 Mar 2009 14:38:03 +0900 Subject: [pal-cvs 4053] [1788] applied patch 'r740489: Backport of preferences fix' Message-ID: <1236145083.709429.15057.nullmailer@users.sourceforge.jp> Revision: 1788 http://svn.sourceforge.jp/view?root=pal&view=rev&rev=1788 Author: sone Date: 2009-03-04 14:38:03 +0900 (Wed, 04 Mar 2009) Log Message: ----------- applied patch 'r740489: Backport of preferences fix' Modified Paths: -------------- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/project.xml 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 Added 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 -------------- Added: 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 (rev 0) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/commons/src/java/org/apache/jetspeed/util/PreferencesRootWrapper.java 2009-03-04 05:38:03 UTC (rev 1788) @@ -0,0 +1,237 @@ +/* + * 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. + *

+ * 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. + *

+ *

+ * 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. + *

+ * @author Ate Douma + * @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/page-manager/project.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/project.xml 2009-03-04 04:36:19 UTC (rev 1787) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/project.xml 2009-03-04 05:38:03 UTC (rev 1788) @@ -96,6 +96,7 @@ **/PageManagerTestShared.java **/DirectoryXMLTransform.java **/DatabasePageManagerServer.java + **/TestTransactions.java 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 2009-03-04 04:36:19 UTC (rev 1787) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/prefs/src/java/org/apache/jetspeed/prefs/impl/PersistenceBrokerPreferencesProvider.java 2009-03-04 05:38:03 UTC (rev 1788) @@ -714,4 +714,9 @@ + " total entity pref nodes in " + elapsed + " milliseconds."); } + public void destroy() + { + NodeImplProxy.setProvider(null); + preferenceCache = null; + } } \ No newline at end of file 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 2009-03-04 04:36:19 UTC (rev 1787) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/prefs/src/java/org/apache/jetspeed/prefs/impl/PreferencesFactoryImpl.java 2009-03-04 05:38:03 UTC (rev 1788) @@ -16,6 +16,7 @@ */ package org.apache.jetspeed.prefs.impl; +import java.util.Observer; import java.util.prefs.Preferences; import java.util.prefs.PreferencesFactory; @@ -24,6 +25,7 @@ import org.apache.jetspeed.prefs.PreferencesException; import org.apache.jetspeed.prefs.PreferencesProvider; +import org.apache.jetspeed.util.PreferencesRootWrapper; /** *

@@ -36,15 +38,35 @@ public class PreferencesFactoryImpl implements PreferencesFactory { - // TODO Findbugs protected static PreferencesProvider prefsProvider; + private Preferences userRootWrapper; + + private Preferences systemRootWrapper; + + private PreferencesImpl userRoot; + + private PreferencesImpl systemRoot; + + private PreferencesProvider preferencesProvider; + protected static final Log log = LogFactory .getLog(PreferencesFactoryImpl.class); public PreferencesFactoryImpl() { - super(); + 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) + { System.setProperty("java.util.prefs.PreferencesFactory", getClass() .getName()); } @@ -54,7 +76,7 @@ */ public Preferences systemRoot() { - return PreferencesImpl.systemRoot; + return systemRootWrapper; } /** @@ -62,7 +84,7 @@ */ public Preferences userRoot() { - return PreferencesImpl.userRoot; + return userRootWrapper; } /** @@ -76,29 +98,37 @@ { try { - PreferencesImpl.setPreferencesProvider(prefsProvider); - // TODO Findbugs - PreferencesImpl.systemRoot = new PreferencesImpl(null, "", + // 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.SYSTEM_NODE_TYPE); - // TODO Findbugs - PreferencesImpl.userRoot = new PreferencesImpl(null, "", - PreferencesImpl.USER_NODE_TYPE); + // set/update the Java Preferences userRoot and systeRoot PreferencesRootWrapper instances + ((Observer) Preferences.userRoot()).update(null, userRoot); + ((Observer) Preferences.systemRoot()).update(null, systemRoot); } catch (Throwable e) { //e.printStackTrace(); log.log("1500002", e); // REPLACED throw new PreferencesException("Failed to initialize prefs api. " - + e.toString()); + + e.getMessage(), e); } } - /** - * @return The {@link PreferencesProvider} - */ - public PreferencesProvider getPrefsProvider() + public void destroy() { - return prefsProvider; + ((Observer) Preferences.userRoot()).update(null, null); + ((Observer) Preferences.systemRoot()).update(null, null); + userRoot.disposeNode(); + systemRoot.disposeNode(); + userRoot.ppw.dispose(); + userRoot = null; + systemRoot = null; } /** @@ -106,12 +136,11 @@ * Set the preferences provider. *

* - * @param prefsProvider + * @param preferencesProvider * The {@link PreferencesProvider} */ - public void setPrefsProvider(PreferencesProvider prefsProvider) + public void setPrefsProvider(PreferencesProvider preferencesProvider) { - // TODO Findbugs - PreferencesFactoryImpl.prefsProvider = prefsProvider; + this.preferencesProvider = preferencesProvider; } } 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 2009-03-04 04:36:19 UTC (rev 1787) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/prefs/src/java/org/apache/jetspeed/prefs/impl/PreferencesImpl.java 2009-03-04 05:38:03 UTC (rev 1788) @@ -30,7 +30,6 @@ 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; @@ -42,6 +41,7 @@ *

* * @author David Le Strat + * @author Ate Douma */ public class PreferencesImpl extends AbstractPreferences { @@ -58,13 +58,13 @@ /** Logger. */ private static final Log log = LogFactory.getLog(PreferencesImpl.class); - // TODO Findbugs - protected static PreferencesProvider prefsProvider; + PreferencesProviderWrapper ppw; - static PreferencesImpl systemRoot; + void disposeNode() + { + node = null; + } - static PreferencesImpl userRoot; - /** *

* Constructs a root node in the underlying datastore if they have not yet @@ -81,13 +81,14 @@ * @param nodeType * The node type. */ - public PreferencesImpl(PreferencesImpl parent, String nodeName, int nodeType) - throws IllegalStateException + PreferencesImpl(PreferencesImpl parent, PreferencesProviderWrapper ppw, + String nodeName, int nodeType) throws IllegalStateException { super(parent, nodeName); + this.ppw = ppw; try { - node = prefsProvider.getNode(this.absolutePath(), nodeType); + node = ppw.provider().getNode(this.absolutePath(), nodeType); newNode = false; } catch (NodeDoesNotExistException e1) @@ -96,12 +97,12 @@ { if (parent != null) { - this.node = prefsProvider.createNode(parent.getNode(), + this.node = ppw.provider().createNode(parent.getNode(), nodeName, nodeType, this.absolutePath()); } else { - this.node = prefsProvider.createNode(null, nodeName, + this.node = ppw.provider().createNode(null, nodeName, nodeType, this.absolutePath()); } @@ -119,7 +120,8 @@ { try { - node = prefsProvider.getNode(this.absolutePath(), nodeType); + node = ppw.provider() + .getNode(this.absolutePath(), nodeType); newNode = false; } catch (NodeDoesNotExistException e2) @@ -143,7 +145,7 @@ */ public String[] childrenNamesSpi() throws BackingStoreException { - Collection nodes = prefsProvider.getChildren(getNode()); + Collection nodes = ppw.provider().getChildren(getNode()); if (null != nodes) { @@ -168,7 +170,7 @@ */ public AbstractPreferences childSpi(String name) { - return new PreferencesImpl(this, name, node.getNodeType()); + return new PreferencesImpl(this, ppw, name, node.getNodeType()); } /** @@ -176,7 +178,7 @@ */ public void flushSpi() throws BackingStoreException { - prefsProvider.storeNode(this.node); + ppw.provider().storeNode(this.node); } /** @@ -190,8 +192,8 @@ Node targetNode = null; try { - targetNode = prefsProvider.getNode(node.getFullPath(), node - .getNodeType()); + targetNode = ppw.provider().getNode(node.getFullPath(), + node.getNodeType()); } catch (NodeDoesNotExistException e) { @@ -287,7 +289,7 @@ properties.add(new PropertyImpl(node.getNodeId(), key, value)); } - prefsProvider.storeNode(node); + ppw.provider().storeNode(node); } /** @@ -301,7 +303,7 @@ { parentNode = ((PreferencesImpl) parent).getNode(); } - prefsProvider.removeNode(parentNode, node); + ppw.provider().removeNode(parentNode, node); } /** @@ -321,7 +323,7 @@ } } // Update node. - prefsProvider.storeNode(node); + ppw.provider().storeNode(node); } /** @@ -344,20 +346,4 @@ { return node; } - - /** - * - *

- * setPreferencesProvider - *

- * Sets the org.apache.jetspeed.prefs.PreferencesProvider - * that will support backing store operations for all - * PreferencesImpls - * - * @param prefsProvider - */ - public static void setPreferencesProvider(PreferencesProvider prefsProvider) - { - PreferencesImpl.prefsProvider = prefsProvider; - } } Added: 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 (rev 0) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/prefs/src/java/org/apache/jetspeed/prefs/impl/PreferencesProviderWrapper.java 2009-03-04 05:38:03 UTC (rev 1788) @@ -0,0 +1,44 @@ +/* + * 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 Ate Douma + * @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 2009-03-04 04:36:19 UTC (rev 1787) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/src/webapp/WEB-INF/assembly/prefs.xml 2009-03-04 05:38:03 UTC (rev 1788) @@ -19,7 +19,7 @@ - + JETSPEED-INF/ojb/prefs_repository.xml @@ -36,7 +36,7 @@ false - + org.apache.jetspeed.prefs.PreferencesProvider @@ -55,7 +55,10 @@ - + + + 1 From svnnotify @ sourceforge.jp Wed Mar 4 15:25:04 2009 From: svnnotify @ sourceforge.jp (svnnotify @ sourceforge.jp) Date: Wed, 04 Mar 2009 15:25:04 +0900 Subject: [pal-cvs 4054] [1789] applied patch 'r727527: DB Page Manager Distributed Cache' Message-ID: <1236147904.284618.9937.nullmailer@users.sourceforge.jp> Revision: 1789 http://svn.sourceforge.jp/view?root=pal&view=rev&rev=1789 Author: sone Date: 2009-03-04 15:25:04 +0900 (Wed, 04 Mar 2009) Log Message: ----------- applied patch 'r727527: DB Page Manager Distributed Cache' Modified Paths: -------------- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManager.java pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManagerCache.java pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/jetspeed-api/src/java/org/apache/jetspeed/page/PageManager.java -------------- next part -------------- Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManager.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManager.java 2009-03-04 05:38:03 UTC (rev 1788) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManager.java 2009-03-04 06:25:04 UTC (rev 1789) @@ -87,6 +87,7 @@ import org.apache.jetspeed.page.document.DocumentNotFoundException; import org.apache.jetspeed.page.document.FailedToDeleteDocumentException; import org.apache.jetspeed.page.document.FailedToUpdateDocumentException; +import org.apache.jetspeed.page.document.Node; import org.apache.jetspeed.page.document.NodeException; import org.apache.jetspeed.page.document.NodeSet; import org.apache.jetspeed.page.document.impl.NodeImpl; @@ -2210,4 +2211,14 @@ { return DatabasePageManagerCache.isDistributed(); } + + /* (non-Javadoc) + * @see org.apache.jetspeed.page.PageManager#notifyUpdatedNode(org.apache.jetspeed.page.document.Node) + */ + public void notifyUpdatedNode(Node node) + { + // notify page manager listeners + delegator.notifyUpdatedNode(node); + } + } Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManagerCache.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManagerCache.java 2009-03-04 05:38:03 UTC (rev 1788) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManagerCache.java 2009-03-04 06:25:04 UTC (rev 1789) @@ -219,6 +219,8 @@ { ((FolderImpl) node).resetAll(false); } + // notify page manager of update + pageManager.notifyUpdatedNode(node); // remove from cache oidCache.removeQuiet(oid); } @@ -236,7 +238,7 @@ { ((FolderImpl) parentNode).resetAll(false); } - // remove from cache + // ensure remove from cache pathCache.removeQuiet(path); } } @@ -283,9 +285,7 @@ { final DatabasePageManagerCacheObject cacheObject = (DatabasePageManagerCacheObject) pathElement .getContent(); - final NodeImpl node = (NodeImpl) cacheLookup(cacheObject - .getId()); - return node; + return (NodeImpl) cacheLookup(cacheObject.getId()); } } Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/jetspeed-api/src/java/org/apache/jetspeed/page/PageManager.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/jetspeed-api/src/java/org/apache/jetspeed/page/PageManager.java 2009-03-04 05:38:03 UTC (rev 1788) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/jetspeed-api/src/java/org/apache/jetspeed/page/PageManager.java 2009-03-04 06:25:04 UTC (rev 1789) @@ -40,6 +40,7 @@ import org.apache.jetspeed.page.document.DocumentNotFoundException; import org.apache.jetspeed.page.document.FailedToDeleteDocumentException; import org.apache.jetspeed.page.document.FailedToUpdateDocumentException; +import org.apache.jetspeed.page.document.Node; import org.apache.jetspeed.page.document.NodeException; import org.apache.jetspeed.page.document.NodeSet; import org.apache.jetspeed.page.document.UnsupportedDocumentTypeException; @@ -790,4 +791,10 @@ */ public boolean isDistributed(); + /** + * Notify page manager listeners that node modification was externally detected. + * + * @param node updated managed node if known + */ + public void notifyUpdatedNode(Node node); } From svnnotify @ sourceforge.jp Sun Mar 8 09:21:20 2009 From: svnnotify @ sourceforge.jp (svnnotify @ sourceforge.jp) Date: Sun, 08 Mar 2009 09:21:20 +0900 Subject: [pal-cvs 4055] [1790] updated images. Message-ID: <1236471680.981545.14243.nullmailer@users.sourceforge.jp> Revision: 1790 http://svn.sourceforge.jp/view?root=pal&view=rev&rev=1790 Author: shinsuke Date: 2009-03-08 09:21:20 +0900 (Sun, 08 Mar 2009) Log Message: ----------- updated images. Modified Paths: -------------- pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_createfolder1.png pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_createfolder2.png pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_createfolder3.png pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_createfolder4.png pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_createfolder5.png pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_createpage1.png pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_createpage2.png pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_createpage3.png pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_createpage4.png pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_createpage5.png pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_deletefolder1.png pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_deletefolder2.png pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_deletefolder4.png pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_deletepage1.png pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_deletepage2.png pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_deletepage4.png pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_editfolder1.png pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_editfolder2.png pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_editfolder3.png pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_editpage1.png pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_editpage2.png pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_editpage3.png pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_guide1.png -------------- next part -------------- Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_createfolder1.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_createfolder2.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_createfolder3.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_createfolder4.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_createfolder5.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_createpage1.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_createpage2.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_createpage3.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_createpage4.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_createpage5.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_deletefolder1.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_deletefolder2.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_deletefolder4.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_deletepage1.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_deletepage2.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_deletepage4.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_editfolder1.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_editfolder2.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_editfolder3.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_editpage1.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_editpage2.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_editpage3.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/siteeditor_guide1.png =================================================================== (Binary files differ) From svnnotify @ sourceforge.jp Wed Mar 11 11:13:53 2009 From: svnnotify @ sourceforge.jp (svnnotify @ sourceforge.jp) Date: Wed, 11 Mar 2009 11:13:53 +0900 Subject: [pal-cvs 4056] [1791] Undoing change committed in r1785, r1786, r1787, r1789 Message-ID: <1236737633.839563.18080.nullmailer@users.sourceforge.jp> Revision: 1791 http://svn.sourceforge.jp/view?root=pal&view=rev&rev=1791 Author: sone Date: 2009-03-11 11:13:53 +0900 (Wed, 11 Mar 2009) Log Message: ----------- Undoing change committed in r1785, r1786, r1787, r1789 Modified Paths: -------------- pal-portal/branches/pal-portal-1.x/installer/etc/database/build.xml pal-portal/branches/pal-portal-1.x/installer/etc/database/import/assembly/import-page-manager.xml pal-portal/branches/pal-portal-1.x/installer/etc/database/import/import.properties pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/.classpath pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheDistributedImpl.java pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheImpl.java pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/test/org/apache/jetspeed/cache/TestContentCache.java pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/test/org/apache/jetspeed/cache/TestDecorationContentCache.java pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/project.xml pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/AbstractPageManager.java pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManager.java pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManagerCache.java pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/util/interceptors/PageManagerInterceptor.java pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/database-page-manager.xml pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/interceptors.xml pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/org/apache/jetspeed/page/TestTransactions.java pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/secure-database-page-manager.xml pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/secure-permissions-database-page-manager.xml pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/portal/src/test/org/apache/jetspeed/container/state/TestNavigationalState.java pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/core-build.xml pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/db-ojb/ehcache.xml pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/import/assembly/import-page-manager.xml pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/import/build.xml pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/import/export.properties pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/import/import.properties pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/jetspeed-api/src/java/org/apache/jetspeed/cache/JetspeedCache.java pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/jetspeed-api/src/java/org/apache/jetspeed/page/PageManager.java pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/maven.xml pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/src/webapp/WEB-INF/assembly/alternate/db-page-manager.xml pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/src/webapp/WEB-INF/assembly/cache.xml Added Paths: ----------- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/tx-page-manager.xml Removed Paths: ------------- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheConfigResource.java pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManagerCacheObject.java pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/database-page-manager-base.xml pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/distributed-ehcache.xml pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/ehcache.xml pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/log4j-stdout.properties pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/org/apache/jetspeed/page/cache/ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/db-ojb/distributed-ehcache.xml -------------- next part -------------- Modified: pal-portal/branches/pal-portal-1.x/installer/etc/database/build.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/installer/etc/database/build.xml 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/installer/etc/database/build.xml 2009-03-11 02:13:53 UTC (rev 1791) @@ -343,7 +343,6 @@ -
Modified: pal-portal/branches/pal-portal-1.x/installer/etc/database/import/assembly/import-page-manager.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/installer/etc/database/import/assembly/import-page-manager.xml 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/installer/etc/database/import/assembly/import-page-manager.xml 2009-03-11 02:13:53 UTC (rev 1791) @@ -44,14 +44,14 @@ class="org.apache.jetspeed.page.impl.DatabasePageManager"> JETSPEED-INF/ojb/page-manager-repository.xml + + 128 + + 0 - false + false - false - - - - + false Modified: pal-portal/branches/pal-portal-1.x/installer/etc/database/import/import.properties =================================================================== --- pal-portal/branches/pal-portal-1.x/installer/etc/database/import/import.properties 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/installer/etc/database/import/import.properties 2009-03-11 02:13:53 UTC (rev 1791) @@ -1,7 +1,7 @@ # comma-separated list of boot assemblies for Spring boot.assemblies = repository-datasource-spring.xml # comma-separated list of assemblies for Spring -assemblies = import-page-manager.xml, transaction.xml, interceptors.xml, cache.xml +assemblies = import-page-manager.xml, transaction.xml, interceptors.xml # root folder to start exporting from root.folder = / # overwrite folders flag, set to true to replace existing folders Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/.classpath =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/.classpath 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/.classpath 2009-03-11 02:13:53 UTC (rev 1791) @@ -108,6 +108,5 @@ -
Deleted: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheConfigResource.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheConfigResource.java 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheConfigResource.java 2009-03-11 02:13:53 UTC (rev 1791) @@ -1,400 +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.cache.impl; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; - -import org.apache.commons.configuration.PropertiesConfiguration; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.core.io.AbstractResource; -import org.springframework.core.io.ClassPathResource; -import org.springframework.core.io.Resource; - -/** - * EhCacheConfigResource - * - * @author Randy Watler - * @version $Id: $ - */ -public class EhCacheConfigResource extends AbstractResource implements - InitializingBean -{ - - protected static Log log = LogFactory.getLog(EhCacheConfigResource.class); - - // Constants - - public static final String EHCACHE_CONFIG_RESOURCE_PROP_NAME = "org.apache.jetspeed.ehcache.config.resource"; - - public static final String EHCACHE_CONFIG_RESOURCE_DEFAULT = "ehcache.xml"; - - public static final String EHCACHE_CONFIG_RESOURCE_DISTRIBUTED_CACHE = "distributed-ehcache.xml"; - - public static final String EHCACHE_GROUP_ADDRESS_PROP_NAME = "org.apache.jetspeed.ehcache.group.address"; - - public static final String EHCACHE_GROUP_ADDRESS_DEFAULT = "230.0.0.1"; - - public static final String EHCACHE_GROUP_PORT_PROP_NAME = "org.apache.jetspeed.ehcache.group.port"; - - public static final String EHCACHE_GROUP_PORT_DEFAULT = "4446"; - - public static final String EHCACHE_GROUP_TTL_PROP_NAME = "org.apache.jetspeed.ehcache.group.ttl"; - - public static final String EHCACHE_GROUP_TTL_DEFAULT = "1"; - - public static final String EHCACHE_GROUP_TTL_TEST_DEFAULT = "0"; - - public static final String EHCACHE_HOSTNAME_PROP_NAME = "org.apache.jetspeed.ehcache.hostname"; - - public static final String EHCACHE_HOSTNAME_DEFAULT = ""; - - public static final String EHCACHE_HOSTNAME_TEST_DEFAULT = "localhost"; - - public static final String EHCACHE_PORT_PROP_NAME = "org.apache.jetspeed.ehcache.port"; - - public static final String EHCACHE_PORT_DEFAULT = "40001"; - - public static final String EHCACHE_PAGE_MANAGER_MAX_ELEMENTS_LEGACY_PROP_NAME = "db.page.manager.cache.size"; - - public static final String EHCACHE_PAGE_MANAGER_MAX_ELEMENTS_PROP_NAME = "org.apache.jetspeed.ehcache.pagemanager.maxelements"; - - public static final String EHCACHE_PAGE_MANAGER_MAX_ELEMENTS_DEFAULT = "128"; - - public static final String EHCACHE_PAGE_MANAGER_ELEMENT_TTL_LEGACY_PROP_NAME = "db.page.manager.cache.expire"; - - public static final String EHCACHE_PAGE_MANAGER_ELEMENT_TTL_PROP_NAME = "org.apache.jetspeed.ehcache.pagemanager.element.ttl"; - - public static final String EHCACHE_PAGE_MANAGER_ELEMENT_TTL_DEFAULT = "150"; - - // Singleton implementation - - private static EhCacheConfigResource instance; - - public static EhCacheConfigResource getInstance( - final String defaultConfigResource, final boolean test) - { - // construct and return a default instance - if (instance == null) - { - instance = new EhCacheConfigResource(); - instance.setDefaultConfigResource(defaultConfigResource); - instance.setTest(test); - instance.afterPropertiesSet(); - } - return instance; - } - - // Members - - private PropertiesConfiguration configuration; - - private String defaultConfigResource; - - private boolean test; - - private String defaultGroupAddress; - - private String defaultGroupPort; - - private String defaultGroupTTL; - - private String defaultHostname; - - private String defaultPort; - - private String defaultPageManagerMaxElements; - - private String defaultPageManagerElementTTL; - - private ClassPathResource classPathResource; - - // InitializingBean implementation - - /* (non-Javadoc) - * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet() - */ - public void afterPropertiesSet() - { - // copy specified configuration settings - if (configuration != null) - { - if (configuration.getString(EHCACHE_CONFIG_RESOURCE_PROP_NAME) != null) - { - defaultConfigResource = configuration - .getString(EHCACHE_CONFIG_RESOURCE_PROP_NAME); - } - if (configuration.getString(EHCACHE_GROUP_ADDRESS_PROP_NAME) != null) - { - defaultGroupAddress = configuration - .getString(EHCACHE_GROUP_ADDRESS_PROP_NAME); - } - if (configuration.getString(EHCACHE_GROUP_PORT_PROP_NAME) != null) - { - defaultGroupPort = configuration - .getString(EHCACHE_GROUP_PORT_PROP_NAME); - } - if (configuration.getString(EHCACHE_GROUP_TTL_PROP_NAME) != null) - { - defaultGroupTTL = configuration - .getString(EHCACHE_GROUP_TTL_PROP_NAME); - } - if (configuration.getString(EHCACHE_HOSTNAME_PROP_NAME) != null) - { - defaultHostname = configuration - .getString(EHCACHE_HOSTNAME_PROP_NAME); - } - if (configuration.getString(EHCACHE_PORT_PROP_NAME) != null) - { - defaultPort = configuration.getString(EHCACHE_PORT_PROP_NAME); - } - if (configuration - .getString(EHCACHE_PAGE_MANAGER_MAX_ELEMENTS_PROP_NAME) != null) - { - defaultPageManagerMaxElements = configuration - .getString(EHCACHE_PAGE_MANAGER_MAX_ELEMENTS_PROP_NAME); - } - if (configuration - .getString(EHCACHE_PAGE_MANAGER_ELEMENT_TTL_PROP_NAME) != null) - { - defaultPageManagerElementTTL = configuration - .getString(EHCACHE_PAGE_MANAGER_ELEMENT_TTL_PROP_NAME); - } - } - - // set system properties used in global cache configuration - if (System.getProperty(EHCACHE_CONFIG_RESOURCE_PROP_NAME) == null) - { - System.setProperty(EHCACHE_CONFIG_RESOURCE_PROP_NAME, - ((defaultConfigResource != null) ? defaultConfigResource - : EHCACHE_CONFIG_RESOURCE_DEFAULT)); - } - if (System.getProperty(EHCACHE_GROUP_ADDRESS_PROP_NAME) == null) - { - System.setProperty(EHCACHE_GROUP_ADDRESS_PROP_NAME, - ((defaultGroupAddress != null) ? defaultGroupAddress - : EHCACHE_GROUP_ADDRESS_DEFAULT)); - } - if (System.getProperty(EHCACHE_GROUP_PORT_PROP_NAME) == null) - { - System.setProperty(EHCACHE_GROUP_PORT_PROP_NAME, - ((defaultGroupPort != null) ? defaultGroupPort - : EHCACHE_GROUP_PORT_DEFAULT)); - } - if (System.getProperty(EHCACHE_GROUP_TTL_PROP_NAME) == null) - { - System.setProperty(EHCACHE_GROUP_TTL_PROP_NAME, - ((defaultGroupTTL != null) ? defaultGroupTTL - : (test ? EHCACHE_GROUP_TTL_TEST_DEFAULT - : EHCACHE_GROUP_TTL_DEFAULT))); - } - if (System.getProperty(EHCACHE_HOSTNAME_PROP_NAME) == null) - { - System.setProperty(EHCACHE_HOSTNAME_PROP_NAME, - ((defaultHostname != null) ? defaultHostname - : (test ? EHCACHE_HOSTNAME_TEST_DEFAULT - : EHCACHE_HOSTNAME_DEFAULT))); - } - if (System.getProperty(EHCACHE_PORT_PROP_NAME) == null) - { - System - .setProperty(EHCACHE_PORT_PROP_NAME, - ((defaultPort != null) ? defaultPort - : EHCACHE_PORT_DEFAULT)); - } - - // set system properties used in page manager cache configuration - if (System.getProperty(EHCACHE_PAGE_MANAGER_MAX_ELEMENTS_PROP_NAME) == null) - { - String pageManagerMaxElements = ((defaultPageManagerMaxElements != null) ? defaultPageManagerMaxElements - : System.getProperty( - EHCACHE_PAGE_MANAGER_MAX_ELEMENTS_LEGACY_PROP_NAME, - EHCACHE_PAGE_MANAGER_MAX_ELEMENTS_DEFAULT)); - if ((pageManagerMaxElements != null) - && (Integer.parseInt(pageManagerMaxElements) < 0)) - { - pageManagerMaxElements = EHCACHE_PAGE_MANAGER_MAX_ELEMENTS_DEFAULT; - } - System.setProperty(EHCACHE_PAGE_MANAGER_MAX_ELEMENTS_PROP_NAME, - pageManagerMaxElements); - } - if (System.getProperty(EHCACHE_PAGE_MANAGER_ELEMENT_TTL_PROP_NAME) == null) - { - String pageManagerElementTTL = ((defaultPageManagerElementTTL != null) ? defaultPageManagerElementTTL - : System.getProperty( - EHCACHE_PAGE_MANAGER_ELEMENT_TTL_LEGACY_PROP_NAME, - EHCACHE_PAGE_MANAGER_ELEMENT_TTL_DEFAULT)); - if ((pageManagerElementTTL != null) - && (Integer.parseInt(pageManagerElementTTL) < 0)) - { - pageManagerElementTTL = EHCACHE_PAGE_MANAGER_ELEMENT_TTL_DEFAULT; - } - System.setProperty(EHCACHE_PAGE_MANAGER_ELEMENT_TTL_PROP_NAME, - pageManagerElementTTL); - } - - // setup delegate ClassPathResource - final String configResource = System - .getProperty(EHCACHE_CONFIG_RESOURCE_PROP_NAME); - log.info("Configured with resource: " + configResource); - classPathResource = new ClassPathResource(configResource); - } - - // AbstractResource implementation - - /* (non-Javadoc) - * @see org.springframework.core.io.AbstractResource#createRelative(java.lang.String) - */ - public Resource createRelative(String relativePath) throws IOException - { - // delegate to ClassPathResource - return classPathResource.createRelative(relativePath); - } - - /* (non-Javadoc) - * @see org.springframework.core.io.AbstractResource#getFile() - */ - public File getFile() throws IOException - { - // delegate to ClassPathResource - return classPathResource.getFile(); - } - - /* (non-Javadoc) - * @see org.springframework.core.io.AbstractResource#getFilename() - */ - public String getFilename() throws IllegalStateException - { - // delegate to ClassPathResource - return classPathResource.getFilename(); - } - - /* (non-Javadoc) - * @see org.springframework.core.io.AbstractResource#getURL() - */ - public URL getURL() throws IOException - { - // delegate to ClassPathResource - return classPathResource.getURL(); - } - - /* (non-Javadoc) - * @see org.springframework.core.io.Resource#getDescription() - */ - public String getDescription() - { - // delegate to ClassPathResource - return classPathResource.getDescription(); - } - - /* (non-Javadoc) - * @see org.springframework.core.io.InputStreamSource#getInputStream() - */ - public InputStream getInputStream() throws IOException - { - // delegate to ClassPathResource - return classPathResource.getInputStream(); - } - - // Data access - - /** - * @param configuration the configuration to set - */ - public void setConfiguration(PropertiesConfiguration configuration) - { - this.configuration = configuration; - } - - /** - * @param defaultConfigResource the defaultConfigResource to set - */ - public void setDefaultConfigResource(String defaultConfigResource) - { - this.defaultConfigResource = defaultConfigResource; - } - - /** - * @param test the test to set - */ - public void setTest(boolean test) - { - this.test = test; - } - - /** - * @param defaultGroupAddress the defaultGroupAddress to set - */ - public void setDefaultGroupAddress(String defaultGroupAddress) - { - this.defaultGroupAddress = defaultGroupAddress; - } - - /** - * @param defaultGroupPort the defaultGroupPort to set - */ - public void setDefaultGroupPort(String defaultGroupPort) - { - this.defaultGroupPort = defaultGroupPort; - } - - /** - * @param defaultGroupTTL the defaultGroupTTL to set - */ - public void setDefaultGroupTTL(String defaultGroupTTL) - { - this.defaultGroupTTL = defaultGroupTTL; - } - - /** - * @param defaultHostname the defaultHostname to set - */ - public void setDefaultHostname(String defaultHostname) - { - this.defaultHostname = defaultHostname; - } - - /** - * @param defaultPort the defaultPort to set - */ - public void setDefaultPort(String defaultPort) - { - this.defaultPort = defaultPort; - } - - /** - * @param defaultPageManagerMaxElements the defaultPageManagerMaxElements to set - */ - public void setDefaultPageManagerMaxElements( - String defaultPageManagerMaxElements) - { - this.defaultPageManagerMaxElements = defaultPageManagerMaxElements; - } - - /** - * @param defaultPageManagerElementTTL the defaultPageManagerElementTTL to set - */ - public void setDefaultPageManagerElementTTL( - String defaultPageManagerElementTTL) - { - this.defaultPageManagerElementTTL = defaultPageManagerElementTTL; - } -} Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheDistributedImpl.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheDistributedImpl.java 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheDistributedImpl.java 2009-03-11 02:13:53 UTC (rev 1791) @@ -51,8 +51,6 @@ private Map refList = Collections.synchronizedMap(new HashMap()); - private boolean removeAllLocal = false; - public EhCacheDistributedImpl(Ehcache ehcache) { super(ehcache); @@ -96,11 +94,6 @@ public CacheElement createElement(Object key, Object content) { - if (!(key instanceof Serializable)) { throw new IllegalArgumentException( - "The cache key must be serializable."); } - if (!(content instanceof DistributedCacheObject)) { throw new IllegalArgumentException( - "The cache content must be a distributed cache object."); } - return new EhCacheDistributedElementImpl((Serializable) key, (DistributedCacheObject) content); } @@ -138,13 +131,7 @@ public void clear() { - // invoke removeAll with local flag set - synchronized (refList) - { - removeAllLocal = true; - super.clear(); - removeAllLocal = false; - } + super.clear(); notifyListeners(true, CacheElement.ActionRemoved, null, null); } @@ -319,23 +306,16 @@ } try { - // synchronize on refList to ensure exclusive - // operation on refList and removeAllLocal flag - synchronized (refList) + Iterator it = refList.entrySet().iterator(); + while (it.hasNext()) { - // notify all listeners of element removal - // and each element of its removal - Iterator it = refList.values().iterator(); - while (it.hasNext()) - { - EhCacheDistributedElementImpl e = (EhCacheDistributedElementImpl) it - .next(); - notifyListeners(removeAllLocal, CacheElement.ActionRemoved, - e.getKey(), e.getContent()); - e.notifyChange(CacheElement.ActionRemoved); - } - refList.clear(); + EhCacheDistributedElementImpl e = (EhCacheDistributedElementImpl) it + .next(); + notifyListeners(false, CacheElement.ActionRemoved, e.getKey(), + e); + e.notifyChange(CacheElement.ActionRemoved); } + refList.clear(); } catch (Exception e) { Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheImpl.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheImpl.java 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/java/org/apache/jetspeed/cache/impl/EhCacheImpl.java 2009-03-11 02:13:53 UTC (rev 1791) @@ -23,10 +23,8 @@ import jp.sf.pal.portal.logging.Log; import jp.sf.pal.portal.logging.LogFactory; -import net.sf.ehcache.CacheException; import net.sf.ehcache.Ehcache; import net.sf.ehcache.Element; -import net.sf.ehcache.distribution.CacheManagerPeerProvider; import net.sf.ehcache.event.CacheEventListener; import org.apache.jetspeed.cache.CacheElement; @@ -80,17 +78,12 @@ public CacheElement createElement(Object key, Object content) { - if (!(key instanceof Serializable)) { throw new IllegalArgumentException( - "The cache key must be serializable."); } - if (content instanceof Serializable) - { - return new EhCacheElementImpl((Serializable) key, - (Serializable) content); - } - else - { - return new EhCacheElementImpl((Serializable) key, content); - } + if (!((key instanceof Serializable) || !(content instanceof Serializable))) + throw new IllegalArgumentException( + "The cache key and the object to cache must be serializable."); // return + // null; + return new EhCacheElementImpl((Serializable) key, + (Serializable) content); } public boolean remove(Object key) @@ -201,22 +194,6 @@ return ehcache.getKeys(); } - public boolean isDistributed() - { - // check if cache part of a distributed cluster - try - { - CacheManagerPeerProvider peerProvider = ehcache.getCacheManager() - .getCachePeerProvider(); - return ((peerProvider != null) && (peerProvider - .listRemoteCachePeers(ehcache).size() > 0)); - } - catch (CacheException ce) - { - } - return false; - } - // ------------------------------------------------------ public Object clone() throws CloneNotSupportedException Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/test/org/apache/jetspeed/cache/TestContentCache.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/test/org/apache/jetspeed/cache/TestContentCache.java 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/test/org/apache/jetspeed/cache/TestContentCache.java 2009-03-11 02:13:53 UTC (rev 1791) @@ -26,7 +26,6 @@ import net.sf.ehcache.CacheManager; import org.apache.jetspeed.aggregator.PortletContent; -import org.apache.jetspeed.cache.impl.EhCacheConfigResource; import org.apache.jetspeed.cache.impl.EhPortletContentCacheImpl; import org.apache.jetspeed.cache.impl.JetspeedCacheKeyGenerator; import org.apache.jetspeed.mockobjects.request.MockRequestContext; @@ -53,8 +52,6 @@ public void testContentCacheByUser() throws Exception { // initialize ehCache - EhCacheConfigResource.getInstance( - EhCacheConfigResource.EHCACHE_CONFIG_RESOURCE_DEFAULT, true); CacheManager cacheManager = new CacheManager(); Cache ehContentCache = new Cache("ehPortletContentCache", 10000, false, false, 28800, 28800); @@ -154,8 +151,6 @@ public void testContentCacheBySession() throws Exception { // initialize ehCache - EhCacheConfigResource.getInstance( - EhCacheConfigResource.EHCACHE_CONFIG_RESOURCE_DEFAULT, true); CacheManager cacheManager = new CacheManager(); Cache ehContentCache = new Cache("ehPortletContentCache", 10000, false, false, 28800, 28800); Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/test/org/apache/jetspeed/cache/TestDecorationContentCache.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/test/org/apache/jetspeed/cache/TestDecorationContentCache.java 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/cm/src/test/org/apache/jetspeed/cache/TestDecorationContentCache.java 2009-03-11 02:13:53 UTC (rev 1791) @@ -25,7 +25,6 @@ import net.sf.ehcache.Cache; import net.sf.ehcache.CacheManager; -import org.apache.jetspeed.cache.impl.EhCacheConfigResource; import org.apache.jetspeed.cache.impl.EhDecorationContentCacheImpl; import org.apache.jetspeed.cache.impl.JetspeedCacheKeyGenerator; import org.apache.jetspeed.mockobjects.request.MockRequestContext; @@ -52,8 +51,6 @@ public void testContentCacheByUser() throws Exception { // initialize ehCache - EhCacheConfigResource.getInstance( - EhCacheConfigResource.EHCACHE_CONFIG_RESOURCE_DEFAULT, true); CacheManager cacheManager = new CacheManager(); Cache ehContentCache = new Cache("ehDecorationContentCache", 10000, false, false, 28800, 28800); @@ -149,8 +146,6 @@ public void testContentCacheBySession() throws Exception { // initialize ehCache - EhCacheConfigResource.getInstance( - EhCacheConfigResource.EHCACHE_CONFIG_RESOURCE_DEFAULT, true); CacheManager cacheManager = new CacheManager(); Cache ehContentCache = new Cache("ehDecorationContentCache", 10000, false, false, 28800, 28800); Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/project.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/project.xml 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/project.xml 2009-03-11 02:13:53 UTC (rev 1791) @@ -80,11 +80,6 @@ org.apache.portals.jetspeed-2:jetspeed-rdbms ${jetspeed.version} - - commons-jexl - commons-jexl - 1.1 - @@ -95,7 +90,6 @@ **/PageManagerTestShared.java **/DirectoryXMLTransform.java - **/DatabasePageManagerServer.java **/TestTransactions.java @@ -117,10 +111,6 @@ ${basedir}/../../etc/db-ojb - - **/ehcache.xml - **/distributed-ehcache.xml - ${basedir}/../../src/webapp/WEB-INF/assembly Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/AbstractPageManager.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/AbstractPageManager.java 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/AbstractPageManager.java 2009-03-11 02:13:53 UTC (rev 1791) @@ -881,14 +881,6 @@ // nothing to shutdown by default } - /* (non-Javadoc) - * @see org.apache.jetspeed.page.PageManager#isDistributed() - */ - public boolean isDistributed() - { - return false; - } - /** * notifyNewNode - notify page manager event listeners of new node event * Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManager.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManager.java 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManager.java 2009-03-11 02:13:53 UTC (rev 1791) @@ -28,7 +28,6 @@ import jp.sf.pal.portal.logging.LogFactory; import org.apache.jetspeed.JetspeedActions; -import org.apache.jetspeed.cache.JetspeedCache; import org.apache.jetspeed.components.dao.InitablePersistenceBrokerDaoSupport; import org.apache.jetspeed.om.common.SecurityConstraint; import org.apache.jetspeed.om.common.SecurityConstraints; @@ -87,7 +86,6 @@ import org.apache.jetspeed.page.document.DocumentNotFoundException; import org.apache.jetspeed.page.document.FailedToDeleteDocumentException; import org.apache.jetspeed.page.document.FailedToUpdateDocumentException; -import org.apache.jetspeed.page.document.Node; import org.apache.jetspeed.page.document.NodeException; import org.apache.jetspeed.page.document.NodeSet; import org.apache.jetspeed.page.document.impl.NodeImpl; @@ -107,6 +105,12 @@ implements PageManager { + private static final int DEFAULT_CACHE_SIZE = 128; + + private static final int MIN_CACHE_EXPIRES_SECONDS = 30; + + private static final int DEFAULT_CACHE_EXPIRES_SECONDS = 150; + private static Map modelClasses = new HashMap(); static { @@ -155,22 +159,60 @@ private DelegatingPageManager delegator; + private int cacheSize; + + private int cacheExpiresSeconds; + private PageManager pageManagerProxy; protected static final Log log = LogFactory .getLog(DatabasePageManager.class); - public DatabasePageManager(String repositoryPath, - boolean isPermissionsSecurity, boolean isConstraintsSecurity, - JetspeedCache oidCache, JetspeedCache pathCache) + public DatabasePageManager(String repositoryPath, int cacheSize, + int cacheExpiresSeconds, boolean isPermissionsSecurity, + boolean isConstraintsSecurity) { super(repositoryPath); delegator = new DelegatingPageManager(isPermissionsSecurity, isConstraintsSecurity, modelClasses); - DatabasePageManagerCache.cacheInit(oidCache, pathCache, this); + this.cacheSize = Math.max(cacheSize, DEFAULT_CACHE_SIZE); + if (cacheExpiresSeconds < 0) + { + this.cacheExpiresSeconds = DEFAULT_CACHE_EXPIRES_SECONDS; + } + else if (cacheExpiresSeconds == 0) + { + this.cacheExpiresSeconds = 0; + } + else + { + this.cacheExpiresSeconds = Math.max(cacheExpiresSeconds, + MIN_CACHE_EXPIRES_SECONDS); + } + DatabasePageManagerCache.cacheInit(this); } /** + * getCacheSize + * + * @return configured cache size + */ + public int getCacheSize() + { + return cacheSize; + } + + /** + * getCacheExpiresSeconds + * + * @return configured cache expiration in seconds + */ + public int getCacheExpiresSeconds() + { + return cacheExpiresSeconds; + } + + /** * getPageManagerProxy * * @return proxied page manager interface used to inject into Folder @@ -2204,21 +2246,4 @@ return pages.length; } - /* (non-Javadoc) - * @see org.apache.jetspeed.page.PageManager#isDistributed() - */ - public boolean isDistributed() - { - return DatabasePageManagerCache.isDistributed(); - } - - /* (non-Javadoc) - * @see org.apache.jetspeed.page.PageManager#notifyUpdatedNode(org.apache.jetspeed.page.document.Node) - */ - public void notifyUpdatedNode(Node node) - { - // notify page manager listeners - delegator.notifyUpdatedNode(node); - } - } Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManagerCache.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManagerCache.java 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManagerCache.java 2009-03-11 02:13:53 UTC (rev 1791) @@ -16,15 +16,12 @@ */ package org.apache.jetspeed.page.impl; +import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Properties; -import org.apache.jetspeed.cache.CacheElement; -import org.apache.jetspeed.cache.JetspeedCache; -import org.apache.jetspeed.cache.JetspeedCacheEventListener; -import org.apache.jetspeed.om.folder.Folder; import org.apache.jetspeed.om.folder.impl.FolderImpl; import org.apache.jetspeed.page.PageManager; import org.apache.jetspeed.page.document.impl.NodeImpl; @@ -41,22 +38,22 @@ public class DatabasePageManagerCache implements ObjectCache { - // Members + private static HashMap cacheByOID; - private static JetspeedCache oidCache; + private static LinkedList cacheLRUList; - private static JetspeedCache pathCache; + private static HashMap cacheByPath; + private static int cacheSize; + + private static int cacheExpiresSeconds; + private static boolean constraintsEnabled; private static boolean permissionsEnabled; private static PageManager pageManager; - private static ThreadLocal transactionedOperations = new ThreadLocal(); - - // Implementation - /** * cacheInit * @@ -65,191 +62,24 @@ * @param pageManager * configured page manager */ - public synchronized static void cacheInit(final JetspeedCache oidCache, - final JetspeedCache pathCache, final DatabasePageManager pageManager) + public synchronized static void cacheInit(DatabasePageManager dbPageManager) { - - // initialize - DatabasePageManagerCache.oidCache = oidCache; - DatabasePageManagerCache.pathCache = pathCache; - constraintsEnabled = pageManager.getConstraintsEnabled(); - permissionsEnabled = pageManager.getPermissionsEnabled(); - - // setup local oid cache listener - oidCache.addEventListener(new JetspeedCacheEventListener() + if (pageManager != null) { - - /* (non-Javadoc) - * @see org.apache.jetspeed.cache.JetspeedCacheEventListener#notifyElementAdded(org.apache.jetspeed.cache.JetspeedCache, boolean, java.lang.Object, java.lang.Object) - */ - public void notifyElementAdded(final JetspeedCache cache, - final boolean local, final Object key, final Object element) - { - final NodeImpl node = (NodeImpl) element; - // infuse node with page manager configuration - // or the page manager itself and add to the - // paths cache - node.setConstraintsEnabled(constraintsEnabled); - node.setPermissionsEnabled(permissionsEnabled); - if (node instanceof FolderImpl) - { - ((FolderImpl) node).setPageManager(pageManager); - } - } - - /* (non-Javadoc) - * @see org.apache.jetspeed.cache.JetspeedCacheEventListener#notifyElementChanged(org.apache.jetspeed.cache.JetspeedCache, boolean, java.lang.Object, java.lang.Object) - */ - public void notifyElementChanged(final JetspeedCache cache, - final boolean local, final Object key, final Object element) - { - final NodeImpl node = (NodeImpl) element; - // infuse node with page manager configuration - // or the page manager itself and add to the - // paths cache - node.setConstraintsEnabled(constraintsEnabled); - node.setPermissionsEnabled(permissionsEnabled); - if (node instanceof FolderImpl) - { - ((FolderImpl) node).setPageManager(pageManager); - } - } - - /* (non-Javadoc) - * @see org.apache.jetspeed.cache.JetspeedCacheEventListener#notifyElementEvicted(org.apache.jetspeed.cache.JetspeedCache, boolean, java.lang.Object, java.lang.Object) - */ - public void notifyElementEvicted(final JetspeedCache cache, - final boolean local, final Object key, final Object element) - { - final NodeImpl node = (NodeImpl) element; - // reset internal FolderImpl caches - if (node instanceof FolderImpl) - { - ((FolderImpl) node).resetAll(false); - } - } - - /* (non-Javadoc) - * @see org.apache.jetspeed.cache.JetspeedCacheEventListener#notifyElementExpired(org.apache.jetspeed.cache.JetspeedCache, boolean, java.lang.Object, java.lang.Object) - */ - public void notifyElementExpired(final JetspeedCache cache, - final boolean local, final Object key, final Object element) - { - final NodeImpl node = (NodeImpl) element; - // reset internal FolderImpl caches - if (node instanceof FolderImpl) - { - ((FolderImpl) node).resetAll(false); - } - } - - /* (non-Javadoc) - * @see org.apache.jetspeed.cache.JetspeedCacheEventListener#notifyElementRemoved(org.apache.jetspeed.cache.JetspeedCache, boolean, java.lang.Object, java.lang.Object) - */ - public void notifyElementRemoved(final JetspeedCache cache, - final boolean local, final Object key, final Object element) - { - final NodeImpl node = (NodeImpl) element; - // reset internal FolderImpl caches - if (node instanceof FolderImpl) - { - ((FolderImpl) node).resetAll(false); - } - } - }, true); - - // setup remote path cache listener - pathCache.addEventListener(new JetspeedCacheEventListener() - { - - /* (non-Javadoc) - * @see org.apache.jetspeed.cache.JetspeedCacheEventListener#notifyElementAdded(org.apache.jetspeed.cache.JetspeedCache, boolean, java.lang.Object, java.lang.Object) - */ - public void notifyElementAdded(final JetspeedCache cache, - final boolean local, final Object key, final Object element) - { - } - - /* (non-Javadoc) - * @see org.apache.jetspeed.cache.JetspeedCacheEventListener#notifyElementChanged(org.apache.jetspeed.cache.JetspeedCache, boolean, java.lang.Object, java.lang.Object) - */ - public void notifyElementChanged(final JetspeedCache cache, - final boolean local, final Object key, final Object element) - { - } - - /* (non-Javadoc) - * @see org.apache.jetspeed.cache.JetspeedCacheEventListener#notifyElementEvicted(org.apache.jetspeed.cache.JetspeedCache, boolean, java.lang.Object, java.lang.Object) - */ - public void notifyElementEvicted(final JetspeedCache cache, - final boolean local, final Object key, final Object element) - { - } - - /* (non-Javadoc) - * @see org.apache.jetspeed.cache.JetspeedCacheEventListener#notifyElementExpired(org.apache.jetspeed.cache.JetspeedCache, boolean, java.lang.Object, java.lang.Object) - */ - public void notifyElementExpired(final JetspeedCache cache, - final boolean local, final Object key, final Object element) - { - } - - /* (non-Javadoc) - * @see org.apache.jetspeed.cache.JetspeedCacheEventListener#notifyElementRemoved(org.apache.jetspeed.cache.JetspeedCache, boolean, java.lang.Object, java.lang.Object) - */ - public void notifyElementRemoved(final JetspeedCache cache, - final boolean local, final Object key, final Object element) - { - final DatabasePageManagerCacheObject cacheObject = (DatabasePageManagerCacheObject) element; - // remove cache object from local oid cache - if (cacheObject != null) - { - final Identity oid = cacheObject.getId(); - final String path = cacheObject.getPath(); - if ((oid != null) || (path != null)) - { - synchronized (DatabasePageManagerCache.class) - { - if (oid != null) - { - // get object cached by oid - final NodeImpl node = (NodeImpl) cacheLookup(oid); - // reset internal FolderImpl caches - if (node instanceof FolderImpl) - { - ((FolderImpl) node).resetAll(false); - } - // notify page manager of update - pageManager.notifyUpdatedNode(node); - // remove from cache - oidCache.removeQuiet(oid); - } - if (path != null) - { - // lookup parent object cached by path and oid - final int pathLastSeparatorIndex = path - .lastIndexOf(Folder.PATH_SEPARATOR); - final String parentPath = ((pathLastSeparatorIndex > 0) ? path - .substring(0, pathLastSeparatorIndex) - : Folder.PATH_SEPARATOR); - final NodeImpl parentNode = cacheLookup(parentPath); - // reset internal FolderImpl caches in case element removed - if (parentNode instanceof FolderImpl) - { - ((FolderImpl) parentNode).resetAll(false); - } - // ensure remove from cache - pathCache.removeQuiet(path); - } - } - } - } - } - }, false); + cacheClear(); + } + cacheByOID = new HashMap(); + cacheLRUList = new LinkedList(); + cacheByPath = new HashMap(); + cacheSize = dbPageManager.getCacheSize(); + cacheExpiresSeconds = dbPageManager.getCacheExpiresSeconds(); + constraintsEnabled = dbPageManager.getConstraintsEnabled(); + permissionsEnabled = dbPageManager.getPermissionsEnabled(); + pageManager = dbPageManager; } /** - * Override page manager specified during create with proxy. + * setPageManagerProxy * * @param proxy * proxied page manager interface used to inject into Folder @@ -269,223 +99,293 @@ /** * cacheLookup * - * Lookup object instances by unique path. + * Lookup node instances by unique path. * * @param path * node unique path * @return cached node */ - public synchronized static NodeImpl cacheLookup(final String path) + public synchronized static NodeImpl cacheLookup(String path) { if (path != null) { - // return valid object cached by path and oid - final CacheElement pathElement = pathCache.get(path); - if (pathElement != null) - { - final DatabasePageManagerCacheObject cacheObject = (DatabasePageManagerCacheObject) pathElement - .getContent(); - return (NodeImpl) cacheLookup(cacheObject.getId()); - } - + // return valid object cached by path + return (NodeImpl) cacheValidateEntry((Entry) cacheByPath.get(path)); } return null; } /** - * Add object to cache and cache instances by unique path; + * cacheAdd + * + * Add object to cache and cache node instances by unique path; infuse nodes * loaded by OJB with page manager configuration. * * @param oid - * object/node identity + * object/node indentity * @param obj * object/node to cache */ - public synchronized static void cacheAdd(final Identity oid, - final Object obj) + public synchronized static void cacheAdd(Identity oid, Object obj) { - if (obj instanceof NodeImpl) + Entry entry = (Entry) cacheByOID.get(oid); + if (entry != null) { - final NodeImpl node = (NodeImpl) obj; - final String nodePath = node.getPath(); - - // add node to caches - oidCache.remove(oid); - final CacheElement element = oidCache.createElement(oid, node); - oidCache.put(element); - pathCache.remove(nodePath); - final CacheElement pathElement = pathCache.createElement(nodePath, - new DatabasePageManagerCacheObject(oid, nodePath)); - pathCache.put(pathElement); + // update cache LRU order + cacheLRUList.remove(entry); + cacheLRUList.addFirst(entry); + // refresh cache entry + entry.touch(); } + else + { + // create new cache entry and map + entry = new Entry(obj, oid); + cacheByOID.put(oid, entry); + cacheLRUList.addFirst(entry); + // infuse node with page manager configuration + // or the page manager itself and add to the + // paths cache + if (obj instanceof NodeImpl) + { + NodeImpl node = (NodeImpl) obj; + node.setConstraintsEnabled(constraintsEnabled); + node.setPermissionsEnabled(permissionsEnabled); + cacheByPath.put(node.getPath(), entry); + if (obj instanceof FolderImpl) + { + ((FolderImpl) obj).setPageManager(pageManager); + } + } + // trim cache as required to maintain cache size + while (cacheLRUList.size() > cacheSize) + { + cacheRemoveEntry((Entry) cacheLRUList.getLast(), true); + } + } } /** * cacheClear * - * Clear object and path caches. + * Clear object and node caches. */ public synchronized static void cacheClear() { - // remove all items from oid cache individually - // to ensure notifications are run to detach - // elements; do not invoke oidCache.clear() - final Iterator removeOidIter = oidCache.getKeys().iterator(); - while (removeOidIter.hasNext()) + // remove all cache entries + Iterator removeIter = cacheLRUList.iterator(); + while (removeIter.hasNext()) { - oidCache.remove((Identity) removeOidIter.next()); + cacheRemoveEntry((Entry) removeIter.next(), false); } - // remove all items from path cache individually - // to avoid potential distributed clear invocation - // that would be performed against all peers; do - // not invoke pathCache.clear() - final Iterator removePathIter = pathCache.getKeys().iterator(); - while (removePathIter.hasNext()) - { - pathCache.removeQuiet(removePathIter.next()); - } + // clear cache + cacheByOID.clear(); + cacheLRUList.clear(); + cacheByPath.clear(); } /** + * cacheLookup + * * Lookup objects by identity. * * @param oid * object identity * @return cached object */ - public synchronized static Object cacheLookup(final Identity oid) + public synchronized static Object cacheLookup(Identity oid) { if (oid != null) { // return valid object cached by oid - final CacheElement element = oidCache.get(oid); - if (element != null) { return element.getContent(); } - + return cacheValidateEntry((Entry) cacheByOID.get(oid)); } return null; } /** - * Remove identified object from object and path caches. + * cacheRemove * + * Remove identified object from object and node caches. + * * @param oid * object identity */ - public synchronized static void cacheRemove(final Identity oid) + public synchronized static void cacheRemove(Identity oid) { // remove from cache by oid - if (oid != null) - { - final NodeImpl node = (NodeImpl) cacheLookup(oid); - if (node != null) - { - // remove from caches - oidCache.remove(oid); - pathCache.remove(node.getPath()); - } - } + cacheRemoveEntry((Entry) cacheByOID.get(oid), true); } /** - * Remove identified object from object and path caches. + * cacheRemove * + * Remove identified object from object and node caches. + * * @param path * object path */ - public synchronized static void cacheRemove(final String path) + public synchronized static void cacheRemove(String path) { // remove from cache by path - if (path != null) - { - final CacheElement pathElement = pathCache.get(path); - if (pathElement != null) - { - final DatabasePageManagerCacheObject cacheObject = (DatabasePageManagerCacheObject) pathElement - .getContent(); - // remove from caches - oidCache.remove(cacheObject.getId()); - pathCache.remove(path); - } - } + cacheRemoveEntry((Entry) cacheByPath.get(path), true); } /** - * Reset cached security constraints in all cached objects. + * cacheValidateEntry + * + * Validate specified entry from cache, returning cached object if valid. + * + * @param entry + * cache entry to validate + * @return validated object from cache */ - public synchronized static void resetCachedSecurityConstraints() + private synchronized static Object cacheValidateEntry(Entry entry) { - // reset cached objects - final Iterator resetIter = oidCache.getKeys().iterator(); - while (resetIter.hasNext()) + if (entry != null) { - final NodeImpl node = (NodeImpl) cacheLookup((Identity) resetIter - .next()); - node.resetCachedSecurityConstraints(); + if (!entry.isExpired()) + { + // update cache LRU order + cacheLRUList.remove(entry); + cacheLRUList.addFirst(entry); + // refresh cache entry and return object + entry.touch(); + return entry.getObject(); + } + else + { + // remove expired entry + cacheRemoveEntry(entry, true); + } } + return null; } /** - * Get transactions registered on current thread + * cacheRemoveEntry * - * @return transactions list + * Remove specified entry from cache. + * + * @param entry + * cache entry to remove + * @param remove + * enable removal from cache */ - public static List getTransactions() + private synchronized static void cacheRemoveEntry(Entry entry, + boolean remove) { - List operations = (List) transactionedOperations.get(); - if (operations == null) + if (entry != null) { - operations = new LinkedList(); - transactionedOperations.set(operations); + Object removeObj = entry.getObject(); + if (remove) + { + // remove entry, optimize for removal from end + // of list as cache size is met or entries expire + if (cacheLRUList.getLast() == entry) + { + cacheLRUList.removeLast(); + } + else + { + int removeIndex = cacheLRUList.lastIndexOf(entry); + if (removeIndex > 0) + { + cacheLRUList.remove(removeIndex); + } + } + // unmap entry + cacheByOID.remove(entry.getOID()); + if (removeObj instanceof NodeImpl) + { + cacheByPath.remove(((NodeImpl) removeObj).getPath()); + } + } + // reset internal FolderImpl caches + if (removeObj instanceof FolderImpl) + { + ((FolderImpl) removeObj).resetAll(false); + } } - return operations; } /** - * Register transactions with current thread + * resetCachedSecurityConstraints * - * @param operation transaction operation + * Reset cached security constraints in all cached node objects. */ - public static void addTransaction(TransactionedOperation operation) + public synchronized static void resetCachedSecurityConstraints() { - final List transactions = getTransactions(); - transactions.add(operation); + // reset cached objects + Iterator resetIter = cacheLRUList.iterator(); + while (resetIter.hasNext()) + { + Object obj = ((Entry) resetIter.next()).getObject(); + if (obj instanceof NodeImpl) + { + ((NodeImpl) obj).resetCachedSecurityConstraints(); + } + } } /** - * Rollback transactions registered with current thread. + * Entry + * + * Cache entry class adding entry timestamp to track expiration */ - public synchronized static void rollbackTransactions() + private static class Entry { - final Iterator transactions = getTransactions().iterator(); - while (transactions.hasNext()) + + public long timestamp; + + public Object object; + + public Identity oid; + + public Entry(Object object, Identity oid) { - final TransactionedOperation operation = (TransactionedOperation) transactions - .next(); - cacheRemove(operation.getPath()); + touch(); + this.object = object; + this.oid = oid; } - } - /** - * Clear transactions registered with current thread. - */ - public synchronized static void clearTransactions() - { - transactionedOperations.set(null); - } + public boolean isExpired() + { + if (DatabasePageManagerCache.cacheExpiresSeconds > 0) + { + long now = System.currentTimeMillis(); + if (((now - timestamp) / 1000) < DatabasePageManagerCache.cacheExpiresSeconds) + { + timestamp = now; + return false; + } + return true; + } + return false; + } - /** - * Returns whether this cache is currently part of a distributed cache cluster. - * - * @return distributed flag - */ - public static boolean isDistributed() - { - return pathCache.isDistributed(); - } + public void touch() + { + if (DatabasePageManagerCache.cacheExpiresSeconds > 0) + { + timestamp = System.currentTimeMillis(); + } + } - // OJB Constructor + public Object getObject() + { + return object; + } + public Identity getOID() + { + return oid; + } + } + /** + * DatabasePageManagerCache + * * Construct a cache instance using OJB compliant signatures. * * @param broker @@ -497,8 +397,6 @@ { } - // OJB ObjectCache Implementation - /* * (non-Javadoc) * @@ -545,24 +443,61 @@ cacheRemove(oid); } - // Utilities - - /** - * Dump cache paths and oids to standard out. - */ - public synchronized static void dump() { - System.out.println("--------------------------"); - final Iterator dumpIter = oidCache.getKeys().iterator(); + System.out.println("--------------------------1"); + Iterator dumpIter = cacheLRUList.iterator(); while (dumpIter.hasNext()) { - final Identity oid = (Identity) dumpIter.next(); - final NodeImpl node = (NodeImpl) cacheLookup(oid); - System.out.println("node=" + node.getPath() + ", oid=" + oid); + Entry entry = (Entry) dumpIter.next(); + Object entryObject = entry.getObject(); + if (entryObject instanceof NodeImpl) + { + System.out.println("entry = " + + ((NodeImpl) entryObject).getPath() + ", " + + entry.getOID()); + } + else + { + System.out.println("entry = , " + entry.getOID()); + } } + System.out.println("--------------------------2"); + } - System.out.println("--------------------------"); + // TODO Findbugs + protected static ThreadLocal transactionedOperations = new ThreadLocal(); + + public static List getTransactions() + { + List operations = (List) transactionedOperations.get(); + if (operations == null) + { + operations = new LinkedList(); + transactionedOperations.set(operations); + } + + return operations; } + /** + * @param principal + * The principal to set. + */ + public static void addTransaction(TransactionedOperation operation) + { + List transactions = getTransactions(); + transactions.add(operation); + } + + public static void rollbackTransactions() + { + Iterator transactions = getTransactions().iterator(); + while (transactions.hasNext()) + { + TransactionedOperation operation = (TransactionedOperation) transactions + .next(); + cacheRemove(operation.getPath()); + } + } } Deleted: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManagerCacheObject.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManagerCacheObject.java 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManagerCacheObject.java 2009-03-11 02:13:53 UTC (rev 1791) @@ -1,120 +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.page.impl; - -import org.apache.jetspeed.cache.CacheElement; -import org.apache.jetspeed.cache.DistributedCacheObject; -import org.apache.ojb.broker.Identity; - -/** - * DatabasePageManagerCacheObject - * - * @author Randy Watler - * @version $Id: $ -*/ -public class DatabasePageManagerCacheObject implements DistributedCacheObject -{ - - private static final long serialVersionUID = 3575475610695136850L; - - // Members - - private Identity id = null; - - private String path = null; - - // Constructor - - /** - * Construct new cache object with id and path - * - * @param id - * @param path - */ - public DatabasePageManagerCacheObject(final Identity id, final String path) - { - this.path = path; - this.id = id; - } - - /** - * Serialization constructor - */ - public DatabasePageManagerCacheObject() - { - } - - // Implementation - - /* (non-Javadoc) - * @see org.apache.jetspeed.cache.DistributedCacheObject#notifyChange(int) - */ - public void notifyChange(int action) - { - switch (action) - { - case CacheElement.ActionAdded: - case CacheElement.ActionChanged: - case CacheElement.ActionRemoved: - case CacheElement.ActionEvicted: - case CacheElement.ActionExpired: - break; - default: - return; - } - return; - } - - /* (non-Javadoc) - * @see java.lang.Object#equals(java.lang.Object) - */ - public boolean equals(Object obj) - { - if ((obj != null) && (obj instanceof DatabasePageManagerCacheObject)) - { - final DatabasePageManagerCacheObject other = (DatabasePageManagerCacheObject) obj; - return getPath().equals(other.getPath()); - } - return false; - } - - /* (non-Javadoc) - * @see java.lang.Object#hashCode() - */ - public int hashCode() - { - return getPath().hashCode(); - } - - // Data access - - /** - * @return wrapper id - */ - public Identity getId() - { - return id; - } - - /** - * @return wrapper path - */ - public String getPath() - { - return path; - } -} Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/util/interceptors/PageManagerInterceptor.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/util/interceptors/PageManagerInterceptor.java 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/util/interceptors/PageManagerInterceptor.java 2009-03-11 02:13:53 UTC (rev 1791) @@ -46,11 +46,6 @@ DatabasePageManagerCache.rollbackTransactions(); throw exp; } - finally - { - DatabasePageManagerCache.clearTransactions(); - } - } } Deleted: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/database-page-manager-base.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/database-page-manager-base.xml 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/database-page-manager-base.xml 2009-03-11 02:13:53 UTC (rev 1791) @@ -1,102 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - org.apache.jetspeed.page.PageManager - - - - - - - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - PROPAGATION_SUPPORTS - - - - - - - - - - - - - setPageManagerProxy - - - - - - - - Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/database-page-manager.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/database-page-manager.xml 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/database-page-manager.xml 2009-03-11 02:13:53 UTC (rev 1791) @@ -18,20 +18,65 @@ --> - - - + - JETSPEED-INF/ojb/page-manager-repository.xml + JETSPEED-INF/ojb/page-manager-repository.xml + + 128 + + 0 - false + false - false - - - - + false + + + + org.apache.jetspeed.page.PageManager + + + + + + + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + + + + + + + + setPageManagerProxy + + + + + + + Deleted: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/distributed-ehcache.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/distributed-ehcache.xml 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/distributed-ehcache.xml 2009-03-11 02:13:53 UTC (rev 1791) @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - Deleted: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/ehcache.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/ehcache.xml 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/ehcache.xml 2009-03-11 02:13:53 UTC (rev 1791) @@ -1,51 +0,0 @@ - - - - - - - - - - - - - - - Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/interceptors.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/interceptors.xml 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/interceptors.xml 2009-03-11 02:13:53 UTC (rev 1791) @@ -16,14 +16,35 @@ limitations under the License. --> - + - - - + --> + Deleted: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/log4j-stdout.properties =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/log4j-stdout.properties 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/log4j-stdout.properties 2009-03-11 02:13:53 UTC (rev 1791) @@ -1,31 +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. - -# ------------------------------------------------------------------------ -# -# Stdout Logging Configuration -# -# $Id: log4j.properties 722139 2008-12-01 17:22:03Z rwatler $ -# -# ------------------------------------------------------------------------ - -log4j.rootLogger = ERROR, stdout - -log4j.category.org.apache.jetspeed = INFO, stdout -log4j.additivity.org.apache.jetspeed = false - -log4j.appender.stdout = org.apache.log4j.ConsoleAppender -log4j.appender.stdout.layout = org.apache.log4j.PatternLayout -log4j.appender.stdout.layout.conversionPattern = %d [%t] %-5p %c - %m%n Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/org/apache/jetspeed/page/TestTransactions.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/org/apache/jetspeed/page/TestTransactions.java 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/org/apache/jetspeed/page/TestTransactions.java 2009-03-11 02:13:53 UTC (rev 1791) @@ -71,6 +71,12 @@ {"tx-page-manager.xml", "transaction.xml", "interceptors.xml"}; } + protected String[] getBootConfigurations() + { + return new String[] + {"boot/datasource.xml"}; + } + public void testTx() throws Exception { if (pageManager.folderExists("/")) Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/secure-database-page-manager.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/secure-database-page-manager.xml 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/secure-database-page-manager.xml 2009-03-11 02:13:53 UTC (rev 1791) @@ -18,20 +18,65 @@ --> - - - + JETSPEED-INF/ojb/page-manager-repository.xml + + 128 + + 0 - false + false - true - - - - + true + + + + org.apache.jetspeed.page.PageManager + + + + + + + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + + + + + + + + setPageManagerProxy + + + + + + + Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/secure-permissions-database-page-manager.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/secure-permissions-database-page-manager.xml 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/secure-permissions-database-page-manager.xml 2009-03-11 02:13:53 UTC (rev 1791) @@ -18,20 +18,65 @@ --> - - - + JETSPEED-INF/ojb/page-manager-repository.xml + + 128 + + 0 - true + true - false - - - - + false + + + + org.apache.jetspeed.page.PageManager + + + + + + + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + + + + + + + + setPageManagerProxy + + + + + + + Copied: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/tx-page-manager.xml (from rev 1784, pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/tx-page-manager.xml) =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/tx-page-manager.xml (rev 0) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/page-manager/src/test/tx-page-manager.xml 2009-03-11 02:13:53 UTC (rev 1791) @@ -0,0 +1,82 @@ + + + + + + + + + JETSPEED-INF/ojb/page-manager-repository.xml + + 128 + + 0 + + false + + false + + + + + + org.apache.jetspeed.page.PageManager + + + + + + + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_REQUIRED,-org.apache.jetspeed.page.document.NodeException + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + PROPAGATION_SUPPORTS + + + + + + + + setPageManagerProxy + + + + + + + + Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/portal/src/test/org/apache/jetspeed/container/state/TestNavigationalState.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/portal/src/test/org/apache/jetspeed/container/state/TestNavigationalState.java 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/components/portal/src/test/org/apache/jetspeed/container/state/TestNavigationalState.java 2009-03-11 02:13:53 UTC (rev 1791) @@ -131,9 +131,6 @@ portletApplicationMock.expects(new AnyArgumentsMatcher()).method( "getId").withNoArguments().will( new ReturnStub(new JetspeedLongObjectID(1))); - portletApplicationMock.expects(new AnyArgumentsMatcher()).method( - "getName").withNoArguments().will(new ReturnStub("app1")); - portletDefinitionMock.expects(new AnyArgumentsMatcher()).method( "getPortletApplicationDefinition").withNoArguments().will( new ReturnStub(portletApplicationMock.proxy())); Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/core-build.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/core-build.xml 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/core-build.xml 2009-03-11 02:13:53 UTC (rev 1791) @@ -106,25 +106,11 @@ ehcache - 1.5.0 + 1.2.4 true - - backport-util-concurrent - 3.1 - - true - - - - jsr107cache - 1.0 - - true - - @@ -265,13 +251,6 @@ false - - commons-jexl - 1.1 - - false - - Deleted: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/db-ojb/distributed-ehcache.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/db-ojb/distributed-ehcache.xml 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/db-ojb/distributed-ehcache.xml 2009-03-11 02:13:53 UTC (rev 1791) @@ -1,543 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/db-ojb/ehcache.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/db-ojb/ehcache.xml 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/db-ojb/ehcache.xml 2009-03-11 02:13:53 UTC (rev 1791) @@ -135,7 +135,13 @@ * stashRemoteCachePeers (optional) - specify "true" or "false". Defaults to true. CachePeer objects are stashed for performance. * jndiUrls (mandatory) - specify a pipe separated list of jndiUrls, - in the form protocol//hostname:port + in the form protocol//hostname:port + + --> @@ -179,6 +185,9 @@ net.sf.ehcache.distribution.JNDIManualRMICacheManagerPeerProviderFactoryerFactory. Properties for JNDIRMICacheManagerPeerListenerFactory are the same as RMICacheManagerPeerListenerFactory. + + --> @@ -323,7 +332,8 @@ If there are more than 10000 elements it will overflow to the disk cache, which in this configuration will go to wherever java.io.tmp is - defined on your system. On a standard Linux system this will be /tmp + defined on your system. On a standard Linux system this will be /tmp" + timeToIdleSeconds and timeToLiveSeconds to live are both set at 8 hours (28800) this is the default setting for portlets who set their expiration cache as -1 --> @@ -345,6 +355,13 @@ timeToIdleSeconds="28800" timeToLiveSeconds="28800" memoryStoreEvictionPolicy="LFU"> +
@@ -366,6 +383,13 @@ timeToIdleSeconds="28800" timeToLiveSeconds="28800" memoryStoreEvictionPolicy="LFU"> +
+ @@ -510,24 +541,4 @@ memoryStoreEvictionPolicy="LFU" /> - - - - - - Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/import/assembly/import-page-manager.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/import/assembly/import-page-manager.xml 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/import/assembly/import-page-manager.xml 2009-03-11 02:13:53 UTC (rev 1791) @@ -24,14 +24,14 @@ class="org.apache.jetspeed.page.impl.DatabasePageManager"> JETSPEED-INF/ojb/page-manager-repository.xml + + 128 + + 0 - false + false - false - - - - + false Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/import/build.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/import/build.xml 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/import/build.xml 2009-03-11 02:13:53 UTC (rev 1791) @@ -89,7 +89,6 @@ - Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/import/export.properties =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/import/export.properties 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/import/export.properties 2009-03-11 02:13:53 UTC (rev 1791) @@ -16,7 +16,7 @@ # comma-separated list of boot assemblies for Spring boot.assemblies = repository-datasource-spring.xml # comma-separated list of assemblies for Spring -assemblies = import-page-manager.xml, transaction.xml, interceptors.xml, cache.xml +assemblies = import-page-manager.xml, transaction.xml, interceptors.xml # root folder to start importing from root.folder = / # overwrite folders flag, set to true to replace existing folders Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/import/import.properties =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/import/import.properties 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/etc/import/import.properties 2009-03-11 02:13:53 UTC (rev 1791) @@ -16,7 +16,7 @@ # comma-separated list of boot assemblies for Spring boot.assemblies = repository-datasource-spring.xml # comma-separated list of assemblies for Spring -assemblies = import-page-manager.xml, transaction.xml, interceptors.xml, cache.xml +assemblies = import-page-manager.xml, transaction.xml, interceptors.xml # root folder to start exporting from root.folder = / # overwrite folders flag, set to true to replace existing folders Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/jetspeed-api/src/java/org/apache/jetspeed/cache/JetspeedCache.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/jetspeed-api/src/java/org/apache/jetspeed/cache/JetspeedCache.java 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/jetspeed-api/src/java/org/apache/jetspeed/cache/JetspeedCache.java 2009-03-11 02:13:53 UTC (rev 1791) @@ -145,11 +145,4 @@ * @return the size of the cache */ int getSize(); - - /** - * Returns whether this cache is currently part of a distributed cache cluster. - * - * @return distributed flag - */ - boolean isDistributed(); } \ No newline at end of file Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/jetspeed-api/src/java/org/apache/jetspeed/page/PageManager.java =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/jetspeed-api/src/java/org/apache/jetspeed/page/PageManager.java 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/jetspeed-api/src/java/org/apache/jetspeed/page/PageManager.java 2009-03-11 02:13:53 UTC (rev 1791) @@ -40,7 +40,6 @@ import org.apache.jetspeed.page.document.DocumentNotFoundException; import org.apache.jetspeed.page.document.FailedToDeleteDocumentException; import org.apache.jetspeed.page.document.FailedToUpdateDocumentException; -import org.apache.jetspeed.page.document.Node; import org.apache.jetspeed.page.document.NodeException; import org.apache.jetspeed.page.document.NodeSet; import org.apache.jetspeed.page.document.UnsupportedDocumentTypeException; @@ -782,19 +781,4 @@ * @return */ public boolean checkConstraint(String securityConstraintName, String actions); - - /** - * Returns whether the page manager cache is currently part of a distributed - * cache cluster. - * - * @return distributed flag - */ - public boolean isDistributed(); - - /** - * Notify page manager listeners that node modification was externally detected. - * - * @param node updated managed node if known - */ - public void notifyUpdatedNode(Node node); } Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/maven.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/maven.xml 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/maven.xml 2009-03-11 02:13:53 UTC (rev 1791) @@ -348,8 +348,6 @@ file="./src/webapp/WEB-INF/assembly/transaction.xml"/> - @@ -387,8 +385,6 @@ file="./src/webapp/WEB-INF/assembly/transaction.xml"/> - Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/src/webapp/WEB-INF/assembly/alternate/db-page-manager.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/src/webapp/WEB-INF/assembly/alternate/db-page-manager.xml 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/src/webapp/WEB-INF/assembly/alternate/db-page-manager.xml 2009-03-11 02:13:53 UTC (rev 1791) @@ -25,14 +25,15 @@ class="org.apache.jetspeed.page.impl.DatabasePageManager"> JETSPEED-INF/ojb/page-manager-repository.xml + + 128 + + + -1 - false + false - true - - - - + true Modified: pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/src/webapp/WEB-INF/assembly/cache.xml =================================================================== --- pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/src/webapp/WEB-INF/assembly/cache.xml 2009-03-08 00:21:20 UTC (rev 1790) +++ pal-portal/branches/pal-portal-1.x/portal/jetspeed-2/src/webapp/WEB-INF/assembly/cache.xml 2009-03-11 02:13:53 UTC (rev 1791) @@ -18,15 +18,11 @@ --> - - - - - - - + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + From svnnotify @ sourceforge.jp Wed Mar 11 14:09:48 2009 From: svnnotify @ sourceforge.jp (svnnotify @ sourceforge.jp) Date: Wed, 11 Mar 2009 14:09:48 +0900 Subject: [pal-cvs 4057] [1792] updated images. Message-ID: <1236748188.031297.17913.nullmailer@users.sourceforge.jp> Revision: 1792 http://svn.sourceforge.jp/view?root=pal&view=rev&rev=1792 Author: sone Date: 2009-03-11 14:09:47 +0900 (Wed, 11 Mar 2009) Log Message: ----------- updated images. Modified Paths: -------------- pal-portal/docs/ja/administration-guide/trunk/src/images/usermng0.png pal-portal/docs/ja/administration-guide/trunk/src/images/usermng1.png pal-portal/docs/ja/administration-guide/trunk/src/images/usermng10.png pal-portal/docs/ja/administration-guide/trunk/src/images/usermng11.png pal-portal/docs/ja/administration-guide/trunk/src/images/usermng12.png pal-portal/docs/ja/administration-guide/trunk/src/images/usermng13.png pal-portal/docs/ja/administration-guide/trunk/src/images/usermng14.png pal-portal/docs/ja/administration-guide/trunk/src/images/usermng15.png pal-portal/docs/ja/administration-guide/trunk/src/images/usermng16.png pal-portal/docs/ja/administration-guide/trunk/src/images/usermng17.png pal-portal/docs/ja/administration-guide/trunk/src/images/usermng18.png pal-portal/docs/ja/administration-guide/trunk/src/images/usermng19.png pal-portal/docs/ja/administration-guide/trunk/src/images/usermng2.png pal-portal/docs/ja/administration-guide/trunk/src/images/usermng20.png pal-portal/docs/ja/administration-guide/trunk/src/images/usermng21.png pal-portal/docs/ja/administration-guide/trunk/src/images/usermng22.png pal-portal/docs/ja/administration-guide/trunk/src/images/usermng23.png pal-portal/docs/ja/administration-guide/trunk/src/images/usermng24.png pal-portal/docs/ja/administration-guide/trunk/src/images/usermng25.png pal-portal/docs/ja/administration-guide/trunk/src/images/usermng26.png pal-portal/docs/ja/administration-guide/trunk/src/images/usermng27.png pal-portal/docs/ja/administration-guide/trunk/src/images/usermng3.png pal-portal/docs/ja/administration-guide/trunk/src/images/usermng4.png pal-portal/docs/ja/administration-guide/trunk/src/images/usermng5.png pal-portal/docs/ja/administration-guide/trunk/src/images/usermng6.png pal-portal/docs/ja/administration-guide/trunk/src/images/usermng7.png pal-portal/docs/ja/administration-guide/trunk/src/images/usermng8.png pal-portal/docs/ja/administration-guide/trunk/src/images/usermng9.png pal-portal/docs/ja/administration-guide/trunk/src/images/wcm_edit3.png pal-portal/docs/ja/administration-guide/trunk/src/images/wcm_edit4.png pal-portal/docs/ja/administration-guide/trunk/src/images/wcm_edit5.png pal-portal/docs/ja/administration-guide/trunk/src/images/wcm_edit6.png pal-portal/docs/ja/administration-guide/trunk/src/images/wcm_edit7.png pal-portal/docs/ja/administration-guide/trunk/src/images/wcm_i18n1.png pal-portal/docs/ja/administration-guide/trunk/src/images/wcm_i18n5.png pal-portal/docs/ja/administration-guide/trunk/src/images/wcm_i18n6.png pal-portal/docs/ja/administration-guide/trunk/src/images/wcm_i18n7.png pal-portal/docs/ja/administration-guide/trunk/src/images/wcm_i18n8.png -------------- next part -------------- Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/usermng0.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/usermng1.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/usermng10.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/usermng11.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/usermng12.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/usermng13.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/usermng14.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/usermng15.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/usermng16.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/usermng17.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/usermng18.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/usermng19.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/usermng2.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/usermng20.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/usermng21.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/usermng22.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/usermng23.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/usermng24.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/usermng25.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/usermng26.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/usermng27.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/usermng3.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/usermng4.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/usermng5.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/usermng6.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/usermng7.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/usermng8.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/usermng9.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/wcm_edit3.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/wcm_edit4.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/wcm_edit5.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/wcm_edit6.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/wcm_edit7.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/wcm_i18n1.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/wcm_i18n5.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/wcm_i18n6.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/wcm_i18n7.png =================================================================== (Binary files differ) Modified: pal-portal/docs/ja/administration-guide/trunk/src/images/wcm_i18n8.png =================================================================== (Binary files differ) From svnnotify @ sourceforge.jp Sun Mar 15 17:37:52 2009 From: svnnotify @ sourceforge.jp (svnnotify @ sourceforge.jp) Date: Sun, 15 Mar 2009 17:37:52 +0900 Subject: [pal-cvs 4058] [1793] modified image position and contents. Message-ID: <1237106272.957697.13793.nullmailer@users.sourceforge.jp> Revision: 1793 http://svn.sourceforge.jp/view?root=pal&view=rev&rev=1793 Author: shinsuke Date: 2009-03-15 17:37:52 +0900 (Sun, 15 Mar 2009) Log Message: ----------- modified image position and contents. Modified Paths: -------------- pal-portal/docs/ja/administration-guide/trunk/src/tex/overview/portal.tex pal-portal/docs/ja/administration-guide/trunk/src/tex/portlet-management/deploy-portlet.tex pal-portal/docs/ja/administration-guide/trunk/src/tex/portlet-management/deploy-remote-portlet.tex pal-portal/docs/ja/administration-guide/trunk/src/tex/portlet-management/manage-portlet.tex pal-portal/docs/ja/administration-guide/trunk/src/tex/site/page.tex pal-portal/docs/ja/administration-guide/trunk/src/tex/site/site-user.tex pal-portal/docs/ja/administration-guide/trunk/src/tex/site/virtual-host.tex pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/add-portlet.tex pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/change-layout.tex pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/create-folder.tex pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/create-page.tex pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/delete-folder.tex pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/delete-page.tex pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/edit-folder.tex pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/edit-page.tex pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/guide.tex pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/open-siteeditor.tex pal-portal/docs/ja/administration-guide/trunk/src/tex/user-management/create-group.tex pal-portal/docs/ja/administration-guide/trunk/src/tex/user-management/create-role.tex pal-portal/docs/ja/administration-guide/trunk/src/tex/user-management/create-user.tex pal-portal/docs/ja/administration-guide/trunk/src/tex/user-management/delete-group.tex pal-portal/docs/ja/administration-guide/trunk/src/tex/user-management/delete-role.tex pal-portal/docs/ja/administration-guide/trunk/src/tex/user-management/delete-user.tex pal-portal/docs/ja/administration-guide/trunk/src/tex/user-management/guide.tex pal-portal/docs/ja/administration-guide/trunk/src/tex/user-management/update-user.tex pal-portal/docs/ja/administration-guide/trunk/src/tex/wcm/edit.tex pal-portal/docs/ja/administration-guide/trunk/src/tex/wcm/i18n.tex pal-portal/docs/ja/administration-guide/trunk/src/tex/wcm/view.tex pal-portal/docs/ja/configuration-guide/trunk/src/tex/ajax/api.tex pal-portal/docs/ja/configuration-guide/trunk/src/tex/batch/usermanager.tex pal-portal/docs/ja/configuration-guide/trunk/src/tex/config/asyncaggregator.tex pal-portal/docs/ja/configuration-guide/trunk/src/tex/config/spring.tex pal-portal/docs/ja/configuration-guide/trunk/src/tex/configuration-guide.tex pal-portal/docs/ja/configuration-guide/trunk/src/tex/db/config.tex pal-portal/docs/ja/configuration-guide/trunk/src/tex/db/table.tex pal-portal/docs/ja/configuration-guide/trunk/src/tex/design/jpt.tex pal-portal/docs/ja/configuration-guide/trunk/src/tex/design/layout-decorator.tex pal-portal/docs/ja/configuration-guide/trunk/src/tex/design/layout.tex pal-portal/docs/ja/configuration-guide/trunk/src/tex/design/portlet-decorator.tex pal-portal/docs/ja/configuration-guide/trunk/src/tex/install/guide.tex pal-portal/docs/ja/configuration-guide/trunk/src/tex/portal/architecture.tex pal-portal/docs/ja/configuration-guide/trunk/src/tex/portlet/portlet.tex pal-portal/docs/ja/configuration-guide/trunk/src/tex/profiler/profilingrule.tex pal-portal/docs/ja/configuration-guide/trunk/src/tex/psml/guide.tex pal-portal/docs/ja/configuration-guide/trunk/src/tex/psml/menu.tex pal-portal/docs/ja/configuration-guide/trunk/src/tex/psml/security.tex pal-portal/docs/ja/configuration-guide/trunk/src/tex/security/config.tex pal-portal/docs/ja/configuration-guide/trunk/src/tex/security/credential.tex pal-portal/docs/ja/configuration-guide/trunk/src/tex/security/guide.tex pal-portal/docs/ja/configuration-guide/trunk/src/tex/security/login.tex -------------- next part -------------- Modified: pal-portal/docs/ja/administration-guide/trunk/src/tex/overview/portal.tex =================================================================== --- pal-portal/docs/ja/administration-guide/trunk/src/tex/overview/portal.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/administration-guide/trunk/src/tex/overview/portal.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -28,7 +28,7 @@ PALポータルのインストール後、ユーザーはウェブブラウザにより、ポータルページの URL を指定して、設定された認証サービス (デフォルトではデータベースを利用) を利用してアクセスすることができます。 一度、認証されると、ログインしたユーザー用のポータルページが表示されます。 -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=140mm]{images/palportal_top.eps} \caption{PALポータルのトップページ} Modified: pal-portal/docs/ja/administration-guide/trunk/src/tex/portlet-management/deploy-portlet.tex =================================================================== --- pal-portal/docs/ja/administration-guide/trunk/src/tex/portlet-management/deploy-portlet.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/administration-guide/trunk/src/tex/portlet-management/deploy-portlet.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -39,7 +39,7 @@ ポータル管理者は、公開するポートレットのアプリケーションを「ポートレット管理」から配備することが可能です。 「ポートレット管理」の「配備」タブを選択してください。 -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=60mm]{images/port_mng0.eps} \caption{「配備」タブを選択} @@ -50,7 +50,7 @@ 「ポートレットアプリケーションの配備」が表示されます。 -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=90mm]{images/port_mng1.eps} \caption{ポートレットアプリケーションの配備} Modified: pal-portal/docs/ja/administration-guide/trunk/src/tex/portlet-management/deploy-remote-portlet.tex =================================================================== --- pal-portal/docs/ja/administration-guide/trunk/src/tex/portlet-management/deploy-remote-portlet.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/administration-guide/trunk/src/tex/portlet-management/deploy-remote-portlet.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -34,7 +34,7 @@ ポータル管理者は、公開するポートレットのアプリケーションを「ポートレット管理」から配備することが可能です。 「ポートレット管理」の「配備」タブを選択してください。 -\begin{figure}[htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=60mm]{images/port_mng0.eps} \caption{「配備」タブを選択} @@ -50,7 +50,7 @@ 「リモート」を選択すると、利用可能なリポジトリ、ポートレットアプリケーションが一覧で表示されます。 -\begin{figure}[htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=110mm]{images/port_mng2.eps} \caption{配備可能なリモートリポジトリのポートレット一覧} @@ -62,7 +62,7 @@ 配備したいポートレットの「配備」を選択すると、確認画面が表示されます。 「配備」ボタンを押下すると、ポートレットの配備は完了します。 -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=60mm]{images/port_mng10.eps} \caption{「配備」ボタンを押下で配備完了} Modified: pal-portal/docs/ja/administration-guide/trunk/src/tex/portlet-management/manage-portlet.tex =================================================================== --- pal-portal/docs/ja/administration-guide/trunk/src/tex/portlet-management/manage-portlet.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/administration-guide/trunk/src/tex/portlet-management/manage-portlet.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -34,7 +34,7 @@ ポートレットの開始・停止・配備解除・削除を行うには、「ポートレット管理」の「ポートレット」タブを選択します。 選択後、ポートレットアプリケーションの一覧が表示されます。それぞれ行う対象操作のリンクを選択してください。 -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=100mm]{images/port_mng12.eps} \caption{ポートレット一覧} Modified: pal-portal/docs/ja/administration-guide/trunk/src/tex/site/page.tex =================================================================== --- pal-portal/docs/ja/administration-guide/trunk/src/tex/site/page.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/administration-guide/trunk/src/tex/site/page.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -39,7 +39,7 @@ バーチャルホストの設定をしていない場合は、/\_\_subsite-root がサイトのルートフォルダになります。 ゲストユーザーのデフォルトページである /\_\_subsite-root/default-page.psml を表示します(図\ref{fig:site_page1})。 -\begin{figure}[!htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=90mm]{images/site_page1.eps} \caption{ゲストユーザーのデフォルトページ} @@ -56,7 +56,7 @@ 編集する PSML ファイルをサイトエディターで表示後、「このページに移動」ボタンをクリックします。 指定されたページが編集モードで表示されます(図\ref{fig:site_page2})。 -\begin{figure}[!htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/site_page2.eps} \caption{編集モードでの表示} Modified: pal-portal/docs/ja/administration-guide/trunk/src/tex/site/site-user.tex =================================================================== --- pal-portal/docs/ja/administration-guide/trunk/src/tex/site/site-user.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/administration-guide/trunk/src/tex/site/site-user.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -37,7 +37,7 @@ まず、ユーザー管理ツールを利用して、ユーザーを追加します。 ユーザー管理を表示します(図\ref{fig:site_user1})。 -\begin{figure}[!htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=90mm]{images/site_user1.eps} \caption{ユーザー管理画面} @@ -48,7 +48,7 @@ 「新規」リンクをクリックします(図\ref{fig:site_user2})。 -\begin{figure}[!htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=80mm]{images/site_user2.eps} \caption{ユーザーの新規作成} @@ -62,7 +62,7 @@ 確認画面で内容を確認して、問題がなければ、「登録」ボタンをクリックして、 登録します(図\ref{fig:site_user3})。 -\begin{figure}[!htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=85mm]{images/site_user3.eps} \caption{ユーザーの登録} @@ -79,7 +79,7 @@ まず、ユーザー管理ツールを利用して、対象ユーザーの編集画面を表示します(図\ref{fig:site_user4})。 -\begin{figure}[!htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=90mm]{images/site_user4.eps} \caption{対象ユーザーの編集画面} @@ -90,7 +90,7 @@ 「ロール」リンクをクリックします(図\ref{fig:site_user5})。 -\begin{figure}[!htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=80mm]{images/site_user5.eps} \caption{ロールの表示} @@ -101,7 +101,7 @@ 「新規ロール」プルダウンボックスから「siteadmin」を選択して、「追加」ボタンをクリックします(図\ref{fig:site_user6})。 -\begin{figure}[!htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=90mm]{images/site_user6.eps} \caption{siteadminロールの追加} Modified: pal-portal/docs/ja/administration-guide/trunk/src/tex/site/virtual-host.tex =================================================================== --- pal-portal/docs/ja/administration-guide/trunk/src/tex/site/virtual-host.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/administration-guide/trunk/src/tex/site/virtual-host.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -40,7 +40,7 @@ /\_\_subsite-root/\_hostname/www.example.com フォルダをルートフォルダとして、 ページを作成します(図\ref{fig:site_vhost1})。 -\begin{figure}[htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=100mm]{images/site_vhost1.eps} \caption{ページ作成例} Modified: pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/add-portlet.tex =================================================================== --- pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/add-portlet.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/add-portlet.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -26,7 +26,7 @@ ログイン後、編集可能なページで「コンテンツを追加」をクリック後、プルダウンメニューから 配置可能なポートレットを選択することができます(図\ref{fig:port_add__1})。 -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=90mm]{images/port_add__1.eps} \caption{「コンテンツを追加」リンクをクリック後、ポートレットを選択} @@ -35,7 +35,7 @@ \end{figure} -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/port_add__2.eps} \caption{「パスワードの再発行」ポートレットを追加した例} @@ -55,7 +55,7 @@ ログイン後、編集可能なページで「ページを編集」リンクを選択し、サイトエディターを表示します(図\ref{fig:port_add1})。 -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/port_add1.eps} \caption{「ページを編集」リンクを選択し,サイトエディターを表示} @@ -69,7 +69,7 @@ 「サイトエディター」画面の左側のツリー表示部分から、ポートレットを追加したいページを選択して、レイアウトを選択します(図\ref{fig:port_add1})。 ここでは「2 列レイアウト(50/50)」を選択します(図\ref{fig:port_add3})。 -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/port_add3.eps} \caption{レイアウトを選択} @@ -82,7 +82,7 @@ 「追加」タブを選択します。 -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/port_add4.eps} \caption{ポートレットの選択} @@ -103,7 +103,7 @@ 画面には、追加したポートレットが表示されます。 (図\ref{fig:port_add6}は「ユーザー登録」ポートレットを追加した例) -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/port_add6.eps} \caption{「ユーザー登録」ポートレットを追加した例} Modified: pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/change-layout.tex =================================================================== --- pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/change-layout.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/change-layout.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -34,7 +34,7 @@ admin ユーザーでシステムへログインし、「サイトエディター」ページを表示するとサイトエディターが表示されます。 または、各ユーザーで編集可能なページを表示して、「ページを編集」リンクをクリックして「サイトエディター」を表示します(図\ref{fig:siteeditor_changelayout1})。 -\begin{figure}[htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/siteeditor_changelayout1.eps} \caption{サイトエディターの表示} @@ -47,7 +47,7 @@ サイトエディターの左に表示されているフォルダおよびページのツリー表示の中から、レイアウトを変更したいページを選択します(図\ref{fig:siteeditor_changelayout2})。 -\begin{figure}[htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/siteeditor_changelayout2.eps} \caption{ページの選択} @@ -59,7 +59,7 @@ ページ内に含まれている変更したいレイアウトを選択します。 ここでは、「一列レイアウト」を選択します(図\ref{fig:siteeditor_changelayout3})。 -\begin{figure}[htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/siteeditor_changelayout3.eps} \caption{レイアウトの選択} @@ -75,7 +75,7 @@ レイアウトのプルダウンボックスを変更したら、「更新」ボタンを押下します。 -\begin{figure}[htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/siteeditor_changelayout4.eps} \caption{レイアウト更新完了} @@ -87,7 +87,7 @@ レイアウトが更新されると、正常にレイアウトを更新したことを伝えるメッセージが表示されます(図\ref{fig:siteeditor_changelayout4})。 一般ユーザーでページを変更している場合は、「完了」リンクをクリックして、レイアウトが変更されたかどうかを確認します(図\ref{fig:siteeditor_changelayout5})。 -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/siteeditor_changelayout5.eps} \caption{レイアウト更新の確認} Modified: pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/create-folder.tex =================================================================== --- pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/create-folder.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/create-folder.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -36,7 +36,7 @@ または、各ユーザーで編集可能なフォルダを表示して、 「ページを編集」リンクをクリックして「サイトエディター」を表示します(図\ref{fig:siteeditor_createfolder1})。 -\begin{figure}[htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/siteeditor_createfolder1.eps} \caption{サイトエディターの表示} @@ -51,7 +51,7 @@ フォルダを作成したいフォルダを左側のフォルダ・フォルダのツリー表示から選択します。 ここでは、「/\_user/admin/\_mediatype/html」を選択している画面です(図\ref{fig:siteeditor_createfolder2})。 -\begin{figure}[htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/siteeditor_createfolder2.eps} \caption{/\_user/admin/\_mediatype/html を選択している画面} @@ -62,7 +62,7 @@ 次に、右側の「追加」タブを選択し、「フォルダ・フォルダの追加」を表示します(図\ref{fig:siteeditor_createfolder3})。 -\begin{figure}[htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/siteeditor_createfolder3.eps} \caption{「追加」タブの選択} @@ -80,7 +80,7 @@ デスクトップテーマは現在利用されていません。 フォルダを非表示を選択すると、URL を直接参照しない限り、一覧などに表示されなくなります。 -\begin{figure}[htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/siteeditor_createfolder4.eps} \caption{フォルダ情報の入力} @@ -91,7 +91,7 @@ フォルダ情報を入力したら、「フォルダの追加」ボタンを押下して、フォルダを追加します。 -\begin{figure}[htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/siteeditor_createfolder5.eps} \caption{フォルダ作成} Modified: pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/create-page.tex =================================================================== --- pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/create-page.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/create-page.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -32,7 +32,7 @@ admin ユーザーでシステムへログインし、「サイトエディター」ページを表示するとサイトエディターが表示されます。 または、各ユーザーで編集可能なページを表示して、「ページを編集」リンクをクリックして「サイトエディター」を表示します(図\ref{fig:siteeditor_createpage1})。 -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/siteeditor_createpage1.eps} \caption{サイトエディターの表示} @@ -52,7 +52,7 @@ ページはフォルダ内に作成するので、まず、ページを作成したいフォルダを左側のフォルダ・ページのツリー表示から選択します。 ここでは、「/\_user/admin/\_mediatype/html」を選択している画面です(図\ref{fig:siteeditor_createpage2})。 -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/siteeditor_createpage2.eps} \caption{/\_user/admin/\_mediatype/html を選択している画面} @@ -63,7 +63,7 @@ 次に、右側の「追加」タブを選択し、「フォルダ・ページの追加」を表示します(図\ref{fig:siteeditor_createpage3})。 -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/siteeditor_createpage3.eps} \caption{「追加」タブの選択} @@ -82,7 +82,7 @@ デスクトップテーマは現在利用されていません。 ページを非表示を選択すると、URL を直接参照しない限り、一覧などに表示されなくなります。 -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/siteeditor_createpage4.eps} \caption{ページ情報の入力} @@ -93,7 +93,7 @@ ページ情報を入力したら、「ページの追加」ボタンを押下して、ページを追加します。 -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/siteeditor_createpage5.eps} \caption{ページの追加} Modified: pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/delete-folder.tex =================================================================== --- pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/delete-folder.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/delete-folder.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -34,7 +34,7 @@ admin ユーザーでシステムへログインし、「サイトエディター」フォルダを表示するとサイトエディターが表示されます。 または、各ユーザーで編集可能なフォルダを表示して、「ページを編集」リンクをクリックして「サイトエディター」を表示します(図\ref{fig:siteeditor_deletefolder1})。 -\begin{figure}[htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/siteeditor_deletefolder1.eps} \caption{サイトエディターの表示} @@ -47,7 +47,7 @@ サイトエディターの左側に表示されているフォルダおよびフォルダのツリー表示の中から、削除したいフォルダを選択します(図\ref{fig:siteeditor_deletefolder2})。 -\begin{figure}[htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/siteeditor_deletefolder2.eps} \caption{削除したいフォルダを選択} @@ -58,7 +58,7 @@ 「削除」ボタンを押下すると、確認メッセージが表示されます(図\ref{fig:siteeditor_deletefolder3})。 -\begin{figure}[htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=60mm]{images/siteeditor_deletefolder3.eps} \caption{確認メッセージ} @@ -69,7 +69,7 @@ OK ボタンを押下して、削除します。 -\begin{figure}[htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/siteeditor_deletefolder4.eps} \caption{削除完了メッセージ} Modified: pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/delete-page.tex =================================================================== --- pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/delete-page.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/delete-page.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -34,7 +34,7 @@ admin ユーザーでシステムへログインし、「サイトエディター」ページを表示するとサイトエディターが表示されます。 または、各ユーザーで編集可能なページを表示して、「ページを編集」リンクをクリックして「サイトエディター」を表示します(図\ref{fig:siteeditor_deletepage1})。 -\begin{figure}[htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/siteeditor_deletepage1.eps} \caption{サイトエディターの表示} @@ -47,7 +47,7 @@ サイトエディターの左側に表示されているフォルダおよびページのツリー表示の中から、削除したいページを選択します(図\ref{fig:siteeditor_deletepage2})。 -\begin{figure}[htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/siteeditor_deletepage2.eps} \caption{削除するページの選択} @@ -58,7 +58,7 @@ 「削除」ボタンを押下すると、確認メッセージが表示されます(図\ref{fig:siteeditor_deletepage3})。 -\begin{figure}[htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=70mm]{images/siteeditor_deletepage3.eps} \caption{確認メッセージ} @@ -69,7 +69,7 @@ OK ボタンを押下して、削除します。 -\begin{figure}[htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/siteeditor_deletepage4.eps} \caption{ページ削除} Modified: pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/edit-folder.tex =================================================================== --- pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/edit-folder.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/edit-folder.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -34,7 +34,7 @@ admin ユーザーでシステムへログインし、「サイトエディター」フォルダを表示するとサイトエディターが表示されます。 または、各ユーザーで編集可能なフォルダを表示して、「ページを編集」リンクをクリックして「サイトエディター」を表示します(図\ref{fig:siteeditor_editfolder1})。 -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/siteeditor_editfolder1.eps} \caption{サイトエディターの表示} @@ -47,7 +47,7 @@ サイトエディターの左に表示されているフォルダおよびフォルダのツリー表示の中から、編集したいフォルダを選択します(図\ref{fig:siteeditor_editfolder2})。 -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/siteeditor_editfolder2.eps} \caption{フォルダの選択} @@ -66,7 +66,7 @@ 入力欄を更新したら、「更新」ボタンを押下して、フォルダ情報を更新します。 -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/siteeditor_editfolder3.eps} \caption{フォルダ更新完了} Modified: pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/edit-page.tex =================================================================== --- pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/edit-page.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/edit-page.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -34,7 +34,7 @@ admin ユーザーでシステムへログインし、「サイトエディター」ページを表示するとサイトエディターが表示されます。 または、各ユーザーで編集可能なページを表示して、「ページを編集」リンクをクリックして「サイトエディター」を表示します(図\ref{fig:siteeditor_editpage1})。 -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/siteeditor_editpage1.eps} \caption{サイトエディターの表示} @@ -47,7 +47,7 @@ サイトエディターの左に表示されているフォルダおよびページのツリー表示の中から、編集したいページを選択します(図\ref{fig:siteeditor_editpage2})。 -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/siteeditor_editpage2.eps} \caption{ページの選択} @@ -65,7 +65,7 @@ 入力欄を更新したら、「更新」ボタンを押下して、ページ情報を更新します。 -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/siteeditor_editpage3.eps} \caption{ページの更新} Modified: pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/guide.tex =================================================================== --- pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/guide.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/guide.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -42,7 +42,7 @@ サイトエディターを利用することで、それらの構成要素を編集することができます。 それらの構成要素は、ルートフォルダ(/)を起点として、ツリー構造を形成しています(図\ref{fig:siteeditor_guide1})。 -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/siteeditor_guide1.eps} \caption{サイトエディター} Modified: pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/open-siteeditor.tex =================================================================== --- pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/open-siteeditor.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/administration-guide/trunk/src/tex/site-editor/open-siteeditor.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -38,7 +38,7 @@ ログインして表示されるトップページにサイトエディターのアイコンが表示されているので、 サイトエディターを選択して利用できます(図\ref{fig:siteeditor_opensiteeditor1})。 -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/siteeditor_opensiteeditor1.eps} \caption{管理者ユーザーのトップページからサイトエディターへアクセス} @@ -53,7 +53,7 @@ 「ページを編集」リンクが表示されます。「ページを編集」リンクをクリックすることで、 サイトエディターを利用することができます(図\ref{fig:siteeditor_opensiteeditor2})。 -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/siteeditor_opensiteeditor2.eps} \caption{一般ユーザーとしてサイトエディターへアクセス} Modified: pal-portal/docs/ja/administration-guide/trunk/src/tex/user-management/create-group.tex =================================================================== --- pal-portal/docs/ja/administration-guide/trunk/src/tex/user-management/create-group.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/administration-guide/trunk/src/tex/user-management/create-group.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -33,7 +33,7 @@ グループを新規で登録する場合は、「ユーザー/ロール/グループ管理」の「グループ」タブを選択し、「新規」リンクを押下します(図\ref{fig:usermng19})。 -\begin{figure}[h!tb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=50mm]{images/usermng19.eps} \caption{「グループ」タブを選択後、「新規」リンクを押下} @@ -49,7 +49,7 @@ そのまま登録へ進むには、「確認」ボタンを押下します。 編集を中断する場合は「グループ一覧に戻る」ボタンを押下します(図\ref{fig:usermng20})。 -\begin{figure}[htbp!] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=50mm]{images/usermng20.eps} \caption{登録情報の入力後、「確認」ボタンを押下} @@ -62,7 +62,7 @@ 登録内容を確認し、登録を完了させるために、「登録」ボタンを押下します(図\ref{fig:usermng21})。 -\begin{figure}[htbp!] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=50mm]{images/usermng21.eps} \caption{登録内容確認後、「登録」ボタンを押下} @@ -75,7 +75,7 @@ 登録処理が完了し、画面には正常に完了した旨のメッセージが表示されます(図\ref{fig:usermng22})。 -\begin{figure}[htbp!] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=75mm]{images/usermng22.eps} \caption{グループ登録の完了} @@ -88,7 +88,7 @@ 登録されたグループは図\ref{fig:usermng23}のように、ユーザー情報の編集でのグループを指定することができます。 -\begin{figure}[htbp!] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=75mm]{images/usermng23.eps} \caption{ユーザーへのグループの追加} Modified: pal-portal/docs/ja/administration-guide/trunk/src/tex/user-management/create-role.tex =================================================================== --- pal-portal/docs/ja/administration-guide/trunk/src/tex/user-management/create-role.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/administration-guide/trunk/src/tex/user-management/create-role.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -33,7 +33,7 @@ ロールを新規で登録する場合は、「ユーザー/ロール/グループ管理」の「ロール」タブを選択し、「新規」リンクを押下します(図\ref{fig:usermng11})。 -\begin{figure}[htbp!] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=70mm]{images/usermng11.eps} \caption{「ロール」タブを選択後、「新規」リンクを押下} @@ -49,7 +49,7 @@ そのまま登録へ進むには、「確認」ボタンを押下します。 編集を中断する場合は「ロール一覧に戻る」ボタンを押下します(図\ref{fig:usermng12})。 -\begin{figure}[htbp!] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=50mm]{images/usermng12.eps} \caption{「ロール名」を入力後、「確認」ボタンを押下} @@ -62,7 +62,7 @@ 登録内容を確認し、登録を完了させるために、「登録」ボタンを押下します(図\ref{fig:usermng13})。 -\begin{figure}[htbp!] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=50mm]{images/usermng13.eps} \caption{登録内容確認後、「登録」ボタンを押下} @@ -75,7 +75,7 @@ 登録処理が完了し、画面には正常に完了した旨のメッセージが表示されます(図\ref{fig:usermng14})。 -\begin{figure}[htbp!] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=70mm]{images/usermng14.eps} \caption{ロール登録の完了} @@ -90,7 +90,7 @@ 新規ユーザー登録時に選択する場合は、登録されたロールは図\ref{fig:usermng15}のようにロール指定で利用することができます。 -\begin{figure}[htbp!] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=85mm]{images/usermng15.eps} \caption{ロール指定で選択可能} @@ -101,7 +101,7 @@ ユーザー情報の編集から登録したロールを追加する場合は、ユーザー情報編集画面でロールを選択することで図\ref{fig:usermng27}のようにロールを追加することができます。 -\begin{figure}[htbp!] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=85mm]{images/usermng27.eps} \caption{編集画面からのロールの選択} Modified: pal-portal/docs/ja/administration-guide/trunk/src/tex/user-management/create-user.tex =================================================================== --- pal-portal/docs/ja/administration-guide/trunk/src/tex/user-management/create-user.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/administration-guide/trunk/src/tex/user-management/create-user.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -33,7 +33,7 @@ 「ユーザー」タブを選択してユーザー情報一覧を表示し、「新規」リンクを押下します(図\ref{fig:usermng1})。 -\begin{figure}[htbp!] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/usermng1.eps} \caption{「新規」リンクを押下} @@ -49,7 +49,7 @@ 「確認」ボタンを押下して、入力内容確認ページを表示します。 編集を中断する場合は「ユーザー一覧へ戻る」ボタンを押下します(図\ref{fig:usermng2})。 -\begin{figure}[htbp!] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=70mm]{images/usermng2.eps} \caption{情報入力後、「確認」ボタンを押下} @@ -63,7 +63,7 @@ 登録内容を確認し、登録を完了させるために、「登録」ボタンを押下します。 編集を中断する場合は「編集に戻る」ボタンを押下します(図\ref{fig:usermng3})。 -\begin{figure}[htbp!] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=70mm]{images/usermng3.eps} \caption{登録情報の確認後、「登録」ボタンを押下} @@ -76,7 +76,7 @@ 登録処理が完了し、画面には正常に完了した旨のメッセージが表示されます(図\ref{fig:usermng4})。 -\begin{figure}[htbp!] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=90mm]{images/usermng4.eps} \caption{ユーザー登録完了} Modified: pal-portal/docs/ja/administration-guide/trunk/src/tex/user-management/delete-group.tex =================================================================== --- pal-portal/docs/ja/administration-guide/trunk/src/tex/user-management/delete-group.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/administration-guide/trunk/src/tex/user-management/delete-group.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -33,7 +33,7 @@ 「グループ一覧」で表示されている内容から、削除するグループの「削除」リンクを押下します(図\ref{fig:usermng24})。 -\begin{figure}[htbp!] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=70mm]{images/usermng24.eps} \caption{削除するグループの「削除」リンクを押下} @@ -46,7 +46,7 @@ 削除の最終確認を行い、「削除」ボタンを押下します。中止する場合は、「グループ一覧に戻る」ボタンを押下します(図\ref{fig:usermng25})。 -\begin{figure}[htbp!] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=50mm]{images/usermng25.eps} \caption{確認後、「削除」ボタンを押下} @@ -59,7 +59,7 @@ 削除処理が完了し、画面には正常に完了した旨のメッセージが表示されます(図\ref{fig:usermng26})。 -\begin{figure}[htbp!] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=70mm]{images/usermng26.eps} \caption{グループの削除完了} Modified: pal-portal/docs/ja/administration-guide/trunk/src/tex/user-management/delete-role.tex =================================================================== --- pal-portal/docs/ja/administration-guide/trunk/src/tex/user-management/delete-role.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/administration-guide/trunk/src/tex/user-management/delete-role.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -33,7 +33,7 @@ 「ロール一覧」で表示されている内容から、削除するロールの「削除」リンクを押下します(図\ref{fig:usermng16})。 -\begin{figure}[htbp!] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=60mm]{images/usermng16.eps} \caption{削除するロールの「削除」リンクを押下} @@ -46,7 +46,7 @@ 削除の最終確認を行い、「削除」ボタンを押下します。中止する場合は、「ロール一覧に戻る」ボタンを押下します(図\ref{fig:usermng17})。 -\begin{figure}[htbp!] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=70mm]{images/usermng17.eps} \caption{確認後、「削除」ボタンを押下} @@ -59,7 +59,7 @@ 削除処理が完了し、画面には正常に完了した旨のメッセージが表示されます(図\ref{fig:usermng18})。 -\begin{figure}[htbp!] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=80mm]{images/usermng18.eps} \caption{ロール情報の削除完了} Modified: pal-portal/docs/ja/administration-guide/trunk/src/tex/user-management/delete-user.tex =================================================================== --- pal-portal/docs/ja/administration-guide/trunk/src/tex/user-management/delete-user.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/administration-guide/trunk/src/tex/user-management/delete-user.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -33,7 +33,7 @@ 「ユーザー一覧」で表示されている内容から、削除するユーザーの「削除」リンクを押下します(図\ref{fig:usermng8})。 -\begin{figure}[htbp!] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=80mm]{images/usermng8.eps} \caption{削除するユーザーの「削除」リンクを押下} @@ -46,7 +46,7 @@ 削除の最終確認を行い、「削除」ボタンを押下します。中止する場合は、「ユーザー一覧へ戻る」ボタンを押下します(図\ref{fig:usermng9})。 -\begin{figure}[htbp!] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=80mm]{images/usermng9.eps} \caption{確認後、「削除」ボタンを押下} @@ -59,7 +59,7 @@ 削除処理が完了し、画面には正常に完了した旨のメッセージが表示されます(図\ref{fig:usermng10})。 -\begin{figure}[htbp!] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=80mm]{images/usermng10.eps} \caption{ユーザー情報の削除完了} Modified: pal-portal/docs/ja/administration-guide/trunk/src/tex/user-management/guide.tex =================================================================== --- pal-portal/docs/ja/administration-guide/trunk/src/tex/user-management/guide.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/administration-guide/trunk/src/tex/user-management/guide.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -30,7 +30,7 @@ ユーザー管理には「ユーザー管理」、「ロール管理」、「グループ管理」の3つの機能があります。 それぞれの管理機能を使用する場合は、「ユーザー/ロール/グループ管理」のそれぞれのタブを選択して作業を行います。 -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/usermng0.eps} \caption{タブの選択} Modified: pal-portal/docs/ja/administration-guide/trunk/src/tex/user-management/update-user.tex =================================================================== --- pal-portal/docs/ja/administration-guide/trunk/src/tex/user-management/update-user.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/administration-guide/trunk/src/tex/user-management/update-user.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -33,7 +33,7 @@ 「ユーザー一覧」で表示されている内容から、更新するユーザーの「編集」リンクを押下します(図\ref{fig:usermng5})。 -\begin{figure}[htbp!] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=100mm]{images/usermng5.eps} \caption{更新するユーザーの「編集」リンクを押下} @@ -46,7 +46,7 @@ 内容を編集した後、「更新」を押下します(図\ref{fig:usermng6})。 -\begin{figure}[htbp!] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=80mm]{images/usermng6.eps} \caption{内容編集後、「更新」ボタンを押下} @@ -59,7 +59,7 @@ 編集処理が完了し、画面には正常に完了した旨のメッセージが表示されます(図\ref{fig:usermng7})。 -\begin{figure}[htbp!] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=90mm]{images/usermng7.eps} \caption{ユーサー情報更新完了} Modified: pal-portal/docs/ja/administration-guide/trunk/src/tex/wcm/edit.tex =================================================================== --- pal-portal/docs/ja/administration-guide/trunk/src/tex/wcm/edit.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/administration-guide/trunk/src/tex/wcm/edit.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -32,7 +32,7 @@ 編集したいコンテンツを表示します。 -\begin{figure}[htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=70mm]{images/wcm_edit1.eps} \caption{編集対象のコンテンツ} @@ -45,7 +45,7 @@ その後、「内容を編集する」ボタンをクリックします。 「戻る」ボタンをクリックした場合は、コンテンツ表示モードに戻ります。 -\begin{figure}[htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=70mm]{images/wcm_edit2.eps} \caption{「内容を編集する」ボタンをクリック} @@ -56,7 +56,7 @@ WCM エディターが表示されます。 -\begin{figure}[htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/wcm_edit3.eps} \caption{WCMエディター} @@ -70,7 +70,7 @@ ポートレットのタイトルバー内に表示するタイトル文字列を入力します。 WCM エディターの上部の「タイトル」テキストフィールド入力欄に設定したい文字列を入力します。 -\begin{figure}[htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=90mm]{images/wcm_edit4.eps} \caption{タイトルの入力} @@ -84,7 +84,7 @@ ポートレット上に表示されるコンテンツを入力します。 WCM エディターの中央部のテキスト入力欄にコンテンツを入力します。 -\begin{figure}[htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/wcm_edit5.eps} \caption{コンテンツの入力} @@ -102,7 +102,7 @@ WCM エディターの下部に表示されている「保存」ボタンをクリックしてください。 保存に成功すると、「コンテンツを保存しました」と表示されます。 -\begin{figure}[htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=90mm]{images/wcm_edit6.eps} \caption{コンテンツの保存} @@ -117,7 +117,7 @@ WCM ビューアーの表示に戻り、「戻る」ボタンをクリックします。 既に WCM ビューアーの表示モードに戻っている場合は、ブラウザのリロードボタンをクリックします。 -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/wcm_edit7.eps} \caption{保存されたコンテンツが表示される} Modified: pal-portal/docs/ja/administration-guide/trunk/src/tex/wcm/i18n.tex =================================================================== --- pal-portal/docs/ja/administration-guide/trunk/src/tex/wcm/i18n.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/administration-guide/trunk/src/tex/wcm/i18n.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -32,7 +32,7 @@ 編集したいコンテンツを選択して、WCM エディターを表示します。 -\begin{figure}[htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/wcm_i18n1.eps} \caption{デフォルトの表示} @@ -50,7 +50,7 @@ WCM エディターの右上の設定アイコン (歯車のアイコン) をクリックします。 設定ページが表示されます。 -\begin{figure}[htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=50mm]{images/wcm_i18n2.eps} \caption{設定ページ} @@ -63,7 +63,7 @@ 日本語であれば、「ja」を選びます。 選択後、「追加」ボタンをクリックして、言語を追加します。 -\begin{figure}[htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=50mm]{images/wcm_i18n3.eps} \caption{ja を追加} @@ -74,7 +74,7 @@ 正常に言語が追加されると、「言語を追加しました」というメッセージが表示され、言語リストに追加した言語が表示されます。 -\begin{figure}[htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=50mm]{images/wcm_i18n4.eps} \caption{言語リストに語を追加} @@ -89,7 +89,7 @@ コンテンツ編集ページが表示されます。 「言語」プルダウンボックスから、上記で追加した言語を指定します。 -\begin{figure}[htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/wcm_i18n5.eps} \caption{ja を選択} @@ -101,7 +101,7 @@ 「リロード」ボタンをクリックすると、その言語用のコンテンツが表示されます。 新規に言語を追加している場合は、タイトルとコンテンツ部分は空欄となります。 -\begin{figure}[htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/wcm_i18n6.eps} \caption{日本語用コンテンツ(新規に追加されたので空欄)} @@ -112,7 +112,7 @@ 指定した言語用のタイトルとコンテンツを保存します。 -\begin{figure}[htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/wcm_i18n7.eps} \caption{日本語用コンテンツを保存} @@ -126,7 +126,7 @@ WCM エディターを閉じて、WCM ビューアーを追加した言語を使用言語として設定したブラウザで表示します。 言語が一致した場合は、言語用のコンテンツが表示されます。 -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/wcm_i18n8.eps} \caption{使用言語が日本語のブラウザで表示した例} @@ -140,7 +140,7 @@ WCM エディターを表示して、設定ページを表示します。 「言語」リストから削除したい言語を選択して、「削除」ボタンをクリックします。 -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=50mm]{images/wcm_i18n9.eps} \caption{言語の削除} Modified: pal-portal/docs/ja/administration-guide/trunk/src/tex/wcm/view.tex =================================================================== --- pal-portal/docs/ja/administration-guide/trunk/src/tex/wcm/view.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/administration-guide/trunk/src/tex/wcm/view.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -33,7 +33,7 @@ ポートレット内にコンテンツを表示する WCM ビューアーを配置します。 WCM ビューアーを配置したいページを表示して、「コンテンツを追加」リンクをクリックします(図\ref{fig:wcm_view1})。 -\begin{figure}[htb] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=80mm]{images/wcm_view1.eps} \caption{「コンテンツを追加」リンクをクリック} @@ -47,7 +47,7 @@ \if0 -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=120mm]{images/wcm_view2.eps} \caption{WCM ビューアー} Modified: pal-portal/docs/ja/configuration-guide/trunk/src/tex/ajax/api.tex =================================================================== --- pal-portal/docs/ja/configuration-guide/trunk/src/tex/ajax/api.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/configuration-guide/trunk/src/tex/ajax/api.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -64,7 +64,7 @@ \subsubsection{ページの取得} -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|l|} \hline @@ -78,7 +78,7 @@ \end{center} \end{table} -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|l|} \hline @@ -147,7 +147,7 @@ \subsubsection{絶対位置で移動} -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|p{35em}|} \hline @@ -162,7 +162,7 @@ \end{table} -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|l|} \hline @@ -218,7 +218,7 @@ -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|l|} \hline @@ -234,7 +234,7 @@ -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|l|} \hline @@ -286,7 +286,7 @@ \subsubsection{ポートレットの追加} -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|p{35em}|} \hline @@ -302,7 +302,7 @@ \end{table} -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|p{35em}|} \hline @@ -354,7 +354,7 @@ \subsubsection{ポートレットの削除} -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|l|} \hline @@ -368,7 +368,7 @@ \end{center} \end{table} -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|l|} \hline @@ -415,7 +415,7 @@ \subsubsection{ポートレットの取得} -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|p{35em}|} \hline @@ -431,7 +431,7 @@ \end{table} -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|l|} \hline @@ -466,18 +466,24 @@ getportlets - - + - + - + - + .... - + Modified: pal-portal/docs/ja/configuration-guide/trunk/src/tex/batch/usermanager.tex =================================================================== --- pal-portal/docs/ja/configuration-guide/trunk/src/tex/batch/usermanager.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/configuration-guide/trunk/src/tex/batch/usermanager.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -99,7 +99,7 @@ %URLで渡すパラメータ -\begin{table}[!h] +\begin{table}[!htbp] \caption{ユーザーの認証確認:URLで渡すパラメータ} \begin{center} \begin{tabular}[tb]{|l|l|} @@ -119,7 +119,7 @@ %出力結果のstatus -\begin{table}[!h] +\begin{table}[!htbp] \caption{ユーザーの認証確認:出力結果のstatus} \begin{center} \begin{tabular}[tb]{|l|l|} @@ -146,7 +146,7 @@ %URLで渡すパラメータ -\begin{table}[!h] +\begin{table}[!htbp] \caption{ユーザーの追加:URLで渡すパラメータ} \begin{center} \begin{tabular}[tb]{|l|l|} @@ -167,7 +167,7 @@ %出力結果のstatus -\begin{table}[!h] +\begin{table}[!htbp] \caption{ユーザーの追加:出力結果のstatus} \begin{center} \begin{tabular}[tb]{|l|l|} @@ -196,7 +196,7 @@ %URLで渡すパラメータ -\begin{table}[!h] +\begin{table}[!htbp] \caption{パスワードの更新:URLで渡すパラメータ} \begin{center} \begin{tabular}[tb]{|l|l|} @@ -215,7 +215,7 @@ %出力結果のstatus -\begin{table}[!h] +\begin{table}[!htbp] \caption{パスワードの更新:出力結果のstatus} \begin{center} \begin{tabular}[tb]{|l|l|} @@ -243,7 +243,7 @@ %URLで渡すパラメータ -\begin{table}[!h] +\begin{table}[!htbp] \caption{ユーザーの削除:URLで渡すパラメータ} \begin{center} \begin{tabular}[tb]{|l|l|} @@ -263,7 +263,7 @@ %出力結果のstatus -\begin{table}[!h] +\begin{table}[!htbp] \caption{ユーザーの削除:出力結果のstatus} \begin{center} \begin{tabular}[tb]{|l|l|} @@ -292,7 +292,7 @@ %URLで渡すパラメータ -\begin{table}[!h] +\begin{table}[!htbp] \caption{ユーザー属性の取得:URLで渡すパラメータ} \begin{center} \begin{tabular}[tb]{|l|l|} @@ -313,7 +313,7 @@ %出力結果のstatus -\begin{table}[!h] +\begin{table}[!htbp] \caption{ユーザー属性の取得:出力結果のstatus} \begin{center} \begin{tabular}[tb]{|l|l|} @@ -339,7 +339,7 @@ %出力結果のresult -\begin{table}[!h] +\begin{table}[!htbp] \caption{ユーザー属性の取得:出力結果のresult} \begin{center} \begin{tabular}[tb]{|l|l|} @@ -358,7 +358,7 @@ %URLで渡すパラメータ -\begin{table}[!h] +\begin{table}[!htbp] \caption{ユーザー属性の更新:URLで渡すパラメータ} \begin{center} \begin{tabular}[tb]{|l|l|} @@ -380,7 +380,7 @@ %出力結果のstatus -\begin{table}[!h] +\begin{table}[!htbp] \caption{ユーザー属性の更新:出力結果のstatus} \begin{center} \begin{tabular}[tb]{|l|l|} @@ -409,7 +409,7 @@ %URLで渡すパラメータ -\begin{table}[!h] +\begin{table}[!htbp] \caption{ユーザー属性の削除:URLで渡すパラメータ} \begin{center} \begin{tabular}[tb]{|l|l|} @@ -429,7 +429,7 @@ %出力結果のstatus -\begin{table}[!h] +\begin{table}[!htbp] \caption{ユーザー属性の削除:出力結果のstatus} \begin{center} \begin{tabular}[tb]{|l|l|} Modified: pal-portal/docs/ja/configuration-guide/trunk/src/tex/config/asyncaggregator.tex =================================================================== --- pal-portal/docs/ja/configuration-guide/trunk/src/tex/config/asyncaggregator.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/configuration-guide/trunk/src/tex/config/asyncaggregator.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -45,24 +45,31 @@ \subsubsection{タイムアウトの設定} -pipelines.xmlの設定後、非同期で処理したいポートレットに対して、タイムアウト値を設定する必要があります。全てのポートレットをマルチスレッドで呼び出す場合は以下の変更をwebapps/palportal/WEB-INF/assembly/aggregation.xmlに加えます。 +pipelines.xml の設定後、非同期で処理したいポートレットに対して、タイムアウト値を設定する必要があります。全てのポートレットをマルチスレッドで呼び出す場合は以下の変更を webapps/palportal/WEB-INF/assembly/aggregation.xml に加えます。 + \begin{screen} +\begin{small} +\begin{verbatim} ... - + ... - \if0 Default portlet timeout in milliseconds: + + + 5000 + ... - + ... +\end{verbatim} +\end{small} +\end{screen} -\end{screen} 上記の設定の場合、5000ms のタイムアウト値が設定されます。 各ポートレットで個別に設定する場合には、対象のポートレットアプリケーションの jetspeed-portlet.xml で以下のような設定をします。 + \begin{screen} \begin{small} \begin{verbatim} Modified: pal-portal/docs/ja/configuration-guide/trunk/src/tex/config/spring.tex =================================================================== --- pal-portal/docs/ja/configuration-guide/trunk/src/tex/config/spring.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/configuration-guide/trunk/src/tex/config/spring.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -21,7 +21,7 @@ -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|l|} \hline Modified: pal-portal/docs/ja/configuration-guide/trunk/src/tex/configuration-guide.tex =================================================================== --- pal-portal/docs/ja/configuration-guide/trunk/src/tex/configuration-guide.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/configuration-guide/trunk/src/tex/configuration-guide.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -9,7 +9,7 @@ \setlength{\textwidth}{47zw} -\title{設定ガイド} +\title{PALポータル 設定ガイド} \author{Portal Application Laboratory} \begin{document} Modified: pal-portal/docs/ja/configuration-guide/trunk/src/tex/db/config.tex =================================================================== --- pal-portal/docs/ja/configuration-guide/trunk/src/tex/db/config.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/configuration-guide/trunk/src/tex/db/config.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -22,11 +22,11 @@ \begin{small} \begin{verbatim} + factory="org.apache.commons.dbcp.BasicDataSourceFactory" + type="javax.sql.DataSource" username="" password="" + driverClassName="org.apache.derby.jdbc.EmbeddedDriver" + url="jdbc:derby:/tmp/Portal/database/derby/productiondb;create=true" + maxActive="100" maxIdle="30" maxWait="10000"/> \end{verbatim} \end{small} \end{screen} Modified: pal-portal/docs/ja/configuration-guide/trunk/src/tex/db/table.tex =================================================================== --- pal-portal/docs/ja/configuration-guide/trunk/src/tex/db/table.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/configuration-guide/trunk/src/tex/db/table.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -5,7 +5,7 @@ インストール時に作成されるテーブル一覧は以下の通りです。 インストール時にPSMLの保存先をDBに選択した場合、オプション欄にチェックされているテーブルが使用されます。 -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|l|c|} \hline @@ -102,7 +102,7 @@ \end{center} \end{table} -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|l|c|} \hline @@ -202,7 +202,7 @@ \subsubsection{ユーザ・ロール・グループ情報} -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=140mm]{images/er-security.eps} \caption{ユーザ・ロール・グループ情報} @@ -214,7 +214,7 @@ \subsubsection{アプリケーション情報} -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=140mm]{images/er-application.eps} \caption{アプリケーション情報} @@ -226,7 +226,7 @@ \subsubsection{クライアント情報} -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=140mm]{images/er-client.eps} \caption{クライアント情報} @@ -239,7 +239,7 @@ \subsubsection{ページ情報} -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=150mm]{images/er-folder.eps} \caption{ページ情報} Modified: pal-portal/docs/ja/configuration-guide/trunk/src/tex/design/jpt.tex =================================================================== --- pal-portal/docs/ja/configuration-guide/trunk/src/tex/design/jpt.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/configuration-guide/trunk/src/tex/design/jpt.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -68,7 +68,7 @@ 以下の表は Velocity 用の PALポータルPower Tool の定義です。 -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \small \begin{tabular}[tb]{|l|l|} @@ -98,7 +98,7 @@ -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \small \begin{tabular}[tb]{|l|l|} @@ -130,7 +130,7 @@ -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \small \begin{tabular}[tb]{|l|l|} Modified: pal-portal/docs/ja/configuration-guide/trunk/src/tex/design/layout-decorator.tex =================================================================== --- pal-portal/docs/ja/configuration-guide/trunk/src/tex/design/layout-decorator.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/configuration-guide/trunk/src/tex/design/layout-decorator.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -56,7 +56,7 @@ 実際のところ、このファイルは空でも構いませんが、他の API が使用可能なデコレータを探すために使用されるので、ファイルは存在する必要があります。 ですので、下記の定義にあるプロパティは 全てオプションであると仮定しても問題ありません。 -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \small \begin{tabular}[tb]{|l|l|l|} @@ -179,13 +179,18 @@ - - - - + + + + - +
... @@ -244,7 +249,7 @@ \subsection{レイアウトデコレータの追加} -新規にレイアウトデコレータを追加したい場合は、上記のファイル群を作成し、webapps/palportal/decorations/layout/$<$mydesign$>$以下に配置することで $<$mydesign$>$ が有効になります。デコレータの追加には、ポータルの再起動は必要ありません。 +新規にレイアウトデコレータを追加したい場合は、上記のファイル群を作成し、webapps/palportal/decorations/ layout/$<$mydesign$>$以下に配置することで $<$mydesign$>$ が有効になります。デコレータの追加には、ポータルの再起動は必要ありません。 追加したレイアウトデコレータはサイトエディターから選択することができます。 Modified: pal-portal/docs/ja/configuration-guide/trunk/src/tex/design/layout.tex =================================================================== --- pal-portal/docs/ja/configuration-guide/trunk/src/tex/design/layout.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/configuration-guide/trunk/src/tex/design/layout.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -76,7 +76,7 @@ ページのレイアウトを変更する際には、利用したいレイアウトコンポーネントを選択します。 PSML ページごとに 1 つのルートレイアウトを指定することが可能です。 -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \footnotesize \begin{tabular}[tb]{|l|l|l|l|l|} @@ -203,9 +203,9 @@ レイアウトテンプレートファイルは、レイアウトポートレットの設定情報に基づいて呼び出されます。 -レイアウトテンプレートファイルの指定方法は、webapps/palportal/WEB-INF/templates/layoutをルートディレクトリとして、\<メディアタイプ\>/\<ViewPage\>/layout.vm のテンプレートになります。 +レイアウトテンプレートファイルの指定方法は、webapps/palportal/WEB-INF/templates/layoutをルートディレクトリとして、$<$メディアタイプ$>$/$<$ViewPage$>$/layout.vm のテンプレートになります。 メディアタイプはポータルがクライアントの情報を元に決定され、ViewPage はレイアウトポートレットの portlet.xml で指定した情報を利用します。 -ポートレットの表示モードにより、layout-\<表示モード\>.vm のテンプレートを利用できます。 +ポートレットの表示モードにより、layout-$<$表示モード$>$.vm のテンプレートを利用できます。 列を記述している HTML を編集したい場合は、対象の layout.vm を編集することで変更することができます。 Modified: pal-portal/docs/ja/configuration-guide/trunk/src/tex/design/portlet-decorator.tex =================================================================== --- pal-portal/docs/ja/configuration-guide/trunk/src/tex/design/portlet-decorator.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/configuration-guide/trunk/src/tex/design/portlet-decorator.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -66,7 +66,7 @@ \subsection{ポートレットデコレータの追加} -新規にポートレットデコレータを追加したい場合は、上記のファイル群を作成し、webapps/palportal/decorations/portlet/$<$mydesign$>$以下に配置することで $<$mydesign$>$ が有効になります。デコレータの追加には、ポータルの再起動は必要ありません。 +新規にポートレットデコレータを追加したい場合は、上記のファイル群を作成し、webapps/palportal/ decorations/portlet/$<$mydesign$>$以下に配置することで $<$mydesign$>$ が有効になります。デコレータの追加には、ポータルの再起動は必要ありません。 追加したポートレットデコレータはサイトエディターから選択することができます。 Modified: pal-portal/docs/ja/configuration-guide/trunk/src/tex/install/guide.tex =================================================================== --- pal-portal/docs/ja/configuration-guide/trunk/src/tex/install/guide.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/configuration-guide/trunk/src/tex/install/guide.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -43,14 +43,14 @@ \subsubsection{サポートするOS} - PALポータルは 100% Pure Java(TM) のポータルサーバーです。 - ですので、Linux、Windows、Unix、Mac OS X など Java Virtual Machine(JVM(TM)) が動作するオペレーティングシステムで動作可能です。 +PALポータルは 100\% Pure Java(TM) のポータルサーバーです。 +ですので、Linux、Windows、Unix、Mac OS X など Java Virtual Machine(JVM(TM)) が動作するオペレーティングシステムで動作可能です。 \subsubsection{アプリケーションサーバ} - PALポータルは Java のウェブアプリケーションが動作可能なアプリケーションサーバー上で稼働します。 - 様々なアプリケーションさーバーで動作可能ですが、以下のアプリケーションサーバーで動作確認をしています。 +PALポータルは Java のウェブアプリケーションが動作可能なアプリケーションサーバー上で稼働します。 +様々なアプリケーションさーバーで動作可能ですが、以下のアプリケーションサーバーで動作確認をしています。 \begin{itemize} \item Tomcat 5.5 @@ -63,8 +63,8 @@ \subsubsection{データベース} - PALポータルはポータル内のデータを保存するためのデータベースを必要とします。 - 様々なデータベースをサポートしていますが、以下のデータベースで動作確認をしています。 +PALポータルはポータル内のデータを保存するためのデータベースを必要とします。 +様々なデータベースをサポートしていますが、以下のデータベースで動作確認をしています。 \begin{itemize} \item Derby @@ -74,22 +74,22 @@ \item HSQL \end{itemize} - データベースの接続に関しては、Apache DB Project の OJB (http://db.apache.org/ojb/) を利用しています。 +データベースの接続に関しては、Apache DB Project の OJB (http://db.apache.org/ojb/) を利用しています。 \subsection{インストール方法} - PALポータルでは、新規インストールおよびアップグレードインストールを提供しています。 - また、新規インストールでは、Tomcat 5.5 のインストールを省略するなどのオプションを提供しています。 - 詳しいインストール方法に関しては、「インストールガイド」を参照してください。 +PALポータルでは、新規インストールおよびアップグレードインストールを提供しています。 +また、新規インストールでは、Tomcat 5.5 のインストールを省略するなどのオプションを提供しています。 +詳しいインストール方法に関しては、「インストールガイド」を参照してください。 \subsection{インストール内容} - PALポータルは、Apache Portals の Jetspeed 2 (http://portals.apache.org/jetspeed-2/) ベースのポータルサーバーです。 - ですので、標準の新規インストールでは、Tomcat 5.5 と共に PALポータルとしてカスタマイズされた Jetspeed 2 がインストールされます。 - また、PALポータルでは、管理ツールとして pal-admin ポートレットと pal-wcm ポートレットが PAL ポータルの初回起動時に配備されます。 +PALポータルは、Apache Portals の Jetspeed 2 (http://portals.apache.org/jetspeed-2/) ベースのポータルサーバーです。 +ですので、標準の新規インストールでは、Tomcat 5.5 と共に PALポータルとしてカスタマイズされた Jetspeed 2 がインストールされます。 +また、PALポータルでは、管理ツールとして pal-admin ポートレットと pal-wcm ポートレットが PAL ポータルの初回起動時に配備されます。 JSR 168 準拠のポートレットを追加で配備したい場合は、PALポータルのインストール後に「ポートレット管理」画面から配備するか、webapps/palportal/WEB-INF/deploy にポートレットの war ファイルを配置してください。 Modified: pal-portal/docs/ja/configuration-guide/trunk/src/tex/portal/architecture.tex =================================================================== --- pal-portal/docs/ja/configuration-guide/trunk/src/tex/portal/architecture.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/configuration-guide/trunk/src/tex/portal/architecture.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -25,42 +25,40 @@ \subsection{アーキテクチャについて} - ポータルサーバーは一つのウェブアプリケーションです。 - そのため、ポータルサーバーを動作させるためにはアプリケーションサーバーが必要になります。 +ポータルサーバーは一つのウェブアプリケーションです。 +そのため、ポータルサーバーを動作させるためにはアプリケーションサーバーが必要になります。 -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=140mm]{images/portal-layer.eps} -\caption{TBD} +\caption{ポータルサーバーの構成} \label{fig:portal-layer} \end{center} \end{figure} - ポートレットも同様に一つのウェブアプリケーションです。 +ポートレットも同様に一つのウェブアプリケーションです。 ポートレットの配備はポータルサーバーに対して配備を実行しますが、最終的にはアプリケーションサーバー上に配備されることになります。 - クライアントからのアクセスは、通常のウェブアプリケーションと同様にポータルサーバーにアクセスされた後に、ポータルサーバーからポートレットへのクロスコンテキストのアクセスにより、ポートレットのコンテンツを取得し、その結果を集約して、クライアントへ出力します。 +クライアントからのアクセスは、通常のウェブアプリケーションと同様にポータルサーバーにアクセスされた後に、ポータルサーバーからポートレットへのクロスコンテキストのアクセスにより、ポートレットのコンテンツを取得し、その結果を集約して、クライアントへ出力します。 \subsection{ポータル内の処理} - PALポータルは、コンポーネントのパイプライン処理に基づいて、ユーザーからのリクエストを処理します。 +PALポータルは、コンポーネントのパイプライン処理に基づいて、ユーザーからのリクエストを処理します。 -\newpage - -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=140mm]{images/j2-overview.eps} -\caption{TBD} +\caption{パイプライン処理} \label{fig:j2-overview} \end{center} \end{figure} - クライアントからのアクセスがあると、ポータルサーバー内ではそのリクエストを RequestContext というインスタンスとして扱います。 - その RequestContext を Spring で設定したコンポーネントバルブに順に渡して処理していきます。 - その中でポートレットコンテナを呼び出し、ポートレットを処理します。 - 処理の終了後、その結果を集約して、クライアントへ出力します。 +クライアントからのアクセスがあると、ポータルサーバー内ではそのリクエストを RequestContext というインスタンスとして扱います。 +その RequestContext を Spring で設定したコンポーネントバルブに順に渡して処理していきます。 +その中でポートレットコンテナを呼び出し、ポートレットを処理します。 +処理の終了後、その結果を集約して、クライアントへ出力します。 \subsection{構成コンポーネント} @@ -76,253 +74,154 @@ これは、公開されているインターフェースを通して抽象化のレベルを構築するためであり、そしてコンポーネントの実装における依存性をなくすためです。 この構造はコンポーネントがそれ自身とリンクしたり、お互いにリンクする構造でなく、コンポーネントと結合します。 依存性注入はオブジェクトの作成やオブジェクトのリンクの機能をオブジェクト自身から削除し、ファクトリへ移したパターンです。 -それゆえ、依存性注入は明らかにオブジェクトの作成とリンクの制御を反転させており、Inversion of Controls(制御の反転, IOC) の形であると考えることができます。 +それゆえ、依存性注入は明らかにオブジェクトの作成とリンクの制御を反転させており、Inversion of Controls (制御の反転, IOC) の形であると考えることができます。 \subsubsection{コンポーネントフレームワーク} -PALポータルはデフォルトのコンポーネントフレームワークとしてSpring フレームワークを利用しています。 -しかし、PALポータルはコンポーネントフレームワークを、たとえばPicoのような代替可能なコンポーネントフレームワークに容易に置き換えることが可能な構造をしています。 +PALポータルはデフォルトのコンポーネントフレームワークとして Spring フレームワークを利用しています。 +しかし、PALポータルはコンポーネントフレームワークを、たとえば Pico のような代替可能なコンポーネントフレームワークに容易に置き換えることが可能な構造をしています。 -PALポータルのコンポーネントフレームワークの組み立てはJetspeedServlet内に実装されています。 +PALポータルのコンポーネントフレームワークの組み立ては JetspeedServlet 内に実装されています。 -\newpage - -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=140mm]{images/jetspeedservlet-c.eps} -\caption{TBD} +\caption{JetspeedServlet} \label{fig:jetspeedservlet-c} \end{center} \end{figure} -JetspeedServletは起動時のロードのためにポータルアプリケーションのweb.xmlで設定されます。 -initializeComponentManagerメソッドは与えられたコンポーネントフレームワークのコンポーネント群をロードします。 -initializeComponentManagerのデフォルトの実装はコンポーネントフレームワークとしてSpring フレームワークをサポートします。 -そして Spring エンジンを初期化するためにwebapps/palportal/WEB-INF/assembly以下の xml ファイルを解釈します。 +JetspeedServlet は起動時のロードのためにポータルアプリケーションのweb.xmlで設定されます。 +initializeComponentManager メソッドは与えられたコンポーネントフレームワークのコンポーネント群をロードします。 +initializeComponentManager のデフォルトの実装はコンポーネントフレームワークとして Spring フレームワークをサポートします。 +そして Spring エンジンを初期化するために webapps/palportal/WEB-INF/assembly 以下の xml ファイルを解釈します。 JetspeedEngineは適切なコンポーネントマネージャを使って構成されます。 -\begin{screen} +\begin{screen} \begin{verbatim} engine = new JetspeedEngine(properties, applicationRoot, config, initializeComponentManager(config, applicationRoot, properties)); \end{verbatim} - - \end{screen} -他のコンポーネントフレームワークをサポートするためには、開発者はinitializeComponentManagerの実装をオーバーライドしてください。 +他のコンポーネントフレームワークをサポートするためには、開発者は InitializeComponentManager の実装をオーバーライドしてください。 - \subsubsection{コアコンポーネント} -クライアント識別 - アーチファクト ID: jetspeed-capability +\begin{table}[!htbp] +\begin{center} +\caption{アーチファクト ID: jetspeed-capability} +\begin{tabular}[tb]{|l|p{30em}|} +\hline +コンポーネント名 & 説明\\ +\hline\hline +Capabilities & Capabilitiesコンポーネントはクライアントを、サポートされる MIME タイプやメディアタイプにマップします。このコンポーネントは CapabilityMap を生成します。CapabilityMapはポータルエンジンを通して、対象となるクライアント用にポータルコンテンツを表示するために利用されます。\\ +\hline +\end{tabular} +\end{center} +\end{table} -コンポーネント名 -説明 +\begin{table}[!htbp] +\begin{center} +\caption{アーチファクト ID: jetspeed-cm} +\begin{tabular}[tb]{|l|p{30em}|} +\hline +コンポーネント名 & 説明\\ +\hline\hline +ComponentManager & ComponentManager は、使用するコンポーネントフレームワークのトップに位置する抽象的な標準レイヤーを提供します。PALポータルのデフォルトの ComponentManager の実装は SpringComponentManager です。\\ +\hline +\end{tabular} +\end{center} +\end{table} -Capabilities -Capabilitiesコンポーネントはクライアントを、サポートされる MIME タイプ -やメディアタイプにマップします。このコンポーネントはCapabilityMapを生成 -します。CapabilityMapはポータルエンジンを通して、対象となるクライアント -用にポータルコンテンツを表示するために利用されます。 +\begin{table}[!htbp] +\begin{center} +\caption{アーチファクト ID: jetspeed-deploy-tools} +\begin{tabular}[tb]{|l|p{30em}|} +\hline +コンポーネント名 & 説明\\ +\hline\hline +JetspeedDeploy & JetspeedDeploy は PALポータルに配備される前にポートレットアプリケーションの準備をします。\\ +\hline +DeploymentManager & DeploymentManager は配備される新しいポータル資産 (ポートレットやデコレータ) を待機します。\\ +\hline +\end{tabular} +\end{center} +\end{table} +\begin{table}[!htbp] +\begin{center} +\caption{アーチファクト ID: jetspeed-portal} +\begin{tabular}[tb]{|l|p{30em}|} +\hline +コンポーネント名 & 説明\\ +\hline\hline +Pipeline & Pipeline は PALポータルのリクエストで最小単位の動作である Valve を統合します。\\ +\hline +\end{tabular} +\end{center} +\end{table} +\begin{table}[!htbp] +\begin{center} +\caption{アーチファクト ID: jetspeed-prefs} +\begin{tabular}[tb]{|l|p{30em}|} +\hline +コンポーネント名 & 説明\\ +\hline\hline +PreferencesProvider & PreferencesProvider は PALポータルの java.util.PreferencesAPI の実装です。\\ +\hline +\end{tabular} +\end{center} +\end{table} -コンポーネットマネージャ - アーチファクト ID: jetspeed-cm +\begin{table}[!htbp] +\begin{center} +\caption{アーチファクト ID: jetspeed-rdbms} +\begin{tabular}[tb]{|p{10em}|p{30em}|} +\hline +コンポーネント名 & 説明\\ +\hline\hline +ConnectionRepository-Entry & ConnectionRepositoryEntry は PALポータルの java.util.Preferences API の実装です。\\ +\hline +InitablePersistence-BrokerDaoSupport & InitablePersistenceBrokerDaoSupport は PALポータルにおいてデータアクセスと永続性のサポートを提供します。\\ +\hline +\end{tabular} +\end{center} +\end{table} +\begin{table}[!htbp] +\begin{center} +\caption{アーチファクト ID: jetspeed-security} +\begin{tabular}[tb]{|p{10em}|p{30em}|} +\hline +コンポーネント名 & 説明\\ +\hline\hline +DefaultLoginModule, RdbmsPolicy, UserManager, RoleManager, GroupManager, PermissionManager, UserSecurityHandler, CredentialHandler, GroupSecurityHandler, RoleSecurityHandler, SecurityMappingHandler & PALポータルにおけるJAAS サービスのデフォルトの実装。PALポータルはポータルエンジンにセキュリティの機能を公開するための標準のセキュリティフレームワークとして JAAS を利用します。JAAS サービスは PALポータルのセキュリティ SPI を通して特定の実装が提供されるために PALポータルの粗い単位のサービスを利用します。\\ +\hline +\end{tabular} +\end{center} +\end{table} -コンポーネント名 -説明 +\begin{table}[!htbp] +\begin{center} +\caption{アーチファクト ID: jetspeed-statistics} +\begin{tabular}[tb]{|p{10em}|p{30em}|} +\hline +コンポーネント名 & 説明\\ +\hline\hline +PortalStatistics & PortalStatistics はデータのコレクションとデータの検索のための PALポータルのデータコレクション API です。\\ +\hline +BatchedStatistics & BatchedStatistics は与えられた期間の統計データのバッチコレクションに対する処理を行います。\\ +\hline +AggregateStatistics, StatisticsQueryCriteria & AggregateStatistics は、StatisticsQueryCriteria が提供する特定のイベントと検索基準に対する集約ポータルデータを提供するために、PortalStatistics コンポーネントとやりとりを行います。\\ +\hline +\end{tabular} +\end{center} +\end{table} - -ComponentManager - -ComponentManagerは、使用するコンポーネントフレームワークのトップに位置する抽象的な標準レイヤーを提供します。PALポータルのデフォルトのComponentManagerの実装はSpringComponentManagerです。 - - - - - - -配備ツール - アーチファクト ID: jetspeed-deploy-tools - - -コンポーネント名 -説明 - - - -JetspeedDeploy - -JetspeedDeployは PALポータルに配備される前にポートレットアプリケーションの準備をします。 - - - -DeploymentManager - -DeploymentManagerは配備される新しいポータル資産 (ポートレットやデコレータ) を待機します。 - - - - - -ポータル - アーチファクト ID: jetspeed-portal - - -コンポーネント名 -説明 - - - -Pipeline - -Pipelineは PALポータルのリクエストで最小単位の動作であるValveを統合します。 - - - - - -プリファレンス - アーチファクト ID: jetspeed-prefs - - -コンポーネント名 -説明 - - - -PreferencesProvider - -PreferencesProviderは PALポータルのjava.util.PreferencesAPI の実装です。 - - - - - -RDBMS - アーチファクト ID: jetspeed-rdbms - - -コンポーネント名 -説明 - - - -ConnectionRepositoryEntry - -ConnectionRepositoryEntryは PALポータルのjava.util.PreferencesAPI の実装です。 - - - -InitablePersistenceBrokerDaoSupport - -InitablePersistenceBrokerDaoSupportは PALポータルにおいてデータアクセスと永続性のサポートを提供します。 - - - - - -セキュリティ - アーチファクト ID: jetspeed-security - - -コンポーネント名 -説明 - - - -DefaultLoginModule - -RdbmsPolicy - - -PALポータルにおけるJAAS サービスのデフォルトの実装。PALポータルはポータルエンジンにセキュリティの機能を公開するための標準のセキュリティフレームワークとして JAAS を利用します。JAAS サービスは PALポータルのセキュリティ SPI を通して特定の実装が提供されるために PALポータルの粗い単位のサービスを利用します。 - - - - -UserManager - -RoleManager - -GroupManager - -PermissionManager - -PALポータルのセキュリティ管理 API を公開する粗い単位のセキュリティコンポーネント - - - -UserSecurityHandler - -CredentialHandler - -GroupSecurityHandler - -RoleSecurityHandler - -SecurityMappingHandler - -特定の実装を PALポータルのセキュリティエンジンに公開する細かい単位のセキュリティ SPI コンポーネント。この仕組みは高レベルのセキュリティサービスに影響することなく、複数のセキュリティ実装をサポートするために柔軟なフレームワークを提供します。 - - - -\if0 - - -検索 - アーチファクト ID: jetspeed-search - - -コンポーネント名 -説明 - - - -SearchEngine - -SearchEngineはApache Luceneサーチエンジンとの統合を行います。 - - - -HandlerFactory - -HandlerFactoryはSearchEngineに対してドキュメントハンドラを公開します。 - - - -\fi - - -統計 - アーチファクト ID: jetspeed-statistics - - -コンポーネント名 -説明 - - - -PortalStatistics - -PortalStatisticsはデータのコレクションとデータの検索のための PALポータルのデータコレクション API です。 - - - -BatchedStatistics - -BatchedStatisticsは与えられた期間の統計データのバッチコレクションに対する処理を行います。 - - - -AggregateStatistics - -StatisticsQueryCriteria - -AggregateStatisticsは、StatisticsQueryCriteriaが提供する特定のイベントと検索基準に対する集約ポータルデータを提供するために、PortalStatisticsコンポーネントとやりとりを行います。 - - - - - - Modified: pal-portal/docs/ja/configuration-guide/trunk/src/tex/portlet/portlet.tex =================================================================== --- pal-portal/docs/ja/configuration-guide/trunk/src/tex/portlet/portlet.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/configuration-guide/trunk/src/tex/portlet/portlet.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -39,7 +39,8 @@ \begin{verbatim} public class Simplest extends javax.portlet.GenericPortlet { - public void doView(javax.portlet.RenderRequest request, javax.portlet.RenderResponse response) + public void doView(javax.portlet.RenderRequest request, + javax.portlet.RenderResponse response) throws javax.portlet.PortletException, java.io.IOException { response.setContentType("text/html"); @@ -56,7 +57,8 @@ \begin{screen} \begin{verbatim} -$ javac -cp ~/.maven/repository/org.apache.portals.jetspeed-2/jars/portlet-api-1.0.jar Simplest.java +$ javac -cp ~/.maven/repository/org.apache.portals.jetspeed-2/jars/ + portlet-api-1.0.jar Simplest.java \end{verbatim} @@ -93,8 +95,7 @@ \end{screen} -\subsubsection{web.xml}?- +\subsubsection{web.xml} simplest/WEB-INF ディレクトリに web.xml ファイルを作成してください。 \begin{screen} Modified: pal-portal/docs/ja/configuration-guide/trunk/src/tex/profiler/profilingrule.tex =================================================================== --- pal-portal/docs/ja/configuration-guide/trunk/src/tex/profiler/profilingrule.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/configuration-guide/trunk/src/tex/profiler/profilingrule.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -50,7 +50,7 @@ \subsubsection{ルール規準のリゾルバ} -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|p{36em}|} \hline Modified: pal-portal/docs/ja/configuration-guide/trunk/src/tex/psml/guide.tex =================================================================== --- pal-portal/docs/ja/configuration-guide/trunk/src/tex/psml/guide.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/configuration-guide/trunk/src/tex/psml/guide.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -193,7 +193,7 @@ 2 つの有効な属性がページエレメントの属性として存在します。 -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|p{36em}|} \hline @@ -212,7 +212,7 @@ $<$page$>$ 要素は多くの他の PSML 要素を含みます。 -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|p{40em}|} \hline @@ -238,7 +238,7 @@ -例: 「概要」で示した例を参照してください。 +例については「概要」で示した例を参照してください。 \subsection{デフォルト} @@ -247,7 +247,7 @@ デフォルトのポートレットデコレータは、デコレータ属性を持たない全てのポートレットフラグメントに対して適用されます。 defaults 要素には 3 つの有効な属性があります。 -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|p{40em}|} \hline @@ -265,7 +265,7 @@ -例: +例を以下に示します。 \begin{screen} \begin{verbatim} @@ -289,7 +289,7 @@ これは、複数列のレイアウトの列の割合をコントロールするのに使われます。 この要素には 3 つの必須の属性があります。 -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|p{40em}|} \hline @@ -308,7 +308,7 @@ レイアウト $<$fragment$>$ 要素はたくさんの他の PSML 要素を含みます。 -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|p{35em}|} \hline @@ -326,7 +326,7 @@ -例: +例を以下に示します。 \begin{screen} \begin{verbatim} @@ -361,7 +361,7 @@ ですので、レイアウトで定められている 'row' と 'column' のレイアウトプロパティをサポートします。 この要素に対しては多数の有効な属性が存在します。 -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|p{40em}|} \hline @@ -384,9 +384,9 @@ \end{table} -ポートレットの \<fragment\> 要素は他の PSML 要素を含みます。 +ポートレットの $<$fragment$>$ 要素は他の PSML 要素を含みます。 -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|p{40em}|} \hline @@ -405,7 +405,7 @@ \end{table} -例: +例を以下に示します。 \begin{screen} \begin{verbatim} @@ -426,7 +426,7 @@ これらのプロパティは一般にレイアウトポートレットのパラメータとページ内のポートレットの位置を指定するために使われます。 プロパティ要素は 3 つの属性をサポートします。 -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|p{40em}|} \hline @@ -445,7 +445,7 @@ \end{table} -例: +例を以下に示します。 \begin{screen} \begin{verbatim} @@ -483,7 +483,7 @@ $<$preference$>$ 要素の属性は以下のようなものです。 -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|l|} \hline @@ -498,9 +498,9 @@ \end{table} -\<preference\> 要素は以下の要素を含みます。 +$<$preference$>$ 要素は以下の要素を含みます。 -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|l|} \hline @@ -513,7 +513,7 @@ \end{table} -例: +例を以下に示します。 \begin{screen} \begin{verbatim} @@ -533,7 +533,7 @@ $<$folder$>$ 要素は、ポータルサイトのフォルダと関連する他の PSML 要素を保持する単純な入れ物です。この要素は、関連するファイルシステムディレクトリ内の folder.metadata ファイルとして存在します。フォルダの要素には 2 つの有効な属性が存在します。 -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|p{40em}|} \hline @@ -551,7 +551,7 @@ $<$folder$>$ 要素は多くの他の PSML 要素を含みます。 -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|p{38em}|} \hline @@ -576,15 +576,14 @@ \end{table} +例については「概要」の例を参照してください。 -例: 「概要」の例を参照してください。 - \subsection{リンク} $<$link$>$ 要素は、ポータルサイトの外部のコンテンツを参照するのに使われるポータルリンクに関連づけられている、他の PSML 要素を保持するシンプルな入れ物です。この要素は、親フォルダと関連づけられている、適切なファイルシステムのディレクトリ内に存在する「.link」という拡張子のファイルとして存在します。この要素には 2 つの有効な属性があります。 -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|p{40em}|} \hline @@ -602,7 +601,7 @@ $<$link$>$ 要素は多数の他の PSML 要素を含みます。 -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|p{38em}|} \hline @@ -624,13 +623,13 @@ -例: 「概要」の例を参照してください。 +例については「概要」の例を参照してください。 \subsection{ グローバルなページのセキュリティ} $<$page-security$>$ 要素はグローバルなセキュリティ制限と、その定義を宣言するために使われる、他の PSML 要素を保持するためのシンプルな入れ物です。この要素は page.security ファイルとして存在し、常に PSML ファイルのシステムディレクトリのルートディレクトリに存在します。page-security 要素の有効な属性は 1 つだけ存在します。 -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|l|} \hline @@ -646,7 +645,7 @@ $<$page-security$>$ 要素は PSML 要素に関連する 2 つのセキュリティ制限を含みます。 -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|p{36em}|} \hline @@ -662,12 +661,12 @@ -例: 「概要」の例を参照してください。 +例については「概要」の例を参照してください。 \subsection{ PSML タイトルとメタデータ} ページ, フォルダ, リンクの $<$metadata$>$ 要素はロケール特有のタイトルと短いタイトルのテキストを定義するのに使われます。これらの要素は何度でも、含まれる PSML 要素内で表れるかもしれません。しかし、複数の値が 1 つのロケールにたいして指定してはいけません。PSML XML 文書は、普通は広範囲のキャラクタセットをサポートするために、UTF-8 エンコーディングで宣言されます。 -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|p{40em}|} \hline @@ -682,7 +681,7 @@ \end{table} -例: +例を以下に示します。 \begin{screen} \begin{verbatim} Modified: pal-portal/docs/ja/configuration-guide/trunk/src/tex/psml/menu.tex =================================================================== --- pal-portal/docs/ja/configuration-guide/trunk/src/tex/psml/menu.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/configuration-guide/trunk/src/tex/psml/menu.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -53,7 +53,7 @@ $<$menu$>$ 要素は、レイアウトデコレータもしくは他のメニュー内の階層化されたメニューによって使われるメニューを定義します。menu 要素には、たくさんの有効な属性が存在します。 -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|p{40em}|} \hline @@ -83,7 +83,7 @@ $<$menu$>$ 要素は、多数の他のメニュー定義の PSML 要素を含みます。タイトルとメタデータ要素を除いて、これらの要素の相対的な順序は、レイアウトデコレータがそれらを提示する順序を決定します。 -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|p{38em}|} \hline @@ -111,7 +111,7 @@ -例: +例を以下に示します。 \begin{screen} \begin{verbatim} @@ -207,9 +207,9 @@ \subsection{メニューの選択肢の定義} -\<options\> 要素は、メニュー内に単一または複数の選択肢を定義します。この単純な要素の文字列は、ページ、もしくはフォルダ、もしくはリンクのメニューの選択肢を作るドキュメントのパスを指定します。複数の選択肢のパスを、パスおよび (もしくは) 正規表現パターンをカンマで区切ったリストとして指定することも可能です。相対パスは、現在のページからの相対パスとして解釈されます。「~」や「@」といった特別なパターンを、現在のページを参照するために使うことができます。この要素は、メニュー要素とたくさんの属性を共有します。 +$<$options$>$ 要素は、メニュー内に単一または複数の選択肢を定義します。この単純な要素の文字列は、ページ、もしくはフォルダ、もしくはリンクのメニューの選択肢を作るドキュメントのパスを指定します。複数の選択肢のパスを、パスおよび (もしくは) 正規表現パターンをカンマで区切ったリストとして指定することも可能です。相対パスは、現在のページからの相対パスとして解釈されます。「~」や「@」といった特別なパターンを、現在のページを参照するために使うことができます。この要素は、メニュー要素とたくさんの属性を共有します。 -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|p{40em}|} \hline @@ -232,7 +232,7 @@ \end{table} -例: +例を以下に示します。 \begin{screen} \begin{verbatim} @@ -253,7 +253,7 @@ $<$separator$>$ 要素は、メニューに含めるセパレータを定義します。セパレータは、選択肢もしくは階層化したメニューが、メニューの定義内のこの要素以下に現れた場合のみ含まれます。セパレータのテキストは、この要素内のテキスト、もしくはテキストメニュー定義の要素内で指定することが可能です。セパレータ要素に記述可能な属性は 1 つしかありません。 -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|p{40em}|} \hline @@ -268,7 +268,7 @@ $<$separator$>$ 要素は、たくさんの他のメニュー定義の PSML 要素を含みます。 -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|p{40em}|} \hline @@ -286,7 +286,7 @@ -例: +例を以下に示します。 \begin{screen} \begin{verbatim} @@ -308,9 +308,9 @@ \subsection{メニューをインクルードするための定義} -\<include\> 要素は、選択肢または、他のメニューの階層化した メニューを含みます。含めるメニューの名前は、このエレメントのテキスト値として指定します。この要素に含めることのできる有効な属性は 1 つしかありません。 +$<$include$>$ 要素は、選択肢または、他のメニューの階層化した メニューを含みます。含めるメニューの名前は、このエレメントのテキスト値として指定します。この要素に含めることのできる有効な属性は 1 つしかありません。 -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|p{40em}|} \hline @@ -323,7 +323,7 @@ \end{table} -例: +例を以下に示します。 \begin{screen} \begin{verbatim} @@ -341,7 +341,7 @@ $<$exclude$>$ 要素は、選択肢もしくは、他のメニューの階層化した メニューを除外します。このオプションは主に、このメニューから、ポータルページ内の、他のメニューに既に表示されているメニューの選択肢を消去するために使われます。一致する選択肢またはメニューがメニュー定義内のこの要素より上に表示されている場合は、除外されます。除外するメニューの名前は、この単純な要素のテキスト値として指定します。 -例: +例を以下に示します。 \begin{screen} \begin{verbatim} @@ -390,12 +390,15 @@ #if($_orientation == $LEFT_TO_RIGHT) #if($element.isSelected($site))   - ${tabName} + ${tabName}   #else #set($tabUrl = $jetspeed.getAbsoluteUrl($element.url))   - ${tabName} + + ${tabName}   #end #end Modified: pal-portal/docs/ja/configuration-guide/trunk/src/tex/psml/security.tex =================================================================== --- pal-portal/docs/ja/configuration-guide/trunk/src/tex/psml/security.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/configuration-guide/trunk/src/tex/psml/security.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -248,7 +248,7 @@ セキュリティ制約の宣言には、PALポータルのデフォルトの配備で作成されるものがあります。 -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|l|l|l|l|} \hline Modified: pal-portal/docs/ja/configuration-guide/trunk/src/tex/security/config.tex =================================================================== --- pal-portal/docs/ja/configuration-guide/trunk/src/tex/security/config.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/configuration-guide/trunk/src/tex/security/config.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -106,7 +106,7 @@ この設定ファイルは、認証 SPI の設定を提供します。 -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|l|} \hline @@ -135,7 +135,7 @@ この設定ファイルは、承認 SPI の設定を提供します。 -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|l|} \hline Modified: pal-portal/docs/ja/configuration-guide/trunk/src/tex/security/credential.tex =================================================================== --- pal-portal/docs/ja/configuration-guide/trunk/src/tex/security/credential.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/configuration-guide/trunk/src/tex/security/credential.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -101,10 +101,10 @@ \newpage -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=140mm]{images/credential-handler-c.eps} -\caption{TBD} +\caption{DefaultCredentialHandler} \label{fig:credential-handler-c} \end{center} \end{figure} @@ -114,10 +114,10 @@ InternalCredential はSECURITY\_CREDENTIAL テーブルにマップされています。 以下が対象部分のデータベーススキーマになります。 -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=140mm]{images/principals-credentials-schema.eps} -\caption{TBD} +\caption{データベーススキーマ} \label{fig:principals-credentials-schema} \end{center} \end{figure} Modified: pal-portal/docs/ja/configuration-guide/trunk/src/tex/security/guide.tex =================================================================== --- pal-portal/docs/ja/configuration-guide/trunk/src/tex/security/guide.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/configuration-guide/trunk/src/tex/security/guide.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -20,10 +20,10 @@ 以下にセキュリティアーキテクチャの概要図を示します。 -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=140mm]{images/security-arch-overview.eps} -\caption{TBD} +\caption{セキュリティアーキテクチャ} \label{fig:security-arch-overview} \end{center} \end{figure} @@ -46,10 +46,10 @@ そのクラスダイアグラムは、以下の図のように、認証サービスへのアクセスを実装しています。 -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=140mm]{images/atn-arch-c.eps} -\caption{TBD} +\caption{認証サービスのクラス} \label{fig:atn-arch-c} \end{center} \end{figure} @@ -58,7 +58,7 @@ 上記のコンポーネントについては、以下のとおりです。 -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|l|} \hline @@ -97,10 +97,10 @@ PALポータルは、主体とパーミッション間の関係を管理するデータベースを利用するための java.security.Policy を実装しています。 -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=140mm]{images/rdbms-policy-overview-c.eps} -\caption{TBD} +\caption{クラス図} \label{fig:rdbms-policy-overview-c} \end{center} \end{figure} Modified: pal-portal/docs/ja/configuration-guide/trunk/src/tex/security/login.tex =================================================================== --- pal-portal/docs/ja/configuration-guide/trunk/src/tex/security/login.tex 2009-03-11 05:09:47 UTC (rev 1792) +++ pal-portal/docs/ja/configuration-guide/trunk/src/tex/security/login.tex 2009-03-15 08:37:52 UTC (rev 1793) @@ -33,10 +33,10 @@ PALポータルのログイン処理の流れについては以下のようになります。 -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=140mm]{images/loginprocess.eps} -\caption{TBD} +\caption{ログイン処理} \label{fig:loginprocess} \end{center} \end{figure} @@ -52,7 +52,7 @@ \subsection{ログインモジュールの設定} 設定は、通常の JAAS 認証の設定になります。 -PALポータルでは、デフォルトで org.apache.jetspeed.security.impl.DefaultLoginModule を利用します。 +PALポータルでは、org.apache.jetspeed.security.impl.DefaultLoginModule をデフォルトで利用します。 この設定ファイルは login.conf であり、jetspeed2-security-{version}.jar の中に保存されています。 login.conf の内容は以下の通りです。 @@ -97,10 +97,10 @@ \newpage -\begin{figure}[ht] +\begin{figure}[!htbp] \begin{center} \includegraphics[width=140mm]{images/default-login-module-c.eps} -\caption{TBD} +\caption{DefaultLoginModule} \label{fig:default-login-module-c} \end{center} \end{figure} @@ -108,7 +108,7 @@ DefaultLoginModule で使用されるクラスの役割は以下の通りです。 -\begin{table}[htbp] +\begin{table}[!htbp] \begin{center} \begin{tabular}[tb]{|l|l|} \hline