Showing posts with label Spring. Show all posts
Showing posts with label Spring. Show all posts

Thursday, 27 June 2013

Cron in Spring


STEP [1] create a synchronized job processor


import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import org.springframework.data.jpa.domain.AbstractPersistable;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallbackWithoutResult;
import org.springframework.transaction.support.TransactionOperations;

public abstract class JobProcessorSynchronized<T extends AbstractPersistable<Long>> {

private final TransactionOperations transactionOperations;

private final ExecutorService executorService = Executors.newSingleThreadExecutor();

private Long lastJobId;

public JobProcessorSynchronized(TransactionOperations transactionOperations) {
this.transactionOperations = transactionOperations;

}

public abstract List<T> getJobsTobeExcecuted(Long lastJobId);

protected abstract void processJob(T job);

public void process() {
this.lastJobId = new Long(0);
processInBackground();
}

public void processInBackground() {
executorService.execute(new Runnable() {

@Override
public void run() {

transactionOperations.execute(new TransactionCallbackWithoutResult() {

@Override
protected void doInTransactionWithoutResult(TransactionStatus status) {
List<T> jobs = getJobsTobeExcecuted(lastJobId);
for (T job : jobs) {
processJob(job);
lastJobId = job.getId();
}

status.flush();

if (jobs.size() > 0) {
executorService.execute(new Runnable() {

@Override
public void run() {
processInBackground();

}
});
}

}
});

}
});
}
}

@Inject transactionOperations via spring-context.xml

<constructor-arg>
<bean class="org.springframework.transaction.support.TransactionTemplate">
<property name="transactionManager" ref="transactionManager" />
<property name="propagationBehaviorName" value="PROPAGATION_REQUIRES_NEW" />
</bean>
</constructor-arg>



STEP [2] Define class and method for job
public class BloodoverflowJob extends JobProcessorSynchronized<Reminder>{


      @Override
public List<Reminder> getJobsTobeExcecuted(Long lastJobId)   {
return list; //with @Lock(LockModeType.PESSIMISTIC_WRITE)
}

      @Override
      public void processJob(){
         //logic here
      }
}


STEP [3] Add the following content to spring context

<task:annotation-driven executor="asyncExecutor" />
<task:executor id="asyncExecutor" pool-size="5" />
<task:scheduler id="bloodoverflowRemindSchedular" pool-size="1" />
<task:scheduled-tasks scheduler="bloodoverflowRemindScheduler">

<task:scheduled ref="bloodoverflowJob" method="process" cron="${bloodoverflowJob.cron}" />
</task:scheduled-tasks>


process is a method of bean bloodoverflowJob.

STEP [4] Define job cron expression in properties file
# Fire at 12:00 PM (noon) every day
bloodoverflowJob.cron = 0 0 12 * * ?

OR

# Fire at every 05 minutes
bloodoverflowJob.cron = 0 0 0/05 * * *


Reference
http://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm

Cluster job synchronization with Spring AOP and memcached, http://blog.oio.de/2013/07/03/cluster-job-synchronization-with-spring-aop-and-memcached/

Java ExecutorService, http://www.itcuties.com/java/executorservice/

Monday, 18 February 2013

Spring SOAP Server


STEP 1

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "ServiceRequest", namespace = EccountServiceEndpoint.NAMESPACE_URI)
@XmlAccessorType(XmlAccessType.FIELD)
public class ServiceRequest implements Serializable {

private static final long serialVersionUID = 1L;

public static final String NAMESPACE = "http://www.eccount.com/eccount/ews/schemas";

private String username;

private String password;

private String serviceCode;

private List<EccountMapEntry> requestFields;
}


STEP 2

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "EccountMapEntry", namespace = EccountServiceEndpoint.NAMESPACE_URI)
@XmlAccessorType(XmlAccessType.FIELD)
public class EccountMapEntry implements Serializable {

private static final long serialVersionUID = -1068419604611623560L;

public static final String NAMESPACE = "http://www.eccount.com/eccount/ews/schemas";

private String key;
private String value;
}


STEP 3

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "ServiceResponse", namespace = EccountServiceEndpoint.NAMESPACE_URI)
@XmlAccessorType(XmlAccessType.FIELD)
public class ServiceResponse implements Serializable {
private static final long serialVersionUID = 1L;

public static final String NAMESPACE = "http://www.eccount.com/eccount/ews/schemas";

private String serviceInfoId;

private String responseCode;

private String responseMessage;

private EccountServiceStatus status;

private List<EccountMapEntry> responseFields;
}


STEP 4

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "EccountServiceStatus", namespace = EccountServiceEndpoint.NAMESPACE_URI)
@XmlAccessorType(XmlAccessType.FIELD)
public enum EccountServiceStatus {
SUCCESS, FAILURE
}



STEP 5


<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.eccount.com/eccount/ews/schemas"
targetNamespace="http://www.eccount.com/eccount/ews/schemas">
<element name="ServiceRequest">
<complexType>
<sequence>
<element name="username" type="string"></element>
<element name="password" type="string"></element>
<element name="serviceCode" type="string"></element>
<element name="originatingUniqueId" type="string"></element>
<element name="requestFields" type="tns:EccountMapEntry" minOccurs="0" maxOccurs="unbounded"></element>
</sequence>
</complexType>
</element>
<element name="ServiceResponse">
<complexType>
<sequence>
<element name="serviceInfoId" type="string" minOccurs="0"></element>
<element name="status" type="tns:EccountServiceStatus"></element>
<element name="responseCode" type="string"></element>
<element name="responseMessage" type="string"></element>
<element name="responseFields" type="tns:EccountMapEntry" minOccurs="0" maxOccurs="unbounded"></element>
</sequence>
</complexType>
</element>

<complexType name="EccountMapEntry">
<sequence>
<element name="key" type="string" />
<element name="value" type="string" />
</sequence>
</complexType>

<simpleType name="EccountServiceStatus">
<restriction base="string">
<enumeration value="SUCCESS" />
<enumeration value="FAILURE" />
</restriction>
</simpleType>

</schema>



STEP 6  implementing the @Endpoint
Implement Endpoints to handle incoming XML messages. 
An @Endpoint is typically created by annotating a class with the @Endpoint annotation.

The @PayloadRoot annotation tells Spring-WS that the handleServiceRequest() method is suitable for handling XML messages.

import org.springframework.ws.server.endpoint.annotation.Endpoint;
import org.springframework.ws.server.endpoint.annotation.PayloadRoot;
import org.springframework.ws.server.endpoint.annotation.RequestPayload;
import org.springframework.ws.server.endpoint.annotation.ResponsePayload;

@Endpoint
public class EccountServiceEndpoint {

public static final String NAMESPACE_URI = "http://www.eccount.com/eccount/ews/schemas";

private final IWsRequestProcessingApi wsRequestProcessingApi;

public EccountServiceEndpoint(IWsRequestProcessingApi wsRequestProcessingApi) {
this.wsRequestProcessingApi = wsRequestProcessingApi;
}

@PayloadRoot(namespace = NAMESPACE_URI, localPart = "ServiceRequest")
public @ResponsePayload
ServiceInfoResponse handleServiceRequest(@RequestPayload ServiceRequest request) {

try {
return wsRequestProcessingApi.processServiceInfo(request);
} catch (Exception exception) {
ServiceResponse response = new ServiceResponse();
//set response message
return response;
}
}
}


STEP 7 configure ws-context.xml and publishing the WSDL
configure the above classes in ws-context.xml Spring XML configuration file.


<?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:context="http://www.springframework.org/schema/context"
xmlns:sws="http://www.springframework.org/schema/web-services"
xmlns:oxm="http://www.springframework.org/schema/oxm" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  http://www.springframework.org/schema/web-services http://www.springframework.org/schema/web-services/web-services-2.0.xsd
  http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm-3.0.xsd
  http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<sws:annotation-driven />

<sws:dynamic-wsdl id="eccountservice"
portTypeName="EccountService" locationUri="/ews/eccountservice"
targetNamespace="http://www.eccount.com/eccount/ews/schemas">
<sws:xsd location="classpath:/WEB-INF/xsds/ews.xsd" />
</sws:dynamic-wsdl>

<oxm:jaxb2-marshaller id="marshaller">
<oxm:class-to-be-bound
name=" com.zazzercode.eccount.server.ws.schemas.ServiceRequest" />
<oxm:class-to-be-bound
name="com.zazzercode.eccount.server.ws.schemas.ServiceResponse" />
<oxm:class-to-be-bound
name="com.zazzercode.eccount.server.ws.schemas.EccountMapEntry" />
<oxm:class-to-be-bound
name="com.zazzercode.eccount.server.ws.schemas.EccountServiceStatus" />
</oxm:jaxb2-marshaller>

<bean id="eccountServiceEndpoint"
class="com.zazzercode.eccount.server.ws.endpoints.EccountServiceEndpoint">
<constructor-arg ref="wsRequestProcessingApi" />
</bean>

</beans>



REFERENCES
3.6. Implementing the Endpoint, http://static.springsource.org/spring-ws/sites/2.0/reference/html/tutorial.html

Spring Web Services: SOAP vs. REST by Sam Brannen, http://www.slideshare.net/sbrannen/spring-web-services-soap-vs-rest

Sunday, 16 September 2012

Document base ... does not exist or is not a readable directory

I am having problems trying to get a simple Spring Controller to run on Tomcat 7.0 on kubuntu. I am using maven.

Error 


Sep 17, 2012 12:08:14 PM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /home/prayag/jdk1.6.0_23/jre/lib/i386/client:/home/prayag/jdk1.6.0_23/jre/lib/i386:/home/prayag/jdk1.6.0_23/jre/../lib/i386:/home/prayag/jdk1.6.0_23/jre/lib/i386/client:/home/prayag/jdk1.6.0_23/jre/lib/i386::/usr/java/packages/lib/i386:/lib:/usr/lib
Sep 17, 2012 12:08:15 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.j2ee.server:RestServer' did not find a matching property.
Sep 17, 2012 12:08:15 PM org.apache.coyote.AbstractProtocolHandler init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
Sep 17, 2012 12:08:15 PM org.apache.coyote.AbstractProtocolHandler init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
Sep 17, 2012 12:08:15 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 641 ms
Sep 17, 2012 12:08:15 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Sep 17, 2012 12:08:15 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.12
Sep 17, 2012 12:08:15 PM org.apache.catalina.core.StandardContext resourcesStart
SEVERE: Error starting static Resources
java.lang.IllegalArgumentException: Document base /home/prayag/workspace_java/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/RestServer does not exist or is not a readable directory
 at org.apache.naming.resources.FileDirContext.setDocBase(FileDirContext.java:140)
 at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4814)
 at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4994)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
 at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1033)
 at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:774)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
 at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1033)
 at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:291)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
 at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
 at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:727)
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
 at org.apache.catalina.startup.Catalina.start(Catalina.java:620)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:303)
 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:431)
Sep 17, 2012 12:08:15 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: Error in resourceStart()
Sep 17, 2012 12:08:15 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: Error getConfigured
Sep 17, 2012 12:08:15 PM org.apache.catalina.core.StandardContext startInternal
SEVERE: Context [/RestServer] startup failed due to previous errors
Sep 17, 2012 12:08:15 PM org.apache.coyote.AbstractProtocolHandler start
INFO: Starting ProtocolHandler ["http-bio-8080"]
Sep 17, 2012 12:08:15 PM org.apache.coyote.AbstractProtocolHandler start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Sep 17, 2012 12:08:15 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 371 ms



DIAGNOSIS
Hack 1 : Check eclipse .metadata/.plugins
prayag@Prayag:~$ ls -la /home/prayag/workspace_java/.metadata/.plugins/org.eclipse.wst.server.core

total 32
drwxrwxrwx  3 prayag prayag 4096 Nov 27 11:22 .
drwxrwxrwx 98 prayag prayag 4096 Nov 26 16:48 ..
-rwxrwxrwx  1 prayag prayag  424 Sep 25 17:44 modules.xml
-rwxrwxrwx  1 prayag prayag   67 Nov 22 14:56 monitors.xml
drwxrwxrwx  2 prayag prayag 4096 Nov 27 11:22 publish
-rwxrwxrwx  1 prayag prayag   71 Nov 27 11:22 publish.xml
-rwxrwxrwx  1 prayag prayag   66 Nov 27 11:22 servers.xml
-rwxrwxrwx  1 prayag prayag   75 Nov 27 11:22 tmp-data.xml



Hack 2 :  Check .project file

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
  <name>RestServer</name>
  <comment>NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse.</comment>
  <projects/>
  <buildSpec>
    <buildCommand>
      <name>org.eclipse.jdt.core.javabuilder</name>
    </buildCommand>
    <buildCommand>
      <name>org.eclipse.m2e.core.maven2Builder</name>
    </buildCommand>
    <buildCommand>
      <name>org.springframework.ide.eclipse.core.springbuilder</name>
    </buildCommand>
    <buildCommand>
      <name>com.google.gdt.eclipse.core.webAppProjectValidator</name>
    </buildCommand>
  </buildSpec>
  <natures>
    <nature>org.eclipse.jdt.core.javanature</nature>
    <nature>org.springframework.ide.eclipse.core.springnature</nature>
    <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
    <nature>org.eclipse.m2e.core.maven2Nature</nature>
    <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
  </natures>
</projectDescription>


Hack 3 : Check eclipse workspace Servers folder
prayag@Prayag:~/workspace_java$ ls -la Servers/
total 16
drwxrwxr-x  3 prayag prayag 4096 Nov 27 11:22 .
drwxrwxr-x 16 prayag prayag 4096 Nov 27 10:31 ..
-rw-rw-r--  1 prayag prayag  200 May 11  2012 .project
drwxrwxr-x  2 prayag prayag 4096 Nov 26 16:46 .settings

Check .project file inside Servers folder
prayag@Prayag:~/workspace_java$ sudo vi Servers/.project
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
        <name>Servers</name>
        <comment></comment>
        <projects>
        </projects>
        <buildSpec>
        </buildSpec>
        <natures>
        </natures>
</projectDescription>


Solution
prayag@Prayag:~/workspace_java$ rm -rf Servers/

restart server

References
Unable to “Run on Server” a webapp from Eclipse, available at http://stackoverflow.com/a/12292469/432903

Problem running simple Servlet on Tomcat, at http://www.coderanch.com/t/86668/Tomcat/running-simple-Servlet-Tomcat

Monday, 9 July 2012

Access is denied (user is anonymous) spring error

I am getting the following error after successfully running the server but while logging in. The main page is shown partially and error is thrown.

PROBLEM
12:21:29.792 ["http-bio-8080"-exec-2] DEBUG o.s.s.w.a.ExceptionTranslationFilter - Access is denied (user is anonymous); redirecting to authentication entry point
org.springframework.security.access.AccessDeniedException: Access is denied
at org.springframework.security.access.vote.AffirmativeBased.decide(AffirmativeBased.java:71) ~[spring-security-core-3.1.0.RC2.jar:3.1.0.RC2]
at org.springframework.security.access.intercept.AbstractSecurityInterceptor.beforeInvocation(AbstractSecurityInterceptor.java:204) ~[spring-security-core-3.1.0.RC2.jar:3.1.0.RC2]
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:114) ~[spring-security-web-3.1.0.RC2.jar:3.1.0.RC2]
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) ~[spring-security-web-3.1.0.RC2.jar:3.1.0.RC2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:340) [spring-security-web-3.1.0.RC2.jar:3.1.0.RC2]
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:95) ~[spring-security-web-3.1.0.RC2.jar:3.1.0.RC2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:340) [spring-security-web-3.1.0.RC2.jar:3.1.0.RC2]
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100) [spring-security-web-3.1.0.RC2.jar:3.1.0.RC2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:340) [spring-security-web-3.1.0.RC2.jar:3.1.0.RC2]
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:79) [spring-security-web-3.1.0.RC2.jar:3.1.0.RC2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:340) [spring-security-web-3.1.0.RC2.jar:3.1.0.RC2]
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) [spring-security-web-3.1.0.RC2.jar:3.1.0.RC2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:340) [spring-security-web-3.1.0.RC2.jar:3.1.0.RC2]
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35) [spring-security-web-3.1.0.RC2.jar:3.1.0.RC2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:340) [spring-security-web-3.1.0.RC2.jar:3.1.0.RC2]
at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:119) [spring-security-web-3.1.0.RC2.jar:3.1.0.RC2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:340) [spring-security-web-3.1.0.RC2.jar:3.1.0.RC2]
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187) [spring-security-web-3.1.0.RC2.jar:3.1.0.RC2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:340) [spring-security-web-3.1.0.RC2.jar:3.1.0.RC2]
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) [spring-security-web-3.1.0.RC2.jar:3.1.0.RC2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:340) [spring-security-web-3.1.0.RC2.jar:3.1.0.RC2]
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) [spring-security-web-3.1.0.RC2.jar:3.1.0.RC2]
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:340) [spring-security-web-3.1.0.RC2.jar:3.1.0.RC2]
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:175) [spring-security-web-3.1.0.RC2.jar:3.1.0.RC2]
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237) [spring-web-3.0.5.RELEASE.jar:3.0.5.RELEASE]
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167) [spring-web-3.0.5.RELEASE.jar:3.0.5.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) [catalina.jar:7.0.12]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) [catalina.jar:7.0.12]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240) [catalina.jar:7.0.12]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164) [catalina.jar:7.0.12]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462) [catalina.jar:7.0.12]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) [catalina.jar:7.0.12]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) [catalina.jar:7.0.12]
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562) [catalina.jar:7.0.12]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) [catalina.jar:7.0.12]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395) [catalina.jar:7.0.12]
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250) [tomcat-coyote.jar:7.0.12]
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188) [tomcat-coyote.jar:7.0.12]
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166) [tomcat-coyote.jar:7.0.12]
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) [tomcat-coyote.jar:7.0.12]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [na:1.7.0_04]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [na:1.7.0_04]
at java.lang.Thread.run(Thread.java:722) [na:1.7.0_04]
12:21:29.803 ["http-bio-8080"-exec-2] DEBUG o.s.s.w.s.HttpSessionRequestCache - DefaultSavedRequest added to Session: DefaultSavedRequest[http://localhost:8080/main?gwt.codesvr=127.0.0.1:9997]




REFERENCES