Hi,
I tried to use Spring (1.1) in a Desktop application, but discovered some strange behaviours:
- * Beans have not been initalized properly
* Jobs habe not been executed (Quartz)
In the case of bean initialization, I have a bean with static variables. After loading the application context, these variables should be initialized, but are not. Whenever I instanciate that bean (regular way), the static variables are empty, log statements in the accessor methods are signaling, that the accessor methods are never called. The same code works in a web application. - Why I do this - It is a tracing library built with aspectj which sends email if an exception will be thrown. I initialize the MailSender with Spring.
In the case of the jobs, the same code/application context works in a web application, but not in the desktop application. To give you an idea, have a look at the code:
... and the application context:Code:private BeanFactory factory; /** * Loads the Log4J configuration file and watches for changes. * * @since 21.09.2004 */ static { DOMConfigurator.configureAndWatch(LOG4J_PATH); } /** * The main method. * * @param args * The arguments passed to the application. * * @since 15.09.2004 */ public static void main(String[] args) { CDRRaterCoreEngine coreEngine = new CDRRaterCoreEngine(); coreEngine.loadBeans(); Lifecycle cycle = new Lifecycle(); Thread thread = new Thread(cycle); thread.start(); try { Thread.sleep(10000); } catch (InterruptedException ex) { } coreEngine.crash(); } /** * Loads the Spring Application Context from an XML file. If the XML file * does not exist, we try to load the application context from the * classpath. * * @throws FileNotFoundException * if the application context file could not be found. * * @since 15.09.2004 */ private void loadBeans() { try { InputStream stream = new FileInputStream(APPLICATION_CONTEXT_PATH); factory = new XmlBeanFactory(stream); } catch (FileNotFoundException exception) { ClassPathResource resource = new ClassPathResource( APPLICATION_CONTEXT_NAME); factory = new XmlBeanFactory(resource); } } private void crash() { String string = null; string.length(); }
Is there a simple explication of this behaviour?Code:<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://alaska.xxx/dtd/springframework-1.1/spring-beans.dtd" > <beans> <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <property name="host"> <value>ntserv02</value> </property> </bean> <bean id="mailMessage" class="org.springframework.mail.SimpleMailMessage"> <property name="from"> <value><![CDATA[Exception Service <exception@xxx>]]></value> </property> <property name="subject"> <value>Exception occured</value> </property> <property name="to"> <value>yy@xxx</value> </property> </bean> <bean id="exceptionSender" class="xxx.tools.logging.ExceptionSender"> <property name="mailSender"> <ref bean="mailSender"></ref> </property> <property name="message"> <ref bean="mailMessage"></ref> </property> </bean> <bean id="cdrrater" class="xxx.cdrrater.CdrRater"></bean> <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref local="cdrraterTrigger" /> </list> </property> </bean> <bean id="cdrraterJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <ref bean="cdrrater" /> </property> <property name="targetMethod"> <value>rate</value> </property> </bean> <bean id="cdrraterTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <property name="jobDetail"> <ref local="cdrraterJobDetail" /> </property> <property name="repeatInterval"> <value>100</value> </property> </bean> </beans>
Thanks,
Cyrill


Reply With Quote
