Bonjour
J'ai une application J2EE avec un serveur JBoss et un client Swing. Le server-side va avoir besoin d'envoyer des mails avec des attachements en PDF.
J'ai donc essayé de passer par l'implémentation Spring de JavaMail (JavaMailSenderImpl).

J'ai donc défini ce bean dans un fichier applicationContext-mail.xml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
<beans>
    <bean id="javaMailSenderImpl" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="host">
            <value>10.0.1.2</value>
        </property>
    </bean>
</beans>
Et je référence ce bean dans mon applicationContext.xml (pour le service qui va envoyer des mails)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
<!-- IncidentService Service Proxy with inner IncidentService Service Implementation -->
    <bean id="incidentService" class="org.springframework.aop.framework.ProxyFactoryBean">
        <property name="target">
            <bean class="com.thalys.opalys.business.IncidentServiceImpl">
                <property name="javaMailSenderImpl"><ref bean="javaMailSenderImpl"/></property>
            </bean>
        </property>
        <property name="proxyInterfaces">
            <value>com.thalys.opalys.business.IncidentService</value>
        </property>
        <property name="interceptorNames">
            <list>
                <value>hibernateInterceptor</value>
            </list>
        </property>
    </bean>
Et enfin dans mon beanRefFactory.xml, je référence bien tous les appContext utilisés:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
<beans>
 
    <bean id="beanRefFactory"
         class="org.springframework.context.support.ClassPathXmlApplicationContext">
        <constructor-arg>
           <list>
                <value>applicationContext.xml</value>
                <value>applicationContext-dataSource.xml</value>
                <value>applicationContext-quartz.xml</value>
                <value>applicationContext-mail.xml</value>
           </list>
        </constructor-arg>
    </bean>
 
    <bean id="beanRefFactoryEjb"
         class="org.springframework.context.support.ClassPathXmlApplicationContext">
        <constructor-arg>
           <list>
                <value>applicationContext-localEjb.xml</value>
                <!-- beanRefFactoryEjb merge-point -->
           </list>
        </constructor-arg>
    </bean>
    <!-- beanRefFactoryEjbXml merge-point -->
 
</beans>
A la compiltion (Maven), tout se passe bien, mais au déploiement, j'ai une erreur, qui est la suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
09:47:42,080 ERROR [ContextLoader] Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'incidentService' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Cannot create inner bean 'com.thalys.opalys.business.IncidentServiceImpl#5363a8' while setting bean property 'target'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.thalys.opalys.business.IncidentServiceImpl#5363a8' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Cannot resolve reference to bean 'javaMailSenderImpl' while setting bean property 'javaMailSenderImpl'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'javaMailSenderImpl' is defined
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.thalys.opalys.business.IncidentServiceImpl#5363a8' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Cannot resolve reference to bean 'javaMailSenderImpl' while setting bean property 'javaMailSenderImpl'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'javaMailSenderImpl' is defined
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'javaMailSenderImpl' is defined
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:360)
	...
Plus haut dans les logs je me suis aperçu que appContext-mail ne semblait pas pris en compte:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
09:47:33,093 INFO  [ContextLoader] Root WebApplicationContext: initialization started
09:47:33,093 INFO  [[/opalys-server-remoting]] Loading Spring root WebApplicationContext
09:47:33,180 INFO  [CollectionFactory] JDK 1.4+ collections available
09:47:33,195 INFO  [CollectionFactory] Commons Collections 3.x available
09:47:33,230 INFO  [XmlBeanDefinitionReader] Loading XML bean definitions from ServletContext resource [/WEB-INF/applicationContext.xml]
09:47:33,792 INFO  [XmlBeanDefinitionReader] Loading XML bean definitions from ServletContext resource [/WEB-INF/applicationContext-dataSource.xml]
09:47:33,851 INFO  [XmlBeanDefinitionReader] Loading XML bean definitions from ServletContext resource [/WEB-INF/applicationContext-quartz.xml]
09:47:33,868 INFO  [XmlBeanDefinitionReader] Loading XML bean definitions from ServletContext resource [/WEB-INF/applicationContext-server-authentication.xml]
09:47:33,962 INFO  [XmlWebApplicationContext] Bean factory for application context [Root WebApplicationContext]: org.springframework.beans.factory.support.DefaultListableBeanFactory defining beans [messageSource,sessionFactory,hibernateInterceptor,pointDao,particularPointDao,axisDao,referenceDao,passagePointDao,varianteDao,userDao,roleDao,regularityFormDao,endOfMissionMessageDao,effectiveTrancheDao,trainSetDao,effectivePassageDao,incidentFormDao,eventTargetDao,eventDao,actionDao,eventTargetTypeDao,eventTypeDao,actionTypeDao,emailActionTypeDao,emailUserActionTypeDao,emailMailingListActionTypeDao,mailingListDao,stateDao,breakageFormDao,incidentDao,incidentTypeDao,effectDao,effectivePassageIssueDao,varianteSpecialCaseDao,trancheDao,breakageDao,incidentLocationDao,incidentFormNoticeSenderDao,administrationService,dataImportService,echoService,securityService,trafficGeneratorService,schedulerService,valentysService,incidentService,breakageService,regularityService,passengerFileParsingService,serviceSecurityInterceptor,serviceAccessDecisionManager,serviceDecisionVoter,dataSource,transactionManager,scheduler,basicProcessingFilter,authenticationEntryPoint,opalysAuthenticationManager,daoAuthenticationProvider,userCacheManager,userCacheBackend,userAuthenticationCache,passwordEncoder,opalysUserDetailsService]; root of BeanFactory hierarchy
09:47:33,983 INFO  [XmlWebApplicationContext] 64 beans defined in application context [Root WebApplicationContext]
Je pense que le pb vient de là, mais pourquoi? Quelqu'un peut-il m'expliquer?
Nicolas.