/**********************************************************************
* $Source: /cvsroot/jameica/jameica.webadmin/src/de/willuhn/jameica/webadmin/messaging/DeployMessageConsumer.java,v $
* $Revision: 1.2 $
* $Date: 2009/09/24 11:01:47 $
* $Author: willuhn $
* $Locker: $
* $State: Exp $
*
* Copyright (c) by willuhn software & services
* All rights reserved
*
**********************************************************************/
package de.willuhn.jameica.webadmin.messaging;
import org.mortbay.jetty.Handler;
import org.mortbay.jetty.handler.ContextHandlerCollection;
import org.mortbay.jetty.handler.HandlerCollection;
import de.willuhn.jameica.messaging.Message;
import de.willuhn.jameica.messaging.MessageConsumer;
import de.willuhn.jameica.messaging.SystemMessage;
import de.willuhn.jameica.system.Application;
import de.willuhn.jameica.webadmin.Plugin;
import de.willuhn.jameica.webadmin.deploy.Deployer;
import de.willuhn.jameica.webadmin.rmi.HttpService;
import de.willuhn.logging.Logger;
/**
* Das Deployen der Web-Anwendungen koennen wir erst machen, nachdem alle
* Plugins geladen sind. Daher via Message-Consumer.
*/
public class DeployMessageConsumer implements MessageConsumer
{
/**
* @see de.willuhn.jameica.messaging.MessageConsumer#autoRegister()
*/
public boolean autoRegister()
{
return true;
}
/**
* @see de.willuhn.jameica.messaging.MessageConsumer#getExpectedMessageTypes()
*/
public Class[] getExpectedMessageTypes()
{
return new Class[]{SystemMessage.class};
}
/**
* @see de.willuhn.jameica.messaging.MessageConsumer#handleMessage(de.willuhn.jameica.messaging.Message)
*/
public void handleMessage(Message message) throws Exception
{
if (((SystemMessage)message).getStatusCode() != SystemMessage.SYSTEM_STARTED)
return;
ContextHandlerCollection collection = new ContextHandlerCollection();
try
{
Class[] cl = Application.getClassLoader().getClassFinder().findImplementors(Deployer.class);
for (int i=0;i<cl.length;++i)
{
try
{
Logger.info("init deployer " + cl[i].getName());
Deployer d = (Deployer) cl[i].newInstance();
Handler[] handlers = d.deploy();
if (handlers == null || handlers.length == 0)
{
Logger.info("skipping deployer " + d.getClass() + " - contains no handlers");
continue;
}
for (int k=0;k<handlers.length;++k)
{
collection.addHandler(handlers[k]);
}
}
catch (Exception e)
{
Logger.error("error while loading deployer " + cl[i].getName() + ", skipping",e);
}
}
}
catch (ClassNotFoundException e)
{
Logger.warn("no deployers found, skipping http-server");
return;
}
// Wir erzeugen eine Handler-Collection mit Default-Handler.
HandlerCollection handlers = new HandlerCollection();
handlers.addHandler(collection);
// Liefert eine Liste der verfuegbaren Contexte auf der Startseite (Information-Leak)
// handlers.addHandler(new DefaultHandler());
HttpService server = (HttpService) Application.getServiceFactory().lookup(Plugin.class,"listener.http");
server.addHandler(handlers);
}
}
/*********************************************************************
* $Log: DeployMessageConsumer.java,v $
* Revision 1.2 2009/09/24 11:01:47 willuhn
* *** empty log message ***
*
* Revision 1.1 2008/04/10 13:02:29 willuhn
* @N Zweischritt-Deployment. Der Server wird zwar sofort initialisiert, wenn der Jameica-Service startet, gestartet wird er aber erst, wenn die ersten Handler resgistriert werden
* @N damit koennen auch nachtraeglich zur Laufzeit weitere Handler hinzu registriert werden
* @R separater Worker in HttpServiceImpl entfernt. Der Classloader wird nun direkt von den Deployern gesetzt. Das ist wichtig, da Jetty fuer die Webanwendungen sonst den System-Classloader nutzt, welcher die Plugins nicht kennt
*
**********************************************************************/