What this running error means? - spring

Hello, I`m trying to run a job in spring batch but its giving me this error which i dont know how to solve:
`$` C:\Program Files\Microsoft Visual Studio 8\VC>java -jar C:\Workspacetest\testpro
ject\target\ams-eod-0.0.1-SNAPSHOT.jar copyJob 1 `$`
Exception in thread "main" java.lang.NullPointerException
at sun.launcher.LauncherHelper.getMainClassFromJar(LauncherHelper.java:399)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:463)
However this is my applicationcontext. can anyone help me regarding this error please?
few words to discribe what the job does, this job reads from a database some records and then it performs a calculation on each record (row * 3.75) and then update the record.
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/batch"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/batch
http://www.springframework.org/schema/batch/spring-batch-2.2.xsd">
<beans:bean id="itemReader" class="org.spr...JdbcCursorItemReader">
<beans:property name="dataSource" ref="dataSource"/>
<beans:property name="sql" value="select * from Trans WHERE id =?"/>
<beans:property name="rowMapper" ref= "CustomerCreditRowMapper"/>
<beans:property name="preparedStatementSetter" ref="idSetter"/>
</beans:bean>
<beans:bean id="transactionProcessor" class="">
<beans:property name="targetObject" ref="Processing"/>
<beans:property name="targetMethod" value="process"/>
</beans:bean>
<beans:bean id="jdbcWriter"
class="org.springframework.batch.item.database.JdbcBatchItemWriter">
<beans:property name="dataSource" ref="dataSource"/>
<beans:property name="sql" value="update Trans set (amount) values (?)"/>
<beans:property name="preparedStatementSetter" ref="idSetter"/>
</beans:bean>
<step id="CopyFileStep">
<tasklet>
<chunk reader="itemReader"
processor="transactionProcessor"
writer="jdbcWriter"
commit-interval="10"/>
</tasklet>
</step>
<job id="copyJob">
<step id="step1" parent="CopyFileStep"/>
</job>
<beans:bean id="preparedStatementSetter"
class="sa.com.anb.itg.dev.settlement.batch.Itemwriter"/>
<beans:bean id="idSetter" class="sa.com.anb.itg.dev.settlement.batch.idSetter"
scope="step">
<beans:property name="id" value="#{jobParameters[id]}"/>
</beans:bean>
<beans:bean id="CustomerCreditRowMapper"
class="sa.com.anb.itg.dev.settlement.batch.CustomerCreditRowMapper"/>
<beans:bean id="AmountToTransactionItemProcessor"
class="sa.com.anb.itg.dev.settlement.batch.AmountToTransactionItemProcessor">
<beans:property name="TransactionDAO" ref="TransactionDAO"/>
</beans:bean>
<beans:bean id="TransactionDAO" class="sa.com.anb.itg.dev.settlement.batch.TransactionDAO">
<beans:property name="datasource" ref="dataSource"/>
</beans:bean>
<beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<beans:property name="driverClassName" value="org.hsqldb.jdbcDriver" />
<beans:property name="url" value="jdbc:oracle:thin:#192.168.84.208:1556:pay10g" />
<beans:property name="username" value="ams_recon" />
<beans:property name="password" value="ams_recon" />
</beans:bean>
<beans:bean id="jobRepository"
class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean">
<beans:property name="dataSource" ref="dataSource"/>
<beans:property name="transactionManager" ref="transactionManager"/>
</beans:bean>
<beans:bean id="jobLauncher"
class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
<beans:property name="jobRepository" ref="jobRepository" />
</beans:bean>
<beans:bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager" lazy-init="true">
<beans:property name="dataSource" ref="dataSource"/>
</beans:bean>
</beans:beans>

Well, when launching an App you REALLY need a Main Class.
Spring Batch can provide one for you : CommandLineJobRunner.
In your example it seems that your are trying to execute your app like a regular one with the commandLine. Here Java try to locate you Manifest File because the JVM NEEDS a Main class and it's not able to find it in your JAR which cause your error.
It's not your app that you have to launch with the command line, it's the CommandLineJobRunner which provide a Main method able to launch your batch.
The documentation show how to use it : http://static.springsource.org/spring-batch/reference/html/configureJob.html#runningJobsFromCommandLine

Related

I need to save the messaged in rabbit mq and delete it once my job is completed successfully

I need to save m messages in rabbit mq. I am using acknowledgeMode as MANUAL in SimpleMessageListenerContainer. This is helping me store the value in unacked in rabbit mq. But even after job completion the messages remain in the unacked. I need the messages to be deleted once job gets completed successfully. Please help me find a solution
<beans:bean id="PartitionHandler" class="org.springframework.batch.integration.partition.MessageChannelPartitionHandler" init-method="afterPropertiesSet" scope="job">
<beans:property name="messagingOperations" ref="messagingTemplate"></beans:property>
<beans:property name="stepName" value="slave" />
<beans:property name="gridSize" value="${spring.gridsize}" />
<beans:property name="pollInterval" value="5000"></beans:property>
<beans:property name="jobExplorer" ref="jobExplorer"></beans:property>
<beans:property name="replyChannel" ref="outboundReplies"></beans:property>
</beans:bean>
<beans:bean id="PeriodicTrigger" class="org.springframework.scheduling.support.PeriodicTrigger">
<beans:constructor-arg value="5000"></beans:constructor-arg>
</beans:bean>
<beans:bean id="requestQueue" class="org.springframework.amqp.core.Queue">
<beans:constructor-arg name="name" value="testQueue">
</beans:constructor-arg>
<beans:constructor-arg name="durable" value="true">
</beans:constructor-arg>
</beans:bean>
<int:poller id="PollerMetadata" default="true" trigger="PeriodicTrigger" task-executor="taskExecutor"></int:poller>
<beans:bean id="amqptemplate"
class="org.springframework.amqp.rabbit.core.RabbitTemplate">
<beans:property name="connectionFactory" ref="rabbitConnFactory" />
<beans:property name="routingKey" value="testQueue"/>
<beans:property name="queue" value="testQueue"/>
</beans:bean>
<beans:bean id="amqpOutboundEndpoint" class="org.springframework.integration.amqp.outbound.AmqpOutboundEndpoint">
<beans:constructor-arg ref="amqptemplate"/>
<beans:property name="expectReply" value="false"></beans:property>
<beans:property name="routingKey" value="testQueue"></beans:property>
<beans:property name="outputChannel" ref="inboundRequests"></beans:property>
</beans:bean>
<int:service-activator ref="amqpOutboundEndpoint" input-channel="outboundRequests"/>
<beans:bean id="SimpleMessageListenerContainer" class="org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer">
<beans:constructor-arg ref="rabbitConnFactory"/>
<beans:property name="queueNames" value="testQueue"></beans:property>
<beans:property name="autoStartup" value="false"></beans:property>
<beans:property name="acknowledgeMode" value="MANUAL"></beans:property>
<beans:property name="concurrentConsumers" value="5"></beans:property>
</beans:bean>
<beans:bean id="AmqpInboundChannelAdapter" class="org.springframework.integration.amqp.inbound.AmqpInboundChannelAdapter" init-method="afterPropertiesSet">
<beans:constructor-arg ref="SimpleMessageListenerContainer"/>
<beans:property name="outputChannel" ref="inboundRequests"></beans:property>
</beans:bean>
<beans:bean id="StepExecutionRequestHandler" class="org.springframework.batch.integration.partition.StepExecutionRequestHandler">
<beans:property name="jobExplorer" ref="jobExplorer"/>
<beans:property name="stepLocator" ref="stepLocator"/>
</beans:bean>
<int:service-activator ref="StepExecutionRequestHandler" input-channel="inboundRequests" output-channel="outboundStaging"/>
<bean id="rabbitConnFactory"
class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory">
<constructor-arg><value>localhost</value></constructor-arg>
<property name="username" value="guest" />
<property name="password" value="guest" />
<property name="virtualHost" value="/" />
<property name="port" value="5672" />
</bean>
<bean id="admin" class="org.springframework.amqp.rabbit.core.RabbitAdmin">
<constructor-arg ref="rabbitConnFactory" />
</bean>
<bean id="messagingTemplate"
class="org.springframework.integration.core.MessagingTemplate">
<constructor-arg ref="outboundRequests" />
<property name="receiveTimeout" value="60000000"/>
</bean>
<bean id="outboundRequests" class="org.springframework.integration.channel.DirectChannel" >
<property name="maxSubscribers" value="5"></property>
</bean>
<int:channel id="outboundReplies" scope="job"><int:queue/></int:channel>
<bean id="outboundStaging" class="org.springframework.integration.channel.NullChannel"></bean>
<bean id="inboundRequests" class="org.springframework.integration.channel.QueueChannel"></bean>
<bean id="stepLocator" class="org.springframework.batch.integration.partition.BeanFactoryStepLocator"/>
When using MANUAL acks, you are responsible for the acknowledgment.
See my answer to this question.

SEVERE: Context initialization failed

ERROR [2015-06-23 10:12:50,826] localhost-startStop-1 org.springframework.web.context.ContextLoader - Context initialization failed
java.lang.NoClassDefFoundError: org/springframework/beans/factory/config/BeanExpressionResolver
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
at java.lang.Class.getConstructor0(Unknown Source)
at java.lang.Class.getDeclaredConstructor(Unknown Source)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:78)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:249)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:5016)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5528)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.config.BeanExpressionResolver
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
... 17 more
This is my applicationcontext.xml file...
ApplicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:sec="http://www.springframework.org/schema/security"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.4.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
<bean
class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="persistenceUnitName" value="punit"/>
<property name="jpaVendorAdapter">
<bean
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="generateDdl" value="true" />
<property name="databasePlatform"><ref bean="dialect"/></property>
</bean>
</property>
</bean>
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:/comp/env/jdbc/iclassifieddb"/>
</bean>
<bean id="dialect" class="org.springframework.jndi.JndiObjectFactoryBean" autowire-candidate="false">
<property name="jndiName" value="java:/comp/env/dialect"/>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
<!-- Startup bean -->
<bean id="databaseSetup" class="com.Yasna.iclassified.util.DatabaseSetup">
<property name="mutableAclService" ref="aclService"/>
<property name="configurationDao"><ref bean="configurationItemDAO"/></property>
</bean>
<!-- DAOs -->
<bean id="categoryDAO"
class="com.Yasna.iclassified.category.CategoryDAOJPA">
</bean>
<bean id="configurationItemDAO"
class="com.Yasna.iclassified.configuration.ConfigurationItemDAOJPA">
</bean>
<bean id="dataElementDAO"
class="com.Yasna.iclassified.dataelement.DataElementDAOJPA">
</bean>
<bean id="postingDAO"
class="com.Yasna.iclassified.posting.PostingDAOJPA">
<property name="propertyHelperFactory"><ref bean="propertyHelperFactory"/></property>
<property name="luceneIndexer"><ref bean="luceneIndexer"/></property>
</bean>
<bean id="propertyDAO"
class="com.Yasna.iclassified.property.PropertyDAOJPA">
</bean>
<bean id="imagePropertyDAO"
class="com.Yasna.iclassified.property.ImagePropertyDAOJPA">
<property name="configurationDAO"><ref bean="configurationItemDAO"/></property>
</bean>
<bean id="userDAO"
class="com.Yasna.iclassified.user.UserDAOJPA">
</bean>
<!-- Controllers. Remember to specify the appropriate DAO as the dao parameter -->
<bean id="categoryController" scope="prototype" class="com.Yasna.iclassified.category.CategoryController">
<property name="dao"><ref bean="categoryDAO"/></property>
<property name="postingDAO"><ref bean="postingDAO"/></property>
<property name="securityHelper"><ref bean="securityHelper"/></property>
</bean>
<bean id="configurationController" scope="prototype" class="com.Yasna.iclassified.configuration.ConfigurationController">
<property name="dao"><ref bean="configurationItemDAO"/></property>
</bean>
<bean id="dataelementController" scope="prototype" class="com.Yasna.iclassified.dataelement.DataElementController">
<property name="dao"><ref bean="dataElementDAO"/></property>
<property name="categoryDAO"><ref bean="categoryDAO"/></property>
<property name="securityHelper"><ref bean="securityHelper"/></property>
</bean>
<bean id="postingController" scope="prototype" class="com.Yasna.iclassified.posting.PostingController">
<property name="dao"><ref bean="postingDAO"/></property>
<property name="categoryDAO"><ref bean="categoryDAO"/></property>
<property name="propertyDAO"><ref bean="propertyDAO"/></property>
<property name="dataElementDAO"><ref bean="dataElementDAO"/></property>
<property name="configurationDAO"><ref bean="configurationItemDAO"/></property>
<property name="mutableAclService"><ref bean="aclService"/></property>
<property name="propertyHelperFactory"><ref bean="propertyHelperFactory"/></property>
<property name="securityHelper"><ref bean="securityHelper"/></property>
</bean>
<bean id="postingListController" scope="prototype" class="com.Yasna.iclassified.posting.PostingListController">
<property name="postingDAO"><ref bean="postingDAO"/></property>
<property name="categoryDAO"><ref bean="categoryDAO"/></property>
</bean>
<bean id="userController" scope="prototype" class="com.Yasna.iclassified.user.UserController">
<property name="dao"><ref bean="userDAO"/></property>
<property name="securityHelper"><ref bean="securityHelper"/></property>
<property name="userHelper"><ref bean="userHelper"/></property>
</bean>
<!-- Property Helpers -->
<bean id="propertyHelperFactory" class="com.Yasna.iclassified.property.PropertyHelperFactory">
<property name="helperMap">
<map>
<entry>
<key>
<value>SHORT_TEXT</value>
</key>
<ref bean="textHelper"/>
</entry>
<entry>
<key>
<value>LONG_TEXT</value>
</key>
<ref bean="textHelper"/>
</entry>
<entry>
<key>
<value>IMAGE</value>
</key>
<ref bean="imageHelper"/>
</entry>
<entry>
<key>
<value>CURRENCY</value>
</key>
<ref bean="currencyHelper"/>
</entry>
<entry>
<key>
<value>DEFAULT_CURRENCY</value>
</key>
<ref bean="defaultCurrencyHelper"/>
</entry>
</map>
</property>
</bean>
<bean id="textHelper" class="com.Yasna.iclassified.property.TextPropertyHelper">
<property name="propertyDAO"><ref bean="propertyDAO"/></property>
</bean>
<bean id="imageHelper" class="com.Yasna.iclassified.property.ImagePropertyHelper">
<property name="propertyDAO"><ref bean="imagePropertyDAO"/></property>
</bean>
<bean id="currencyHelper" class="com.Yasna.iclassified.property.CurrencyPropertyHelper">
<property name="propertyDAO"><ref bean="propertyDAO"/></property>
</bean>
<bean id="defaultCurrencyHelper" class="com.Yasna.iclassified.property.DefaultCurrencyPropertyHelper">
<property name="propertyDAO"><ref bean="propertyDAO"/></property>
</bean>
<!-- Miscellaneous actions -->
<bean id="homeController" scope="prototype" class="com.Yasna.iclassified.util.HomeController">
<property name="configurationDAO"><ref bean="configurationItemDAO"/></property>
<property name="userDAO"><ref bean="userDAO"/></property>
<property name="securityHelper"><ref bean="securityHelper"/></property>
<property name="userHelper"><ref bean="userHelper"/></property>
</bean>
<bean id="profileController" scope="prototype" class="com.Yasna.iclassified.user.ProfileController">
<property name="userDAO"><ref bean="userDAO"/></property>
<property name="postingDAO"><ref bean="postingDAO"/></property>
<property name="securityHelper"><ref bean="securityHelper"/></property>
</bean>
<bean id="getFile" class="com.Yasna.iclassified.util.GetFileAction">
<property name="propertyDAO"><ref bean="imagePropertyDAO"/></property>
</bean>
<bean id="postingSearchController" class="com.Yasna.iclassified.posting.PostingSearchController">
<property name="postingDAO"><ref bean="postingDAO"/></property>
<property name="luceneSearcher"><ref bean="luceneSearcher"/></property>
</bean>
<bean id="configurationCacheAction" scope="prototype" class="com.Yasna.iclassified.configuration.ConfigurationCacheAction">
<property name="configurationItemDAO"><ref bean="configurationItemDAO"/></property>
</bean>
<!-- Interceptors -->
<bean id="propertiesInterceptor" scope="prototype" class="com.Yasna.iclassified.struts.PropertiesInterceptor">
<property name="userDAO"><ref bean="userDAO"/></property>
<property name="postingDAO"><ref bean="postingDAO"/></property>
</bean>
<!-- Scheduled Jobs -->
<bean id="expiryJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="postingDAO" />
<property name="targetMethod" value="expirePostings" />
</bean>
<bean id="expiryTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="expiryJob" />
<!-- run every hour -->
<property name="cronExpression" value="0 0 * * * ?" />
</bean>
<bean id="versionCheck" class="com.Yasna.iclassified.util.VersionChecker">
<property name="configurationDAO" ref="configurationItemDAO"/>
</bean>
<bean id="versionCheckJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="versionCheck" />
<property name="targetMethod" value="checkVersion" />
</bean>
<bean id="versionTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="versionCheckJob" />
<!-- run every day at midday -->
<property name="cronExpression" value="0 0 12 * * ?" />
</bean>
<!--
<bean id="extraTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="expiryJob" />
<property name="cronExpression" value="0 * * * * ?" />
</bean>
-->
<!-- A list of Triggers to be scheduled and executed by Quartz -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="expiryTrigger"/>
<ref bean="versionTrigger"/>
<!-- <ref bean="extraTrigger"/> -->
</list>
</property>
</bean>
<!-- Email configuration -->
<bean id="mailProperties" scope="prototype" class="com.Yasna.iclassified.util.MailProperties">
<property name="configurationDAO"><ref bean="configurationItemDAO"/></property>
</bean>
<bean id="mailSender" scope="prototype" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host">
<bean factory-bean="mailProperties" factory-method="getHost"/>
</property>
<property name="password">
<bean factory-bean="mailProperties" factory-method="getPassword"/>
</property>
<property name="username">
<bean factory-bean="mailProperties" factory-method="getUser"/>
</property>
</bean>
<bean id="emailController" scope="prototype" class="com.Yasna.iclassified.email.EmailController">
<property name="postingDAO"><ref bean="postingDAO"/></property>
<property name="emailHelper"><ref bean="emailHelper"/></property>
</bean>
<bean id="emailHelper" scope="prototype" class="com.Yasna.iclassified.email.EmailHelper">
<property name="mailSender"><ref bean="mailSender"/></property>
<property name="securityHelper"><ref bean="securityHelper"/></property>
<property name="configurationItemDAO"><ref bean="configurationItemDAO"/></property>
</bean>
<!-- Lucene Indexing -->
<bean id="fsDirectory" class="org.springmodules.lucene.index.support.FSDirectoryFactoryBean">
<property name="location" value="lucene"/>
<property name="create">
<value>true</value>
</property>
</bean>
<bean id="indexFactory" class="org.springmodules.lucene.index.support.SimpleIndexFactoryBean">
<property name="directory" ref="fsDirectory"/>
<property name="create">
<value>true</value>
</property>
<property name="analyzer">
<bean class="org.apache.lucene.analysis.SimpleAnalyzer">
</bean>
</property>
</bean>
<bean id="luceneIndexer" class="com.Yasna.iclassified.lucene.LuceneIndexer">
<property name="indexFactory"><ref bean="indexFactory"/></property>
<property name="propertyHelperFactory"><ref bean="propertyHelperFactory"/></property>
</bean>
<bean id="searcherFactory"
class="org.springmodules.lucene.search.factory.SimpleSearcherFactory">
<property name="directory" ref="fsDirectory"/>
</bean>
<bean id="luceneSearcher" class="com.Yasna.iclassified.lucene.LuceneSearcher">
<property name="searcherFactory"><ref bean="searcherFactory"/></property>
<property name="analyzer"><bean class="org.apache.lucene.analysis.SimpleAnalyzer" /></property>
<property name="postingDAO"><ref bean="postingDAO"/></property>
<property name="dataElementDAO"><ref bean="dataElementDAO"/></property>
</bean>
<!-- Miscellaneous Beans -->
<bean id="securityHelper" class="com.Yasna.iclassified.security.SecurityHelper" />
<bean id="userHelper" scope="prototype" class="com.Yasna.iclassified.user.UserHelper">
<property name="emailHelper"><ref bean="emailHelper"/></property>
</bean>
</beans>
This is security for the above context file.
securityApplicationContext.xml
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.4.xsd">
<http auto-config='true'>
<intercept-url pattern="/category/Category/create*" access="ROLE_ADMIN" />
<intercept-url pattern="/configuration**" access="ROLE_ADMIN" />
<intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<form-login login-page="/common/login.jsp" />
</http>
<authentication-provider user-service-ref='userDAO'>
<password-encoder hash="sha">
<salt-source user-property="username"/>
</password-encoder>
</authentication-provider>
<global-method-security secured-annotations="enabled" jsr250-annotations="enabled" access-decision-manager-ref="accessDecisionManager"/>
<!-- ACL permission masks used by this application -->
<beans:bean id="org.springframework.security.acls.domain.BasePermission.READ"
class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">
<beans:property name="staticField" value="org.springframework.security.acls.domain.BasePermission.READ"/>
</beans:bean>
<beans:bean id="org.springframework.security.acls.domain.BasePermission.WRITE"
class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">
<beans:property name="staticField" value="org.springframework.security.acls.domain.BasePermission.WRITE"/>
</beans:bean>
<beans:bean id="org.springframework.security.acls.domain.BasePermission.CREATE"
class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">
<beans:property name="staticField" value="org.springframework.security.acls.domain.BasePermission.CREATE"/>
</beans:bean>
<beans:bean id="org.springframework.security.acls.domain.BasePermission.DELETE"
class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">
<beans:property name="staticField" value="org.springframework.security.acls.domain.BasePermission.DELETE"/>
</beans:bean>
<beans:bean id="org.springframework.security.acls.domain.BasePermission.ADMINISTRATION"
class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">
<beans:property name="staticField" value="org.springframework.security.acls.domain.BasePermission.ADMINISTRATION"/>
</beans:bean>
<!-- An access decision voter that reads ROLE_* configuration settings -->
<beans:bean id="roleVoter" class="org.springframework.security.vote.RoleVoter"/>
<!-- An access decision voter that reads ACL_POSTING_WRITE configuration settings -->
<beans:bean id="aclPostingWriteVoter" class="com.Yasna.iclassified.security.GenericsAclEntryVoter">
<beans:constructor-arg ref="aclService"/>
<beans:constructor-arg value="ACL_POSTING_WRITE"/>
<beans:constructor-arg>
<beans:list>
<beans:ref local="org.springframework.security.acls.domain.BasePermission.WRITE"/>
</beans:list>
</beans:constructor-arg>
<beans:property name="processDomainObjectClass" value="com.Yasna.iclassified.posting.Posting"/>
</beans:bean>
<!-- An access decision voter that reads ACL_POSTING_DELETE configuration settings -->
<beans:bean id="aclPostingDeleteVoter" class="com.Yasna.iclassified.security.GenericsAclEntryVoter">
<beans:constructor-arg ref="aclService"/>
<beans:constructor-arg value="ACL_POSTING_DELETE"/>
<beans:constructor-arg>
<beans:list>
<beans:ref local="org.springframework.security.acls.domain.BasePermission.DELETE"/>
</beans:list>
</beans:constructor-arg>
<beans:property name="processDomainObjectClass" value="com.Yasna.iclassified.posting.Posting"/>
</beans:bean>
<!-- An access decision voter that determines if there is an existing authentication -->
<beans:bean id="authenticatedVoter" class="org.springframework.security.vote.AuthenticatedVoter"/>
<!-- An access decision voter that reads JSR 250 annotations -->
<beans:bean id="jsr250Voter" class="org.springframework.security.annotation.Jsr250Voter"/>
<beans:bean id="accessDecisionManager"
class="org.springframework.security.vote.AffirmativeBased">
<beans:property name="decisionVoters">
<beans:list>
<beans:ref bean="roleVoter"/>
<beans:ref bean="jsr250Voter"/>
<beans:ref bean="authenticatedVoter"/>
<beans:ref bean="aclPostingWriteVoter"/>
<beans:ref bean="aclPostingDeleteVoter"/>
</beans:list>
</beans:property>
</beans:bean>
<!-- ========= ACCESS CONTROL LIST LOOKUP MANAGER DEFINITIONS ========= -->
<beans:bean id="aclCache" class="org.springframework.security.acls.jdbc.EhCacheBasedAclCache">
<beans:constructor-arg>
<beans:bean class="org.springframework.cache.ehcache.EhCacheFactoryBean">
<beans:property name="cacheManager">
<beans:bean class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"/>
</beans:property>
<beans:property name="cacheName" value="aclCache"/>
</beans:bean>
</beans:constructor-arg>
</beans:bean>
<beans:bean id="lookupStrategy" class="org.springframework.security.acls.jdbc.BasicLookupStrategy">
<beans:constructor-arg ref="dataSource"/>
<beans:constructor-arg ref="aclCache"/>
<beans:constructor-arg>
<beans:bean class="org.springframework.security.acls.domain.AclAuthorizationStrategyImpl">
<beans:constructor-arg>
<beans:list>
<beans:bean class="org.springframework.security.GrantedAuthorityImpl">
<beans:constructor-arg value="ROLE_ADMINISTRATOR"/>
</beans:bean>
<beans:bean class="org.springframework.security.GrantedAuthorityImpl">
<beans:constructor-arg value="ROLE_ADMINISTRATOR"/>
</beans:bean>
<beans:bean class="org.springframework.security.GrantedAuthorityImpl">
<beans:constructor-arg value="ROLE_ADMINISTRATOR"/>
</beans:bean>
</beans:list>
</beans:constructor-arg>
</beans:bean>
</beans:constructor-arg>
<beans:constructor-arg>
<beans:bean class="org.springframework.security.acls.domain.ConsoleAuditLogger"/>
</beans:constructor-arg>
</beans:bean>
<beans:bean id="aclService" class="org.springframework.security.acls.jdbc.JdbcMutableAclService">
<beans:constructor-arg ref="dataSource"/>
<beans:constructor-arg ref="lookupStrategy"/>
<beans:constructor-arg ref="aclCache"/>
</beans:bean>
</beans:beans>
This is the web.xml contains the filter mappings...
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="iClassified" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>iClassified</display-name>
<!-- Include this if you are using Hibernate -->
<filter>
<filter-name>Spring OpenEntityManagerInViewFilter</filter-name>
<filter-class>
org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>Spring OpenEntityManagerInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter- class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<resource-ref>
<description>
iClassified data source.
</description>
<res-ref-name>
jdbc/iclassifieddb
</res-ref-name>
<res-type>
javax.sql.DataSource
</res-type>
<res-auth>
Container
</res-auth>
</resource-ref>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/*Context.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
</web-app>
This is what i have as code and the above is what i got as error..
Please help and Thanks in advance...

Spring security - Access http session on successful login handler

I'm trying to access the HttpSession after logging in, using the successful handler - MySimpleUrlAuthenticationSuccessHandler - using request.getSession(false) , but it's null at this phase, any suggestions ?
Part of beans.xml:
<security:http auto-config="false"
entry-point-ref="authenticationEntryPoint">
<security:intercept-url pattern="/**" />
<security:custom-filter position="FORM_LOGIN_FILTER" ref="authenticationFilter" />
<security:remember-me />
<security:anonymous enabled="false" />
<security:session-management session-fixation-protection="none" />
</security:http>
<bean id="authenticationEntryPoint"
class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint" >
<constructor-arg type="java.lang.String" value="/login"/>
</bean>
<bean id="authenticationFilter"
class="com.me.filter.CustomAuthenticationFilter">
<constructor-arg type="java.lang.String" value="/login"/>
<property name="authenticationFailureHandler" ref="authenticationFailureHandler" />
<property name="authenticationSuccessHandler" ref="authenticationSuccessHandler" />
<property name="authenticationManager" ref="authenticationManager"/>
</bean>
<bean id="authenticationFailureHandler"
class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler">
<property name="defaultFailureUrl" value="/login/failure" />
</bean>
<bean id="authenticationSuccessHandler"
class="com.me.web.filter.MySimpleUrlAuthenticationSuccessHandler">
<property name="defaultTargetUrl" value="/login/success" />
</bean>
We should define a session strategy to make the filter create the session on successful authentication, so beans.xml changes are like this:
<bean id="authenticationFilter"
class="com.me.filter.CustomAuthenticationFilter">
<constructor-arg type="java.lang.String" value="/login"/>
<property name="authenticationFailureHandler" ref="authenticationFailureHandler" />
<property name="authenticationSuccessHandler" ref="authenticationSuccessHandler" />
<property name="authenticationManager" ref="authenticationManager"/>
<property name="sessionAuthenticationStrategy" ref="registerSessionStrategy" />
</bean>
<bean id="registerSessionStrategy" class="org.springframework.security.web.authentication.session.RegisterSessionAuthenticationStrategy">
<constructor-arg name="sessionRegistry" ref="sessionRegistry" />
</bean>
<bean id="sessionRegistry"
class="org.springframework.security.core.session.SessionRegistryImpl" />

Equivalent definition of <authentication-manager> in pre-namespace Spring 2.x

I have a Spring 3 application I use:
<authentication-manager>
<authentication-provider ref='myAuthenticationProvider'/>
</authentication-manager>
What would be the name space equivalent spring 2.
is because I login with my LDAP application with Spring 3 and want to implement the same method in spring 2
CODE spring-secutiy-ldap.xml
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.1.xsd">
<http auto-config="true">
<intercept-url pattern="/app/Out*" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<intercept-url pattern="/app/Login*" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<intercept-url pattern="/app/Out" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<intercept-url pattern="/app/**" access="IS_AUTHENTICATED_ANONYMOUSLY, ROLE_USER" />
</http>
<authentication-manager>
<authentication-provider ref="ldapAuthProvider"/>
</authentication-manager>
<!-- Server -->
<ldap-server id="ldapServer" url="ldap://${ldap.server.ip}:${ldap.server.port}/${ldap.server.root}"/>
<!-- Authenticator -->
<beans:bean class="org.springframework.security.ldap.authentication.BindAuthenticator" id="ldapBindAuthenticator">
<beans:constructor-arg ref="ldapServer"/>
<beans:property name="userSearch" ref="userSearch"/>
</beans:bean>
<beans:bean id="userSearch" class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch">
<beans:constructor-arg index="0" value="ou=people"/>
<beans:constructor-arg index="1" value="(uid={0})"/>
<beans:constructor-arg index="2" ref="ldapServer" />
</beans:bean>
<beans:bean class="org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator" id="ldapAuthoritiesPopulator">
<beans:constructor-arg ref="ldapServer"/>
<beans:constructor-arg value="${ldap.springrole.rdn}"/>
<beans:property name="groupRoleAttribute" value="${ldap.springrole.attribute}"/>
<beans:property name="rolePrefix" value="${ldap.springrole.prefix}"/>
<beans:property name="groupSearchFilter" value="(objectClass=organizationalRole)"/>
<beans:property name="searchSubtree" value="true" />
</beans:bean>
<beans:bean id="ldapAuthProvider" class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider">
<beans:constructor-arg ref="ldapBindAuthenticator"/>
<beans:constructor-arg ref="ldapAuthoritiesPopulator"/>
<beans:property name="userDetailsContextMapper" ref="ldapUserDetailsContextMapper"/>
</beans:bean>
<beans:bean id="ldapTemplate" class="org.springframework.ldap.core.LdapTemplate">
<beans:constructor-arg ref="ldapServer"/>
</beans:bean>
<beans:bean class="com.test.ladp.security.UserLdapMapper" id="ldapUserDetailsContextMapper">
<beans:property name="template" ref="ldapTemplate"/>
</beans:bean>
Exception :
Caused by: org.springframework.security.config.SecurityConfigurationException: No UserDetailsService registered.
at org.springframework.security.config.UserDetailsServiceInjectionBeanPostProcessor.getUserDetailsService(UserDetailsServiceInjectionBeanPostProcessor.java:110)
at org.springframework.security.config.UserDetailsServiceInjectionBeanPostProcessor.injectUserDetailsServiceIntoRememberMeServices(UserDetailsServiceInjectionBeanPostProcessor.java:55)
at org.springframework.security.config.UserDetailsServiceInjectionBeanPostProcessor.postProcessBeforeInitialization(UserDetailsServiceInjectionBeanPostProcessor.java:36)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:350)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1330)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)
... 69 more
The equivalent definition without namespace support for authentication manager should be as follows
<bean id="authenticationManager" class="org.springframework.security.authentication.ProviderManager">
<constructor-arg>
<list>
<ref bean="ldapAuthProvider" />
</list>
</constructor-arg>
</bean>
<bean id="ldapAuthProvider" class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider">
<constructor-arg ref="ldapBindAuthenticator"/>
<constructor-arg ref="ldapAuthoritiesPopulator"/>
<property name="userDetailsContextMapper" ref="ldapUserDetailsContextMapper"/>
</bean>
<bean id="userDetailsService" class="org.springframework.security.ldap.userdetails. LdapUserDetailsService">
<constructor-arg ref="userSearch" />
<constructor-arg ref="ldapAuthoritiesPopulator" />
<property name="userDetailsContextMapper" ref="ldapUserDetailsContextMapper"/>
</bean>

Why isn't hibernate creating my tables from hbm.xmls?

I have several .hbm.xml mapping files set up in Spring, and I can tell from the logs that Spring sees them and does something with them, but no tables are created in the DB.
Bean setup:
<beans:bean id="dataSourceEmbedded" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<beans:property name="driverClassName" value="org.h2.Driver" />
<beans:property name="url" value="jdbc:h2:~/myDbName" />
<beans:property name="username" value="sa" />
<beans:property name="password" value="" />
</beans:bean>
<beans:bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
p:dataSource-ref="dataSourceEmbedded">
<beans:property name="mappingLocations">
<beans:list>
<beans:value>classpath:path/to/schemas/Page.hbm.xml</beans:value>
<beans:value>classpath:path/to/schemas/Navigation.hbm.xml</beans:value>
</beans:list>
</beans:property>
<beans:property name="hibernateProperties">
<beans:value>
hibernate.show_sql=true
hibernate.dialect=${hibernate.dialect}
hibernate.hbmToDdlAuto=create
</beans:value>
</beans:property>
</beans:bean>
I know that the path to the Page and Navigation mapping files is correct - an error is thrown if it's not, and I can see the fields being mapped during the tomcat startup:
DEBUG: org.hibernate.cfg.Configuration - Processing hbm.xml files
INFO : org.hibernate.cfg.HbmBinder - Mapping class: Page -> pages
DEBUG: org.hibernate.cfg.HbmBinder - Mapped property: Page ID -> pageid
DEBUG: org.hibernate.cfg.HbmBinder - Mapped property: title -> title
Similarly, the database is clearly accessed / locked while tomcat is loading, so something is happening in there! But once it's loaded and I try to query it or inspect it, no tables exist.
Question: Why aren't my tables being created / what have I done wrong?
The property you used is wrong, it should be 'hibernate.hbm2ddl.auto' instead of 'hibernate.hbmToDdlAuto'... However instead of that you can also set the schemaUpdate property of the LocalSessionFactoryBean.
<beans:bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
p:dataSource-ref="dataSourceEmbedded">
<beans:property name="mappingLocations">
<beans:list>
<beans:value>classpath:path/to/schemas/Page.hbm.xml</beans:value>
<beans:value>classpath:path/to/schemas/Navigation.hbm.xml</beans:value>
</beans:list>
</beans:property>
<beans:property name="schemaUpdate" value="true" />
<beans:property name="hibernateProperties">
<beans:value>
hibernate.show_sql=true
hibernate.dialect=${hibernate.dialect}
</beans:value>
</beans:property>
</beans:bean>
Related answer/info: Hibernate hbm2ddl.auto possible values and what they do?
Correct property name is hibernate.hbm2ddl.auto

Resources