/* * Copyright 2000-2001,2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.jetspeed.services.idgenerator; // Java import javax.servlet.ServletConfig; // Jetspeed import org.apache.jetspeed.services.logging.JetspeedLogFactoryService; import org.apache.jetspeed.services.logging.JetspeedLogger; // Turbine import org.apache.turbine.services.InitializationException; import org.apache.turbine.services.resources.ResourceService; import org.apache.turbine.services.TurbineBaseService; import org.apache.turbine.services.TurbineServices; /** * Simple implementation of the IdGeneratorService. * * @author <a href="mailto:paulsp@apache.org">Paul Spencer</a> * @version $Id: JetspeedIdGeneratorService.java,v 1.5 2004/02/23 03:28:57 jford Exp $ */ public class JetspeedIdGeneratorService extends TurbineBaseService implements IdGeneratorService { /** * Static initialization of the logger for this class */ private static final JetspeedLogger logger = JetspeedLogFactoryService.getLogger(JetspeedIdGeneratorService.class.getName()); // configuration keys private final static String CONFIG_COUNTER_START = "counter.start"; private final static String CONFIG_PEID_PREFIX = "peid.prefix"; private final static String CONFIG_PEID_SUFFIX = "peid.suffix"; // default configuration values private final static long DEFAULT_CONFIG_COUNTER_START = 0x10000; private final static String DEFAULT_CONFIG_PEID_PREFIX = "P-"; private final static String DEFAULT_CONFIG_PEID_SUFFIX = ""; // configuration parameters private static String peidPrefix = null; private static String peidSuffix = null; protected static long idCounter; /** * This is the early initialization method called by the * Turbine <code>Service</code> framework * @param conf The <code>ServletConfig</code> * @exception throws a <code>InitializationException</code> if the service * fails to initialize */ public synchronized void init(ServletConfig conf) throws InitializationException { // already initialized if (getInit()) return; initConfiguration(); // initialization done setInit(true); } /** * This is the lateinitialization method called by the * Turbine <code>Service</code> framework * * @exception throws a <code>InitializationException</code> if the service * fails to initialize */ public void init() throws InitializationException { logger.info( "Late init for JetspeedIdGeneratorService called" ); while( !getInit() ) { //Not yet... try { Thread.sleep( 100 ); logger.info( "Waiting for init of JetspeedIdGeneratorService..." ); } catch (InterruptedException ie ) { logger.error("Exception", ie); } } } /** * This is the shutdown method called by the * Turbine <code>Service</code> framework */ public void shutdown() { logger.info( "Shutdown for JetspeedIdGeneratorService called. idCounter = " + idCounter + " (" + Long.toHexString(idCounter) + ")" ); } /** * Loads the configuration parameters for this service from the * JetspeedResources.properties file. * * @exception throws a <code>InitializationException</code> if the service * fails to initialize */ private void initConfiguration() throws InitializationException { // get configuration parameters from Jetspeed Resources ResourceService serviceConf = ((TurbineServices)TurbineServices.getInstance()) .getResources(IdGeneratorService.SERVICE_NAME); peidPrefix = serviceConf.getString( CONFIG_PEID_PREFIX, DEFAULT_CONFIG_PEID_PREFIX ); peidSuffix = serviceConf.getString( CONFIG_PEID_SUFFIX, DEFAULT_CONFIG_PEID_SUFFIX ); synchronized(JetspeedIdGeneratorService.class) { idCounter = serviceConf.getLong( CONFIG_COUNTER_START, DEFAULT_CONFIG_COUNTER_START ); } } /** Creates new JetspeedIdGeneratorService */ public JetspeedIdGeneratorService() { } /** * Generate a Unique PEID * @return Unique PEID */ public String getNextPeid() { long newid; synchronized(JetspeedIdGeneratorService.class) { newid = idCounter++; } return peidPrefix + Long.toHexString(System.currentTimeMillis()) + "-" + Long.toHexString(newid) + peidSuffix; } }