2009-09-29 9 views
3

Je suis programme à partir d'un service dans l'axe 2 (1,5), comme ceci:démarrage d'un service axis2 programme

ConfigurationContext context = ConfigurationContextFactory.createConfigurationContextFromFileSystem(null, null); 

AxisConfiguration cfg = context.getAxisConfiguration(); 
Map<String, MessageReceiver> mrMap = new HashMap<String, MessageReceiver>(); 
mrMap.put("http://www.w3.org/ns/wsdl/in-only", RPCInOnlyMessageReceiver.class.newInstance()); 
mrMap.put("http://www.w3.org/ns/wsdl/in-out", RPCMessageReceiver.class.newInstance()); 

AxisService service = AxisService.createService(MonitorWebService.class.getName(), cfg, mrMap, "", "http://samples", MonitorWebService.class.getClassLoader()); 
service.setScope("application"); 
cfg.addService(service); 
SimpleHTTPServer server = new SimpleHTTPServer(context, 8080); 
server.start(); 

Avec cette configuration, le service est créé uniquement lorsque la première demande d'opération arrive - comment puis-je forcer l'axe à construire le service immédiatement?

Mise à jour: J'ai essayé d'utiliser deployService(), plutôt que cfg.addService(), et cela démarre le service immédiatement. Cependant, une autre instance du service est créée lorsque la première requête arrive, donc ce n'est pas bon non plus.

+0

Avec cette approche, puis-je utiliser service.xml pour configurer le service? –

Répondre

1

Une manière cheesy de le faire serait d'avoir le code appeler le service immédiatement après le démarrage du service.

+0

oui, ce serait ringard :) En supposant qu'aucune autre option n'apparaisse, je le ferai. – Andy

1

Vous pouvez laisser l'un de vos services implémenter org.apache.axis2.engine.ServiceLifeCycle. Il semble que vous avez aussi besoin d'annoncer que dans la configuration services.xml, comme celle

<service name="MyService" scope="application" class="com.example.MyService"> 
... 
</service> 

où com.example.MyService est la mise en œuvre ServiceLifeCycle de classe. Cette classe sera notifiée sur le déploiement de service, qui a généralement lieu au démarrage du conteneur. Vous pouvez accrocher votre code pour démarrer d'autres services (par programmation) là-bas.

Questions connexes