Repository: incubator-juneau
Updated Branches:
  refs/heads/master 779e1d94c -> 6f41a0523


Add methods to RestMicroservice for registering servlets
programmatically.

Project: http://git-wip-us.apache.org/repos/asf/incubator-juneau/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-juneau/commit/6f41a052
Tree: http://git-wip-us.apache.org/repos/asf/incubator-juneau/tree/6f41a052
Diff: http://git-wip-us.apache.org/repos/asf/incubator-juneau/diff/6f41a052

Branch: refs/heads/master
Commit: 6f41a0523eec03a6d62026c0281c64222a769b54
Parents: 779e1d9
Author: JamesBognar <[email protected]>
Authored: Sat Jul 15 10:15:39 2017 -0400
Committer: JamesBognar <[email protected]>
Committed: Sat Jul 15 10:15:39 2017 -0400

----------------------------------------------------------------------
 juneau-core/src/main/javadoc/overview.html      | 12 ++++
 .../juneau/microservice/RestMicroservice.java   | 64 +++++++++++++++++---
 2 files changed, 69 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6f41a052/juneau-core/src/main/javadoc/overview.html
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/javadoc/overview.html 
b/juneau-core/src/main/javadoc/overview.html
index d800f0e..855fcec 100644
--- a/juneau-core/src/main/javadoc/overview.html
+++ b/juneau-core/src/main/javadoc/overview.html
@@ -6911,6 +6911,18 @@
                                <br>Allows you to specify a resource resolver 
on the servlet context to make it easier to work with
                                dependency injection frameworks.
                </ul>
+
+               <h6 class='topic'>org.apache.juneau.rest.microservice</h6>
+               <ul class='spaced-list'>
+                       <li>
+                               New methods on {@link 
org.apache.juneau.microservice.RestMicroservice}:
+                               <ul>
+                                       <li>{@link 
org.apache.juneau.microservice.RestMicroservice#addServlet(Servlet,String) 
addServlet(Servlet,String)}
+                                       <li>{@link 
org.apache.juneau.microservice.RestMicroservice#addServletAttribute(String,Object)
 addServletAttribute(String,Object)}
+                                       <li>{@link 
org.apache.juneau.microservice.RestMicroservice#getServer() getServer()}
+                                       <li>{@link 
org.apache.juneau.microservice.RestMicroservice#getServletContextHandler() 
getServletContextHandler()}
+                               </ul>
+               </ul>
        </div>
        
        <!-- 
========================================================================================================
 -->

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/6f41a052/juneau-microservice/src/main/java/org/apache/juneau/microservice/RestMicroservice.java
----------------------------------------------------------------------
diff --git 
a/juneau-microservice/src/main/java/org/apache/juneau/microservice/RestMicroservice.java
 
b/juneau-microservice/src/main/java/org/apache/juneau/microservice/RestMicroservice.java
index 9dd4639..cea6e5a 100755
--- 
a/juneau-microservice/src/main/java/org/apache/juneau/microservice/RestMicroservice.java
+++ 
b/juneau-microservice/src/main/java/org/apache/juneau/microservice/RestMicroservice.java
@@ -77,7 +77,8 @@ import org.eclipse.jetty.util.ssl.*;
  * </ul>
  */
 public class RestMicroservice extends Microservice {
-
+       
+       ServletContextHandler servletContextHandler; 
        Server server;
        int port;
        String contextPath;
@@ -393,20 +394,69 @@ public class RestMicroservice extends Microservice {
                        server = new Server(port);
                }
 
-               ServletContextHandler context = new 
ServletContextHandler(ServletContextHandler.SESSIONS);
+               servletContextHandler = new 
ServletContextHandler(ServletContextHandler.SESSIONS);
 
                String authType = cf.getString("REST/authType", 
mf.getString("Rest-AuthType", "NONE"));
                if (authType.equals("BASIC"))
-                       context.setSecurityHandler(basicAuth(cf, mf));
+                       servletContextHandler.setSecurityHandler(basicAuth(cf, 
mf));
 
-               context.setContextPath(contextPath);
-               server.setHandler(context);
+               servletContextHandler.setContextPath(contextPath);
+               server.setHandler(servletContextHandler);
 
                for (Map.Entry<String,Class<? extends Servlet>> e : 
getResourceMap().entrySet())
-                       context.addServlet(e.getValue(), 
e.getKey()).setInitOrder(0);
-
+                       servletContextHandler.addServlet(e.getValue(), 
e.getKey()).setInitOrder(0);
+               
                return server;
        }
+       
+       /**
+        * Adds an arbitrary servlet to this microservice.
+        * 
+        * @param servlet The servlet instance.
+        * @param pathSpec The context path of the servlet.
+        * @return This object (for method chaining).
+        * @throws RuntimeException if {@link #createServer()} has not 
previously been called.
+        */
+       public RestMicroservice addServlet(Servlet servlet, String pathSpec) {
+               if (servletContextHandler == null)
+                       throw new RuntimeException("Servlet context handler not 
found.  createServer() must be called first.");
+               ServletHolder sh = new ServletHolder(servlet);
+               servletContextHandler.addServlet(sh, pathSpec);
+               return this;
+       }
+       
+       /**
+        * Adds a servlet attribute to the Jetty server.
+        * 
+        * @param name The server attribute name.
+        * @param value The context path of the servlet.
+        * @return This object (for method chaining).
+        * @throws RuntimeException if {@link #createServer()} has not 
previously been called.
+        */
+       public RestMicroservice addServletAttribute(String name, Object value) {
+               if (server == null)
+                       throw new RuntimeException("Server not found.  
createServer() must be called first.");
+               server.setAttribute(name, value);
+               return this;
+       }
+       
+       /**
+        * Returns the underlying Jetty server.
+        * 
+        * @return The underlying Jetty server, or <jk>null</jk> if {@link 
#createServer()} has not yet been called.
+        */
+       public Server getServer() {
+               return server;
+       }
+       
+       /**
+        * Returns the underlying servlet context handler.
+        * 
+        * @return The underlying servlet context handler, or <jk>null</jk> if 
{@link #createServer()} has not yet been called.
+        */
+       public ServletContextHandler getServletContextHandler() {
+               return servletContextHandler;
+       }
 
        private static int findOpenPort(int[] ports) {
                for (int port : ports) {

Reply via email to