From 64253bcb4f3e6af8028e432efb5962463585f751 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sat, 11 Sep 2010 14:28:10 +0200 Subject: [PATCH] using google guice instead of weld --- pom.xml | 9 +++ scm-webapp/pom.xml | 48 +++++++---- .../main/java/sonia/scm/ContextListener.java | 80 +++++++++++++++++++ .../resources/AuthenticationResource.java | 6 +- .../scm/api/rest/resources/GroupResource.java | 3 - .../rest/resources/RepositoryResource.java | 2 - .../sonia/scm/security/SecurityFilter.java | 4 +- scm-webapp/src/main/webapp/WEB-INF/beans.xml | 21 ----- scm-webapp/src/main/webapp/WEB-INF/web.xml | 44 ++++------ 9 files changed, 139 insertions(+), 78 deletions(-) create mode 100644 scm-webapp/src/main/java/sonia/scm/ContextListener.java delete mode 100644 scm-webapp/src/main/webapp/WEB-INF/beans.xml diff --git a/pom.xml b/pom.xml index fe5c9db156..640dff1927 100644 --- a/pom.xml +++ b/pom.xml @@ -17,11 +17,20 @@ + java.net2 Repository hosting the jee6 artifacts http://download.java.net/maven/2 + + + guice-maven + guice maven + http://guiceyfruit.googlecode.com/svn/repo/releases + + + diff --git a/scm-webapp/pom.xml b/scm-webapp/pom.xml index 04a31d8a83..6fb715e8eb 100644 --- a/scm-webapp/pom.xml +++ b/scm-webapp/pom.xml @@ -19,9 +19,9 @@ - javax - javaee-web-api - 6.0 + javax.servlet + servlet-api + 2.5 provided @@ -40,44 +40,60 @@ com.sun.jersey jersey-core - 1.1.0-ea - provided + ${jersey.version} com.sun.jersey jersey-json - 1.1.0-ea - provided + ${jersey.version} com.sun.jersey jersey-bundle - 1.1.0-ea - provided + ${jersey.version} + + + + com.sun.jersey.contribs + jersey-guice + ${jersey.version} + + + + com.google.inject + guice + 2.0 + + + + com.google.inject.extensions + guice-servlet + 2.0 + - org.apache.maven.plugins - maven-war-plugin - 2.1-beta-1 - - false - + org.mortbay.jetty + maven-jetty-plugin + 6.1.25 scm-webapp - + + 1.4-ea06 + + diff --git a/scm-webapp/src/main/java/sonia/scm/ContextListener.java b/scm-webapp/src/main/java/sonia/scm/ContextListener.java new file mode 100644 index 0000000000..f09708fa9a --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/ContextListener.java @@ -0,0 +1,80 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + + + +package sonia.scm; + +//~--- non-JDK imports -------------------------------------------------------- + +import com.google.inject.Guice; +import com.google.inject.Injector; +import com.google.inject.servlet.GuiceServletContextListener; +import com.google.inject.servlet.ServletModule; + +import sonia.scm.api.rest.UriExtensionsConfig; +import sonia.scm.security.Authenticator; +import sonia.scm.security.DemoAuthenticator; + +//~--- JDK imports ------------------------------------------------------------ + +import com.sun.jersey.api.core.PackagesResourceConfig; +import com.sun.jersey.api.core.ResourceConfig; +import com.sun.jersey.guice.spi.container.servlet.GuiceContainer; +import com.sun.jersey.spi.container.servlet.ServletContainer; + +import java.util.HashMap; +import java.util.Map; + +/** + * + * @author Sebastian Sdorra + */ +public class ContextListener extends GuiceServletContextListener +{ + + /** Field description */ + public static final String REST_MAPPING = "/api/rest/*"; + + /** Field description */ + public static final String REST_PACKAGE = "sonia.scm.api.rest"; + + //~--- get methods ---------------------------------------------------------- + + /** + * Method description + * + * + * @return + */ + @Override + protected Injector getInjector() + { + return Guice.createInjector(new ServletModule() + { + @Override + protected void configureServlets() + { + bind(Authenticator.class).to(DemoAuthenticator.class); + + Map params = new HashMap(); + + /* + * params.put("com.sun.jersey.spi.container.ContainerRequestFilters", + * "com.sun.jersey.api.container.filter.LoggingFilter"); + * params.put("com.sun.jersey.spi.container.ContainerResponseFilters", + * "com.sun.jersey.api.container.filter.LoggingFilter"); + * params.put("com.sun.jersey.config.feature.Trace", "true"); + * params.put("com.sun.jersey.config.feature.TracePerRequest", "true"); + */ + params.put(ResourceConfig.FEATURE_REDIRECT, Boolean.TRUE.toString()); + params.put(ServletContainer.RESOURCE_CONFIG_CLASS, + UriExtensionsConfig.class.getName()); + params.put(PackagesResourceConfig.PROPERTY_PACKAGES, REST_PACKAGE); + serve(REST_MAPPING).with(GuiceContainer.class, params); + } + }); + } +} diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AuthenticationResource.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AuthenticationResource.java index 8854b964a8..ee44fd6e49 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AuthenticationResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/AuthenticationResource.java @@ -9,6 +9,8 @@ package sonia.scm.api.rest.resources; //~--- non-JDK imports -------------------------------------------------------- +import com.google.inject.Inject; + import sonia.scm.SCMContext; import sonia.scm.ScmState; import sonia.scm.User; @@ -17,9 +19,6 @@ import sonia.scm.security.Authenticator; //~--- JDK imports ------------------------------------------------------------ -import javax.inject.Inject; -import javax.inject.Singleton; - import javax.servlet.http.HttpServletRequest; import javax.ws.rs.FormParam; @@ -36,7 +35,6 @@ import javax.ws.rs.core.Response; * * @author Sebastian Sdorra */ -@Singleton @Path("authentication") @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) public class AuthenticationResource diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/GroupResource.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/GroupResource.java index 350b373aa2..1c42b3a488 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/GroupResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/GroupResource.java @@ -16,8 +16,6 @@ import sonia.scm.group.Group; import java.util.Collection; import java.util.LinkedHashMap; -import javax.inject.Singleton; - import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; @@ -26,7 +24,6 @@ import javax.ws.rs.core.MediaType; * * @author Sebastian Sdorra */ -@Singleton @Path("groups") @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) public class GroupResource extends AbstractResource diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryResource.java b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryResource.java index 8cb48ed483..0c98cb2c29 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/resources/RepositoryResource.java @@ -18,7 +18,6 @@ import java.util.Collection; import java.util.HashMap; import java.util.LinkedHashMap; -import javax.inject.Singleton; import javax.ws.rs.Path; import javax.ws.rs.Produces; @@ -28,7 +27,6 @@ import javax.ws.rs.core.MediaType; * * @author Sebastian Sdorra */ -@Singleton @Path("repositories") @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) public class RepositoryResource extends AbstractResource diff --git a/scm-webapp/src/main/java/sonia/scm/security/SecurityFilter.java b/scm-webapp/src/main/java/sonia/scm/security/SecurityFilter.java index 15a1341cfa..d338366ebc 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/SecurityFilter.java +++ b/scm-webapp/src/main/java/sonia/scm/security/SecurityFilter.java @@ -9,6 +9,7 @@ package sonia.scm.security; //~--- non-JDK imports -------------------------------------------------------- +import com.google.inject.Inject; import sonia.scm.User; //~--- JDK imports ------------------------------------------------------------ @@ -17,7 +18,6 @@ import java.io.IOException; import java.security.Principal; -import javax.inject.Inject; import javax.servlet.Filter; import javax.servlet.FilterChain; @@ -25,7 +25,6 @@ import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; -import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import javax.servlet.http.HttpServletResponse; @@ -34,7 +33,6 @@ import javax.servlet.http.HttpServletResponse; * * @author Sebastian Sdorra */ -@WebFilter(urlPatterns = "/api/rest/*") public class SecurityFilter implements Filter { diff --git a/scm-webapp/src/main/webapp/WEB-INF/beans.xml b/scm-webapp/src/main/webapp/WEB-INF/beans.xml deleted file mode 100644 index bb8ba6ac8f..0000000000 --- a/scm-webapp/src/main/webapp/WEB-INF/beans.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - diff --git a/scm-webapp/src/main/webapp/WEB-INF/web.xml b/scm-webapp/src/main/webapp/WEB-INF/web.xml index 62b993fe68..73d63e5e79 100644 --- a/scm-webapp/src/main/webapp/WEB-INF/web.xml +++ b/scm-webapp/src/main/webapp/WEB-INF/web.xml @@ -1,35 +1,21 @@ - + - - Jersey Web Application - com.sun.jersey.spi.container.servlet.ServletContainer - - com.sun.jersey.config.feature.Redirect - true - - - com.sun.jersey.config.feature.ImplicitViewables - true - - - com.sun.jersey.config.property.packages - sonia.scm.api.rest - - - com.sun.jersey.config.property.resourceConfigClass - sonia.scm.api.rest.UriExtensionsConfig - - 1 - + + sonia.scm.ContextListener + - - Jersey Web Application - /api/rest/* - + + guiceFilter + com.google.inject.servlet.GuiceFilter + + + + guiceFilter + /* + index.html