Skip to content
This repository has been archived by the owner on Dec 15, 2021. It is now read-only.

Example Project for SPR-9575 #29

Merged
merged 2 commits into from
Jul 13, 2012
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
239 changes: 239 additions & 0 deletions SPR-9575/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,239 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework.issues</groupId>
<artifactId>SPR-9575</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Spring MVC Issue Reproduction Project</name>
<packaging>war</packaging>

<properties>
<java-version>1.6</java-version>
<org.springframework-version>3.1.2.RELEASE</org.springframework-version>
<org.slf4j-version>1.6.1</org.slf4j-version>
</properties>

<dependencies>
<!-- Spring Framework -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
<exclusions>
<!-- Exclude Commons Logging in favor of SLF4j -->
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework-version}</version>
</dependency>

<!-- Logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${org.slf4j-version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
<scope>runtime</scope>
</dependency>

<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>12.0</version>
</dependency>

<dependency>
<groupId>ro.isdc.wro4j</groupId>
<artifactId>wro4j-core</artifactId>
<version>1.4.6</version>
</dependency>
<dependency>
<groupId>ro.isdc.wro4j</groupId>
<artifactId>wro4j-extensions</artifactId>
<version>1.4.6</version>
</dependency>

<!-- Servlet API -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>

<!-- JSP API and JSTL -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>




<!-- Apache Tiles
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-jsp</artifactId>
<version>2.1.3</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging-api</artifactId>
</exclusion>
</exclusions>
</dependency>
-->

<!-- JSR 303 with Hibernate Validator
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.0.0.GA</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.1.0.Final</version>
</dependency>
-->

<!-- Joda Time Library
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time-jsptags</artifactId>
<version>1.0.2</version>
<scope>runtime</scope>
</dependency>
-->

<!-- Apache Commons File Upload
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.0.1</version>
</dependency>
-->

<!-- Jackson JSON Processor-->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.8.1</version>
</dependency>


<!-- Rome Atom+RSS
<dependency>
<groupId>rome</groupId>
<artifactId>rome</artifactId>
<version>1.0</version>
</dependency>
-->

<!-- Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8</version>
<scope>test</scope>
</dependency>
</dependencies>

<repositories>
<repository>
<id>spring-maven-snapshot</id>
<name>Springframework Maven Snapshot Repository</name>
<url>http://repo.springsource.org/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>

<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java-version}</source>
<target>${java-version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>install</id>
<phase>install</phase>
<goals>
<goal>sources</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.8</version>
<configuration>
<downloadSources>true</downloadSources>
<downloadJavadocs>false</downloadJavadocs>
<wtpversion>2.0</wtpversion>
</configuration>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<includes>
<include>**/*Tests.java</include>
</includes>
<excludes>
<exclude>**/*Abstract*.java</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>

</project>

Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package org.springframework.issues;

import java.util.concurrent.Future;

import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.AsyncResult;
import org.springframework.stereotype.Component;



@Component("asyncProcess")
public class AsyncProcess implements AsyncProcessInterface {

/* (non-Javadoc)
* @see com.solutionary.service.AsyncProcessInterface#findBalanceAsync(java.lang.String)
*/
//("portalAsyncExecutor")

@Async("portalPoolTaskExecutor")
public Future<String> findBalanceAsync(final String account) {
long startTime = System.currentTimeMillis();

String threadName = Thread.currentThread().getName();


long t= System.currentTimeMillis();
long end = t+10000;//15 seconds
if (account.equals("portlet2")){
end = t+45000;
}
while(System.currentTimeMillis() < end) {
// do something
// pause to avoid churning

}
long endTime = System.currentTimeMillis();
String balance = Long.valueOf(endTime).toString()+" : "+threadName;
System.out.println(threadName+" completes Async processing : "
+ (endTime - startTime) / 1000 + " seconds for " + account);
return new AsyncResult<String>(balance);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package org.springframework.issues;

import java.util.concurrent.Future;

public interface AsyncProcessInterface {


public abstract Future<String> findBalanceAsync(final String account);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package org.springframework.issues;


import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;




@Service("asyncService")
public class AsyncService {
//@Qualifier("asyncProcessCopy")
@Autowired
@Qualifier("asyncProcess")
private AsyncProcessInterface asyncProcess;



@Autowired
@Qualifier("portletCache")
private PortletCacheInterface portletCache;

public ResultDto findBalanceAsync(String targetDiv) throws Exception {

Future<String> future;
ResultDto dto = new ResultDto();
future = portletCache.get(targetDiv);
if (future==null) {
future = asyncProcess.findBalanceAsync(targetDiv);
portletCache.put(targetDiv, future);
}
String result = "";
try {
result = future.get(3, TimeUnit.SECONDS);
dto.setContent(result);
dto.setProcessCode(ResultCode.COMPLETE);
portletCache.remove(targetDiv);
} catch (InterruptedException e) {
e.printStackTrace();
dto.setProcessCode(ResultCode.ERROR);
} catch (ExecutionException e) {
e.printStackTrace();
dto.setProcessCode(ResultCode.ERROR);
} catch (TimeoutException e) {
result = "Processing ...";
dto.setContent(result);
dto.setProcessCode(ResultCode.PROCESSING);

}
long size = portletCache.getSize();
System.out.println("Cache Size: "+size+"; Result: "+result);

return dto;
}
}
Loading