À l'heure actuelle, j'ai un bean avec une méthode @Scheduled fonctionne bien; c'est déclaré dans mon applicationContext.xml.Comment planifier une nouvelle méthode dans une application Web Spring au moment de l'exécution?
<!-- some JPA stuff -->
<bean id="aWorkingBean" class="some.package.WorkingBean">
<property name="someDAO" ref="someDAO" />
</bean>
<task:annotation-driven scheduler="myScheduler" />
<task:scheduler id="myScheduler" pool-size="10" />
Ce que je suis en train de faire est de planifier une autre méthode par programmation (chargement par exemple une classe annotée et injectent ses dépendances) sur demande. Quelque chose comme:
WebApplicationContext ctx = ContextLoader.getCurrentWebApplicationContext();
BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(NonWorkingBean.class);
// add DAO references...
ctx.registerBeanDefinition("nonWorkingBean", builder.getBeanDefinition()); // <-- this doesn't work
Il est évident que cela ne fonctionne pas parce que le XmlWebApplicationContext est en lecture seule et n'a pas méthode registerBeanDefinition. Y a-t-il un autre moyen d'y parvenir?
J'utilise Tomcat 6.0.29 et 3.0.4 Spring
Merci! En fait, j'ai réussi à planifier de nouvelles tâches en obtenant le bean myScheduler et en utilisant Runnable, comme vous venez de le dire, mais je me demandais si c'était sûr pour a) les transactions et b) les fuites de threads. (Ma méthode planifiée utilise certains DAO). – arturo