/* * * This is a simple Email Queue management system * Copyright (C) 2011 Imran M Yousuf (imyousuf@smartitengineering.com) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.smartitengineering.emailq.service; import com.smartitengineering.util.bean.BeanFactoryRegistrar; import com.smartitengineering.util.bean.annotations.Aggregator; import com.smartitengineering.util.bean.annotations.InjectableField; import java.util.concurrent.Semaphore; /** * * @author imyousuf */ @Aggregator(contextName = Services.CONTEXT_NAME) public class Services { public static final String CONTEXT_NAME = "com.smartitengineering.email.queue.service"; private static final Semaphore semaphore = new Semaphore(1); @InjectableField private EmailService emailService; private Services() { } public EmailService getEmailService() { return emailService; } private static Services services; public static Services getInstance() { if (services == null) { try { semaphore.acquire(); } catch (Exception ex) { throw new IllegalStateException(ex); } try { initServices(); } finally { semaphore.release(); } } return services; } private synchronized static void initServices() { if (services == null) { services = new Services(); BeanFactoryRegistrar.aggregate(services); } } }