From: <eag...@us...> - 2013-02-27 21:21:34
|
Revision: 6958 http://jaffa.svn.sourceforge.net/jaffa/?rev=6958&view=rev Author: eagleigor Date: 2013-02-27 21:21:27 +0000 (Wed, 27 Feb 2013) Log Message: ----------- Added Paths: ----------- branches/JBOSS_7/soa/jaffa-soa-api/src/main/java/org/jaffa/modules/scheduler/services/quartz/QuartzInitializerListener.java Added: branches/JBOSS_7/soa/jaffa-soa-api/src/main/java/org/jaffa/modules/scheduler/services/quartz/QuartzInitializerListener.java =================================================================== --- branches/JBOSS_7/soa/jaffa-soa-api/src/main/java/org/jaffa/modules/scheduler/services/quartz/QuartzInitializerListener.java (rev 0) +++ branches/JBOSS_7/soa/jaffa-soa-api/src/main/java/org/jaffa/modules/scheduler/services/quartz/QuartzInitializerListener.java 2013-02-27 21:21:27 UTC (rev 6958) @@ -0,0 +1,149 @@ +/* + * ==================================================================== + * JAFFA - Java Application Framework For All + * + * Copyright (C) 2013 JAFFA Development Group + * + * This library 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 library 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 library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Redistribution and use of this software and associated documentation ("Software"), + * with or without modification, are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain copyright statements and notices. + * Redistributions must also contain a copy of this document. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name "JAFFA" must not be used to endorse or promote products derived from + * this Software without prior written permission. For written permission, + * please contact mail to: jaf...@ya.... + * 4. Products derived from this Software may not be called "JAFFA" nor may "JAFFA" + * appear in their names without prior written permission. + * 5. Due credit should be given to the JAFFA Project (http://jaffa.sourceforge.net). + * + * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + */ +package org.jaffa.modules.scheduler.services.quartz; + +import javax.naming.InitialContext; +import javax.naming.Name; +import javax.naming.NamingException; +import javax.servlet.ServletContext; +import javax.servlet.ServletContextEvent; + +import org.quartz.Scheduler; +import org.quartz.SchedulerException; +import org.quartz.impl.StdSchedulerFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import org.jboss.as.naming.ManagedReferenceFactory; +import org.jboss.as.naming.ServiceBasedNamingStore; +import org.jboss.as.naming.deployment.ContextNames; +import org.jboss.as.naming.service.BinderService; + +import org.jboss.msc.service.ServiceActivator; +import org.jboss.msc.service.ServiceActivatorContext; +import org.jboss.msc.service.ServiceBuilder; +import org.jboss.msc.service.ServiceName; +import org.jboss.msc.service.ServiceRegistryException; + +public class QuartzInitializerListener extends org.quartz.ee.servlet.QuartzInitializerListener implements ServiceActivator{ + + private static final Logger log = LoggerFactory.getLogger(QuartzInitializerListener.class); + + public static final String JNDI_NAME = "java:/GOLDQuartzService"; + + @Override + public void contextInitialized(ServletContextEvent sce) { + super.contextInitialized(sce); + + final ServletContext ctx = sce.getServletContext(); + final StdSchedulerFactory factory = (StdSchedulerFactory) ctx.getAttribute(QuartzInitializerListener.QUARTZ_FACTORY_KEY); + + try { + rebind(factory, JNDI_NAME); + } catch (NamingException e) { + e.printStackTrace(); + } catch (SchedulerException e) { + e.printStackTrace(); + } + + } + + @Override + public void contextDestroyed(ServletContextEvent sce) { + unbind(JNDI_NAME); + super.contextDestroyed(sce); + } + + private void rebind(StdSchedulerFactory factory, String name) throws NamingException, SchedulerException { + + InitialContext rootCtx = null; + try { + rootCtx = new InitialContext(); + Name fullName = rootCtx.getNameParser("").parse(name); + Scheduler scheduler = factory.getScheduler(); + + //NonSerializableFactory.rebind(fullName, scheduler, true); + } finally { + if (rootCtx != null) { + try { + rootCtx.close(); + } catch (NamingException ignore) { + } + } + } + } + + private void unbind(String name) { + InitialContext rootCtx = null; + try { + rootCtx = new InitialContext(); + rootCtx.unbind(name); + //NonSerializableFactory.unbind(name); + } catch (NamingException e) { + log.warn("Failed to unbind scheduler with jndiName: " + name, e); + } finally { + if (rootCtx != null) { + try { + rootCtx.close(); + } catch (NamingException ignore) { + } + } + } + } + + @Override + public void activate(final ServiceActivatorContext serviceActivatorContext) throws ServiceRegistryException { + //create a global binding + final ServiceName bindingServiceName = ContextNames.GLOBAL_CONTEXT_SERVICE_NAME.append(JNDI_NAME); + final BinderService binderService = new BinderService(JNDI_NAME); + ServiceBuilder<ManagedReferenceFactory> builder = serviceActivatorContext.getServiceTarget().addService(bindingServiceName, binderService); + builder.addDependency(ContextNames.GLOBAL_CONTEXT_SERVICE_NAME, ServiceBasedNamingStore.class, binderService.getNamingStoreInjector()); + builder.install(); + } +} \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |