/* * Copyright (C) 2012 eXo Platform SAS. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.exoplatform.services.jcr.impl.quota.infinispan; import org.exoplatform.container.configuration.ConfigurationManager; import org.exoplatform.container.xml.InitParams; import org.exoplatform.container.xml.PropertiesParam; import org.exoplatform.container.xml.Property; import org.exoplatform.services.jcr.config.MappedParametrizedObjectEntry; import org.exoplatform.services.jcr.config.RepositoryConfigurationException; import org.exoplatform.services.jcr.impl.quota.BaseQuotaManager; import org.exoplatform.services.jcr.impl.quota.QuotaManagerException; import org.exoplatform.services.jcr.impl.quota.QuotaPersister; import org.exoplatform.services.jcr.impl.storage.jdbc.DBConstants; import org.exoplatform.services.jcr.infinispan.ISPNCacheFactory; import org.exoplatform.services.jcr.infinispan.ManagedConnectionFactory; import org.exoplatform.services.naming.InitialContextInitializer; import org.exoplatform.services.rpc.RPCService; import java.util.Iterator; import javax.jcr.RepositoryException; /** * @author <a href="abazko@exoplatform.com">Anatoliy Bazko</a> * @version $Id: ISPNQuotaManagerImpl.java 34360 2009-07-22 23:58:59Z tolusha $ */ public class ISPNQuotaManagerImpl extends BaseQuotaManager { // ------------------------------------------ ISPN cache parameters names public static final String INFINISPAN_CLUSTER_NAME = "infinispan-cluster-name"; public static final String JGROUPS_CONFIGURATION = "jgroups-configuration"; public static final String INFINISPAN_JDBC_CL_DATASOURCE = "infinispan-cl-cache.jdbc.datasource"; public static final String INFINISPAN_JDBC_CL_DIALECT = "infinispan-cl-cache.jdbc.dialect"; public static final String INFINISPAN_JDBC_CL_CONNECTION_FACTORY = "infinispan-cl-cache.jdbc.connectionFactory"; public static final String INFINISPAN_CONFIGURATION = "infinispan-configuration"; public static final String INFINISPAN_JDBC_TABLE_NAME = "infinispan-cl-cache.jdbc.table.name"; public static final String INFINISPAN_JDBC_TABLE_CREATE = "infinispan-cl-cache.jdbc.table.create"; public static final String INFINISPAN_JDBC_TABLE_DROP = "infinispan-cl-cache.jdbc.table.drop"; public static final String INFINISPAN_JDBC_CL_DATA_COLUMN_TYPE = "infinispan-cl-cache.jdbc.data.type"; public static final String INFINISPAN_JDBC_CL_DATA_COLUMN = "infinispan-cl-cache.jdbc.data.column"; public static final String INFINISPAN_JDBC_CL_ID_COLUMN_TYPE = "infinispan-cl-cache.jdbc.id.type"; public static final String INFINISPAN_JDBC_CL_ID_COLUMN = "infinispan-cl-cache.jdbc.id.column"; public static final String INFINISPAN_JDBC_CL_TIMESTAMP_COLUMN_TYPE = "infinispan-cl-cache.jdbc.timestamp.type"; public static final String INFINISPAN_JDBC_CL_TIMESTAMP_COLUMN = "infinispan-cl-cache.jdbc.timestamp.column"; // ------------------------------------------ DefaultValues public static final String DEFAULT_INFINISPANE_CLUSTER_NAME = "JCR-cluster-quota"; public static final String DEFAULT_JGROUPS_CONFIGURATION = "udp-mux.xml"; public static final String DEFAULT_INFINISPAN_JDBC_TABLE_NAME = "jcr"; public static final String DEFAULT_INFINISPAN_JDBC_TABLE_CREATE = "true"; public static final String DEFAULT_INFINISPAN_JDBC_TABLE_DROP = "false"; public static final String DEFAULT_INFINISPAN_JDBC_CL_DATA_COLUMN_TYPE = "auto"; public static final String DEFAULT_INFINISPAN_JDBC_CL_DATA_COLUMN = "data"; public static final String DEFAULT_INFINISPAN_JDBC_CL_ID_COLUMN_TYPE = "auto"; public static final String DEFAULT_INFINISPAN_JDBC_CL_ID_COLUMN = "id"; public static final String DEFAULT_INFINISPAN_JDBC_CL_TIMESTAMP_COLUMN_TYPE = "auto"; public static final String DEFAULT_INFINISPAN_JDBC_CL_TIMESTAMP_COLUMN = "timestamp"; public static final String DEFAULT_INFINISPAN_JDBC_CL_CONNECTION_FACTORY = ManagedConnectionFactory.class.getName(); /** * ISPNQuotaManager constructor. */ public ISPNQuotaManagerImpl(InitParams initParams, RPCService rpcService, ConfigurationManager cfm, InitialContextInitializer contextInitializer) throws RepositoryConfigurationException, QuotaManagerException { super(initParams, rpcService, cfm, contextInitializer); } /** * ISPNQuotaManager constructor. */ public ISPNQuotaManagerImpl(InitParams initParams, ConfigurationManager cfm, InitialContextInitializer contextInitializer) throws RepositoryConfigurationException, QuotaManagerException { this(initParams, null, cfm, contextInitializer); } /** * {@inheritDoc} */ protected QuotaPersister initQuotaPersister() throws RepositoryConfigurationException, QuotaManagerException { MappedParametrizedObjectEntry entry; try { entry = prepareISPNParameters(initParams); } catch (RepositoryException e) { throw new RepositoryConfigurationException(e.getMessage(), e); } return new ISPNQuotaPersister(entry, cfm); } /** * Returns prepared {@link MappedParametrizedObjectEntry} instance with parameters * needed to create ISPN cache and cache store. */ private MappedParametrizedObjectEntry prepareISPNParameters(InitParams initParams) throws RepositoryException { MappedParametrizedObjectEntry qmEntry = new QuotaManagerEntry(); putDefaultValues(qmEntry); putConfiguredValues(initParams, qmEntry); ISPNCacheFactory.configureCacheStore(qmEntry, INFINISPAN_JDBC_CL_DATASOURCE, INFINISPAN_JDBC_CL_DATA_COLUMN_TYPE, INFINISPAN_JDBC_CL_ID_COLUMN_TYPE, INFINISPAN_JDBC_CL_TIMESTAMP_COLUMN_TYPE, INFINISPAN_JDBC_CL_DIALECT); return qmEntry; } private void putDefaultValues(MappedParametrizedObjectEntry qmEntry) { qmEntry.putParameterValue(INFINISPAN_JDBC_CL_CONNECTION_FACTORY, DEFAULT_INFINISPAN_JDBC_CL_CONNECTION_FACTORY); qmEntry.putParameterValue(INFINISPAN_JDBC_TABLE_NAME, DEFAULT_INFINISPAN_JDBC_TABLE_NAME); qmEntry.putParameterValue(INFINISPAN_JDBC_TABLE_CREATE, DEFAULT_INFINISPAN_JDBC_TABLE_CREATE); qmEntry.putParameterValue(INFINISPAN_JDBC_TABLE_DROP, DEFAULT_INFINISPAN_JDBC_TABLE_DROP); qmEntry.putParameterValue(INFINISPAN_JDBC_CL_DATA_COLUMN_TYPE, DEFAULT_INFINISPAN_JDBC_CL_DATA_COLUMN_TYPE); qmEntry.putParameterValue(INFINISPAN_JDBC_CL_DATA_COLUMN, DEFAULT_INFINISPAN_JDBC_CL_DATA_COLUMN); qmEntry.putParameterValue(INFINISPAN_JDBC_CL_TIMESTAMP_COLUMN_TYPE, DEFAULT_INFINISPAN_JDBC_CL_TIMESTAMP_COLUMN_TYPE); qmEntry.putParameterValue(INFINISPAN_JDBC_CL_TIMESTAMP_COLUMN, DEFAULT_INFINISPAN_JDBC_CL_TIMESTAMP_COLUMN); qmEntry.putParameterValue(INFINISPAN_JDBC_CL_ID_COLUMN_TYPE, DEFAULT_INFINISPAN_JDBC_CL_ID_COLUMN_TYPE); qmEntry.putParameterValue(INFINISPAN_JDBC_CL_ID_COLUMN, DEFAULT_INFINISPAN_JDBC_CL_ID_COLUMN); qmEntry.putParameterValue(INFINISPAN_CLUSTER_NAME, DEFAULT_INFINISPANE_CLUSTER_NAME); qmEntry.putParameterValue(JGROUPS_CONFIGURATION, DEFAULT_JGROUPS_CONFIGURATION); qmEntry.putParameterValue(INFINISPAN_JDBC_CL_DIALECT, DBConstants.DB_DIALECT_AUTO); } private void putConfiguredValues(InitParams initParams, MappedParametrizedObjectEntry qmEntry) { PropertiesParam props = initParams.getPropertiesParam(BaseQuotaManager.CACHE_CONFIGURATION_PROPERTIES_PARAM); for (Iterator<Property> iter = props.getPropertyIterator(); iter.hasNext();) { Property prop = iter.next(); qmEntry.putParameterValue(prop.getName(), prop.getValue()); } } private class QuotaManagerEntry extends MappedParametrizedObjectEntry { } }