Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Minor fixes #11

Merged
merged 4 commits into from
Mar 29, 2013
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
6 changes: 6 additions & 0 deletions tapestry/hello/.gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,7 @@
target
build
.gradle
*.iml
*.ipr
*.iws

15 changes: 5 additions & 10 deletions tapestry/hello/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ description = "hello application"
apply plugin: "war"
apply plugin: "java"
apply plugin: "jetty"
apply plugin: "idea"

sourceCompatibility = "1.5"
targetCompatibility = "1.5"
Expand All @@ -15,15 +16,6 @@ repositories {

// All things JBoss/Hibernate
mavenRepo name: "JBoss", url: "http://repository.jboss.org/nexus/content/groups/public/"

// For stable versions of the tapx libraries
mavenRepo name: "HLS", url: "http://howardlewisship.com/repository/"

// For non-stable versions of the tapx libraries
mavenRepo name: "HLS Snapshots", url: "http://howardlewisship.com/snapshot-repository/"

// For access to Apache Staging (Preview) packages
mavenRepo name: "Apache Staging", url: "https://repository.apache.org/content/groups/staging"
}

// This simulates Maven's "provided" scope, until it is officially supported by Gradle
Expand All @@ -45,7 +37,10 @@ sourceSets {

dependencies {

compile "org.apache.tapestry:tapestry-core:5.3.6"
compile "mysql:mysql-connector-java:5.1.19"
compile "org.hibernate:hibernate-core:3.6.3.Final"
compile "org.apache.tapestry:tapestry-hibernate:5.3.6"
compile "com.fasterxml.jackson.core:jackson-databind:2.1.4"

// This adds automatic compression of JavaScript and CSS in production mode:
compile "org.apache.tapestry:tapestry-yuicompressor:5.3.6"
Expand Down
74 changes: 1 addition & 73 deletions tapestry/hello/src/main/java/hello/services/AppModule.java
Original file line number Diff line number Diff line change
@@ -1,17 +1,8 @@
package hello.services;

import java.io.IOException;

import org.apache.tapestry5.*;
import org.apache.tapestry5.SymbolConstants;
import org.apache.tapestry5.ioc.MappedConfiguration;
import org.apache.tapestry5.ioc.OrderedConfiguration;
import org.apache.tapestry5.ioc.ServiceBinder;
import org.apache.tapestry5.ioc.annotations.Local;
import org.apache.tapestry5.services.Request;
import org.apache.tapestry5.services.RequestFilter;
import org.apache.tapestry5.services.RequestHandler;
import org.apache.tapestry5.services.Response;
import org.slf4j.Logger;

/**
* This module is automatically included as part of the Tapestry IoC Registry, it's a good place to
Expand Down Expand Up @@ -51,67 +42,4 @@ public static void contributeApplicationDefaults(
// the first locale name is the default when there's no reasonable match).
configuration.add(SymbolConstants.SUPPORTED_LOCALES, "en");
}


/**
* This is a service definition, the service will be named "TimingFilter". The interface,
* RequestFilter, is used within the RequestHandler service pipeline, which is built from the
* RequestHandler service configuration. Tapestry IoC is responsible for passing in an
* appropriate Logger instance. Requests for static resources are handled at a higher level, so
* this filter will only be invoked for Tapestry related requests.
* <p/>
* <p/>
* Service builder methods are useful when the implementation is inline as an inner class
* (as here) or require some other kind of special initialization. In most cases,
* use the static bind() method instead.
* <p/>
* <p/>
* If this method was named "build", then the service id would be taken from the
* service interface and would be "RequestFilter". Since Tapestry already defines
* a service named "RequestFilter" we use an explicit service id that we can reference
* inside the contribution method.
*/
public RequestFilter buildTimingFilter(final Logger log)
{
return new RequestFilter()
{
public boolean service(Request request, Response response, RequestHandler handler)
throws IOException
{
long startTime = System.currentTimeMillis();

try
{
// The responsibility of a filter is to invoke the corresponding method
// in the handler. When you chain multiple filters together, each filter
// received a handler that is a bridge to the next filter.

return handler.service(request, response);
} finally
{
long elapsed = System.currentTimeMillis() - startTime;

log.info(String.format("Request time: %d ms", elapsed));
}
}
};
}

/**
* This is a contribution to the RequestHandler service configuration. This is how we extend
* Tapestry using the timing filter. A common use for this kind of filter is transaction
* management or security. The @Local annotation selects the desired service by type, but only
* from the same module. Without @Local, there would be an error due to the other service(s)
* that implement RequestFilter (defined in other modules).
*/
public void contributeRequestHandler(OrderedConfiguration<RequestFilter> configuration,
@Local
RequestFilter filter)
{
// Each contribution to an ordered configuration has a name, When necessary, you may
// set constraints to precisely control the invocation order of the contributed filter
// within the pipeline.

configuration.add("Timing", filter);
}
}