I am working on a Spring-MVC application since some time. Recently I ran into some problems with @Scheduled methods, and I noticed that the whole configuration is getting loaded 4 times. Because of that the @Scheduled methods are getting called 4 times.
The 3 configurations which are not correct, die out with NullPointerException(is what I was told on SO), and the one survives. I am very much interested to know how can I configure my project properly, so there is only one configuration which is loaded, and not 4, and learn about Spring-MVC, Spring in the process.
As the servlet-context is large, I am posting web.xml on pastebin, so I can have place to put JAVA code as well.
Servlet-context.xml :
<context:annotation-config/>
<mvc:annotation-driven>
<mvc:argument-resolvers>
<beans:bean class="org.springframework.mobile.device.DeviceWebArgumentResolver"/>
</mvc:argument-resolvers>
</mvc:annotation-driven>
<mvc:interceptors>
<beans:bean class="org.springframework.mobile.device.DeviceResolverHandlerInterceptor"/>
</mvc:interceptors>
<mvc:default-servlet-handler/>
<resources mapping="/resources/" location="/resources/"/>
<beans:bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/"/>
<beans:property name="suffix" value=".jsp"/>
</beans:bean>
<beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<beans:property name="driverClassName" value="org.postgresql.Driver"/>
<beans:property name="url"
value="jdbc:postgresql://localhost:5432/dbname"/>
<beans:property name="username" value="dbuser"/>
<beans:property name="password" value="dbpass"/>
<beans:property name="removeAbandoned" value="true"/>
<beans:property name="removeAbandonedTimeout" value="20"/>
<beans:property name="defaultAutoCommit" value="false"/>
</beans:bean>
<!-- Hibernate 4 SessionFactory Bean definition -->
<beans:bean id="hibernate4AnnotatedSessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<beans:property name="dataSource" ref="dataSource"/>
<beans:property name="annotatedClasses">
<beans:list>
<beans:value>com.journaldev.spring.model.Person</beans:value>
<beans:value>com.journaldev.spring.model.Notes</beans:value>
<beans:value>com.journaldev.spring.model.Canvas</beans:value>
<beans:value>com.journaldev.spring.model.Section</beans:value>
<beans:value>com.journaldev.spring.model.Attachment</beans:value>
<beans:value>com.journaldev.spring.model.GroupAccount</beans:value>
<beans:value>com.journaldev.spring.model.GroupMembers</beans:value>
<beans:value>com.journaldev.spring.model.GroupCanvas</beans:value>
<beans:value>com.journaldev.spring.model.GroupSection</beans:value>
<beans:value>com.journaldev.spring.model.GroupNotes</beans:value>
<beans:value>com.journaldev.spring.model.GroupAttachments
</beans:value>
<beans:value>com.journaldev.spring.model.Token</beans:value>
<beans:value>com.journaldev.spring.model.WaitingMembers
</beans:value>
<beans:value>com.journaldev.spring.model.NoteHistory</beans:value>
<beans:value>com.journaldev.spring.model.GroupNoteHistory
</beans:value>
<beans:value>com.journaldev.spring.model.Feedback</beans:value>
<beans:value>com.journaldev.spring.model.UnreadNotes</beans:value>
<beans:value>com.journaldev.spring.model.SessionState</beans:value>
<beans:value>com.journaldev.spring.model.FeatureRequest
</beans:value>
<beans:value>com.journaldev.spring.model.FeatureComment
</beans:value>
<beans:value>com.journaldev.spring.model.FeatureLike</beans:value>
<beans:value>com.journaldev.spring.model.OnlineUsers</beans:value>
<beans:value>com.journaldev.spring.model.NoteCount</beans:value>
<beans:value>com.journaldev.spring.model.NoteLock</beans:value>
<beans:value>com.journaldev.spring.model.ChatMessages</beans:value>
<beans:value>com.journaldev.spring.model.Conversation</beans:value>
<beans:value>com.journaldev.spring.model.Replies</beans:value>
<beans:value>com.journaldev.spring.model.Notification</beans:value>
<beans:value>com.journaldev.spring.model.Statistics</beans:value>
<beans:value>com.journaldev.spring.model.PrivateChannel</beans:value>
<beans:value>com.journaldev.spring.model.GroupChannels</beans:value>
</beans:list>
</beans:property>
<beans:property name="hibernateProperties">
<beans:props>
<beans:prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQL9Dialect
</beans:prop>
<beans:prop key="hibernate.show_sql">false</beans:prop>
<beans:prop key="connection.pool_size">200</beans:prop>
<beans:prop key="c3p0.max_size">200</beans:prop>
<beans:prop key="c3p0.timeout">1000</beans:prop>
<!-- <beans:prop key="hibernate.jdbc.batch_size">1000</beans:prop>
<beans:prop key="hibernate.order_updates">true</beans:prop>-->
<beans:prop key="hibernate.hbm2ddl.auto">update</beans:prop>
</beans:props>
</beans:property>
</beans:bean>
<task:annotation-driven/>
<tx:annotation-driven transaction-manager="transactionManager"/>
<beans:bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<beans:property name="sessionFactory" ref="hibernate4AnnotatedSessionFactory"/>
</beans:bean>
<!-- Person beans being here -->
<beans:bean id="personDAO" class="com.journaldev.spring.dao.PersonDAOImpl">
<beans:property name="sessionFactory"
ref="hibernate4AnnotatedSessionFactory"/>
</beans:bean>
<beans:bean id="personService"
class="com.journaldev.spring.service.PersonServiceImpl">
<beans:property name="personDAO" ref="personDAO"/>
</beans:bean>
<!-- <beans:bean id="bayeux" class="org.cometd.server.BayeuxServerImpl" init-method="start" destroy-method="stop">
<beans:property name="transports">
<beans:list>
<beans:bean id="jsonTransport" class="org.cometd.server.transport.JSONTransport">
<beans:constructor-arg ref="bayeux"/>
</beans:bean>
<beans:bean id="jsonpTransport" class="org.cometd.server.transport.JSONPTransport">
<beans:constructor-arg ref="bayeux"/>
</beans:bean>
</beans:list>
</beans:property>
</beans:bean>-->
<!-- Group Account beans begin here -->
<beans:bean id="groupAccountDAO"
class="com.journaldev.spring.dao.GroupAccountDAOImpl">
<beans:property name="sessionFactory"
ref="hibernate4AnnotatedSessionFactory"/>
</beans:bean>
<beans:bean id="groupAccountService"
class="com.journaldev.spring.service.GroupAccountServiceImpl">
<beans:property name="groupAccountDAO" ref="groupAccountDAO"/>
</beans:bean>
<!--Group Members bean begin here -->
<beans:bean id="groupMembersDAO"
class="com.journaldev.spring.dao.GroupMembersDAOImpl">
<beans:property name="sessionFactory"
ref="hibernate4AnnotatedSessionFactory"/>
</beans:bean>
<beans:bean id="groupMembersService"
class="com.journaldev.spring.service.GroupMembersServiceImpl">
<beans:property name="groupMembersDAO" ref="groupMembersDAO"/>
</beans:bean>
<!-- Notes bean begin here -->
<beans:bean id="notesDAO" class="com.journaldev.spring.dao.NotesDAOImpl">
<beans:property name="sessionFactory"
ref="hibernate4AnnotatedSessionFactory"/>
</beans:bean>
<beans:bean id="notesService"
class="com.journaldev.spring.service.NotesServiceImpl">
<beans:property name="notesDAO" ref="notesDAO"/>
</beans:bean>
<!--GroupNotes begin here -->
<beans:bean id="groupNotesDAO" class="com.journaldev.spring.dao.GroupNotesDAOImpl">
<beans:property name="sessionFactory"
ref="hibernate4AnnotatedSessionFactory"/>
</beans:bean>
<beans:bean id="groupNotesService"
class="com.journaldev.spring.service.GroupNotesServiceImpl">
<beans:property name="groupNotesDAO" ref="groupNotesDAO"/>
</beans:bean>
<!-- Canvas Beans begin here -->
<beans:bean id="canvasDAO" class="com.journaldev.spring.dao.CanvasDAOImpl">
<beans:property name="sessionFactory"
ref="hibernate4AnnotatedSessionFactory"/>
</beans:bean>
<beans:bean id="canvasService"
class="com.journaldev.spring.service.CanvasServiceImpl">
<beans:property name="canvasDAO" ref="canvasDAO"/>
</beans:bean>
<!--Group Canvas beans begin here -->
<beans:bean id="groupCanvasDAO"
class="com.journaldev.spring.dao.GroupCanvasDAOImpl">
<beans:property name="sessionFactory"
ref="hibernate4AnnotatedSessionFactory"/>
</beans:bean>
<beans:bean id="groupCanvasService"
class="com.journaldev.spring.service.GroupCanvasServiceImpl">
<beans:property name="groupCanvasDAO" ref="groupCanvasDAO"/>
</beans:bean>
<!-- Section beans begin here -->
<beans:bean id="sectionDAO" class="com.journaldev.spring.dao.SectionDAOImpl">
<beans:property name="sessionFactory"
ref="hibernate4AnnotatedSessionFactory"/>
</beans:bean>
<beans:bean id="sectionService"
class="com.journaldev.spring.service.SectionServiceImpl">
<beans:property name="sectionDAO" ref="sectionDAO"/>
</beans:bean>
<!-- Group Section beans