This is an automated email from the ASF dual-hosted git repository.

jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git


The following commit(s) were added to refs/heads/master by this push:
     new b39c665  Add spring-boot methods to RestServlet.
b39c665 is described below

commit b39c6653c2ec8046291f278042946f3860ebd5e7
Author: JamesBognar <[email protected]>
AuthorDate: Wed Nov 21 11:52:51 2018 -0500

    Add spring-boot methods to RestServlet.
---
 juneau-doc/docs/ReleaseNotes/8.0.0.html            |  18 +++++++++
 .../Topics/13.juneau-examples-rest-springboot.html |   5 ++-
 .../01.Classes.html                                |  40 ++++++++++++++++++-
 .../juneau-examples-rest-springboot.Classes.png    | Bin 0 -> 26502 bytes
 .../juneau/examples/rest/springboot/App.java       |   1 -
 .../rest/springboot/AppServletConfiguration.java   |   4 +-
 .../apache/juneau/examples/rest/RootResources.java |  38 +-----------------
 .../apache/juneau/microservice/Microservice.java   |   9 +++++
 .../java/org/apache/juneau/rest/RestContext.java   |   3 +-
 .../java/org/apache/juneau/rest/RestServlet.java   |  43 +++++++++++++++++++--
 10 files changed, 112 insertions(+), 49 deletions(-)

diff --git a/juneau-doc/docs/ReleaseNotes/8.0.0.html 
b/juneau-doc/docs/ReleaseNotes/8.0.0.html
index dc972ae..0f19fb2 100644
--- a/juneau-doc/docs/ReleaseNotes/8.0.0.html
+++ b/juneau-doc/docs/ReleaseNotes/8.0.0.html
@@ -31,6 +31,24 @@
                </ul>
 </ul>
 
+<h5 class='topic w800'>juneau-server</h5>
+<ul class='spaced-list'>
+       <li>
+               New methods on {@link oajr.RestServlet}:
+               <ul class='doctree'>
+                       <li class='jm'>{@link 
oajr.RestServlet#setRestResourceResolver(RestResourceResolver) 
setRestResourceResolver(RestResourceResolver)}
+                       <li class='jm'>{@link oajr.RestServlet#getPath() 
getPath()}
+               </ul>
+</ul>
+
+<h5 class='topic w800'>juneau-microservice-server</h5>
+<ul class='spaced-list'>
+       <li>
+               If the microservice cannot find a config file in the home 
directory with the same name as the jar and
+               the <js>"juneau.configFile"</js> system property is not found, 
it will try to find any file in the home
+               directory that ends with <js>".cfg"</js>.
+</ul>
+
 <h5 class='topic w800'>juneau-examples-rest</h5>
 <ul class='spaced-list'>
        <li>
diff --git a/juneau-doc/docs/Topics/13.juneau-examples-rest-springboot.html 
b/juneau-doc/docs/Topics/13.juneau-examples-rest-springboot.html
index adcb468..46b648e 100644
--- a/juneau-doc/docs/Topics/13.juneau-examples-rest-springboot.html
+++ b/juneau-doc/docs/Topics/13.juneau-examples-rest-springboot.html
@@ -6,7 +6,7 @@
  * with the License.  You may obtain a copy of the License at
  *  
  *  http://www.apache.org/licenses/LICENSE-2.0
- *  
+ *  As 
  * Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 
or implied.  See the License for the
  * specific language governing permissions and limitations under the License.
@@ -41,4 +41,7 @@
 <p>
        The microservice can be started from the 
<code>juneau-examples-rest-springboot.launch</code> file. 
        It will start up the microservice on port 5000 which you can then view 
through a browser.
+</p>
+<p>
+       The Spring Boot examples app has identical functionality to the normal 
examples app except for console command support.
 </p>
\ No newline at end of file
diff --git 
a/juneau-doc/docs/Topics/13.juneau-examples-rest-springboot/01.Classes.html 
b/juneau-doc/docs/Topics/13.juneau-examples-rest-springboot/01.Classes.html
index 420d290..d569c44 100644
--- a/juneau-doc/docs/Topics/13.juneau-examples-rest-springboot/01.Classes.html
+++ b/juneau-doc/docs/Topics/13.juneau-examples-rest-springboot/01.Classes.html
@@ -13,8 +13,44 @@
  
***************************************************************************************************************************/
  -->
 
-{todo} Classes
+{new} Classes
 
 <p>
-       TODO
+       The <code>juneau-examples-rest-springboot</code> project contains the 
same classes as found in <code>juneau-examples-rest</code>
+       with the inclusion of a 
<code>org.apache.juneau.examples.rest.springboot</code> package containing the 
following:
 </p>
+<img class='bordered w800' 
src='doc-files/juneau-examples-rest-springboot.Classes.png'>
+<p>
+       The <code>App</code> class is used to invoke our application using 
Spring:
+</p>
+<p class='bpcode w800'>
+       <ja>@SpringBootApplication</ja>
+       <ja>@Controller</ja>
+       <ja>@Import</ja>({AppConfiguration.<jk>class</jk>, 
AppServletConfiguration.<jk>class</jk>})
+       <jk>public class</jk> App {
+       
+               <jk>private static volatile</jk> ConfigurableApplicationContext 
<jsf>context</jsf>;
+       
+               <jk>public static void</jk> main(String[] args) {
+                       <jk>try</jk> {
+                               
<jsm>setProperty</jsm>(<js>"juneau.configFile"</js>, <js>"examples.cfg"</js>, 
<jk>false</jk>);
+                               <jsf>context</jsf> = 
SpringApplication.<jsm>run</jsm>(App.<jk>class</jk>, args);
+                               <jk>if</jk> (<jsf>context</jsf> == 
<jk>null</jk>)
+                                       System.<jsm>exit</jsm>(2); <jc>// 
Probably port in use?</jc>
+                               
AppConfiguration.<jsm>setAppContext</jsm>(context);
+                               
<jsm>setProperty</jsm>(<js>"juneau.serverPort"</js>, 
<jsf>context</jsf>.getEnvironment().getProperty(<js>"server.port"</js>), 
<jk>false</jk>);
+                       } <jk>catch</jk> (Exception e) {
+                               e.printStackTrace();
+                       }
+               }
+       
+               <jk>public static void</jk> start() {
+                       <jsm>main</jsm>(<jk>new</jk> String[0]);
+               }
+       
+               <jk>public static void</jk> stop() {
+                       <jsf>context</jsf>.stop();
+               }
+       }
+</p>
+
diff --git 
a/juneau-doc/docs/Topics/13.juneau-examples-rest-springboot/doc-files/juneau-examples-rest-springboot.Classes.png
 
b/juneau-doc/docs/Topics/13.juneau-examples-rest-springboot/doc-files/juneau-examples-rest-springboot.Classes.png
new file mode 100644
index 0000000..9310ea9
Binary files /dev/null and 
b/juneau-doc/docs/Topics/13.juneau-examples-rest-springboot/doc-files/juneau-examples-rest-springboot.Classes.png
 differ
diff --git 
a/juneau-examples/juneau-examples-rest-springboot/src/main/java/org/apache/juneau/examples/rest/springboot/App.java
 
b/juneau-examples/juneau-examples-rest-springboot/src/main/java/org/apache/juneau/examples/rest/springboot/App.java
index 69c31ff..4168655 100644
--- 
a/juneau-examples/juneau-examples-rest-springboot/src/main/java/org/apache/juneau/examples/rest/springboot/App.java
+++ 
b/juneau-examples/juneau-examples-rest-springboot/src/main/java/org/apache/juneau/examples/rest/springboot/App.java
@@ -28,7 +28,6 @@ import org.springframework.stereotype.*;
 @Import({AppConfiguration.class, AppServletConfiguration.class})
 public class App {
 
-       public static int counter = 0;
        private static volatile ConfigurableApplicationContext context;
 
        public static void main(String[] args) {
diff --git 
a/juneau-examples/juneau-examples-rest-springboot/src/main/java/org/apache/juneau/examples/rest/springboot/AppServletConfiguration.java
 
b/juneau-examples/juneau-examples-rest-springboot/src/main/java/org/apache/juneau/examples/rest/springboot/AppServletConfiguration.java
index 55d6f80..c93564f 100644
--- 
a/juneau-examples/juneau-examples-rest-springboot/src/main/java/org/apache/juneau/examples/rest/springboot/AppServletConfiguration.java
+++ 
b/juneau-examples/juneau-examples-rest-springboot/src/main/java/org/apache/juneau/examples/rest/springboot/AppServletConfiguration.java
@@ -28,12 +28,12 @@ public class AppServletConfiguration {
 
        @Bean
        public RootResources root(RestResourceResolver resolver) {
-               return new RootResources(resolver);
+               return (RootResources)new 
RootResources().setRestResourceResolver(resolver);
        }
 
        @Bean
        public ServletRegistrationBean<RootResources> 
rootRegistration(RootResources root) {
-               return new ServletRegistrationBean<>(root, CONTEXT_ROOT, 
CONTEXT_ROOT+"/", CONTEXT_ROOT+"/*");
+               return new ServletRegistrationBean<>(root, CONTEXT_ROOT, 
CONTEXT_ROOT+"/", CONTEXT_ROOT+"/"+root.getPath());
        }
 
        /**
diff --git 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java
 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java
index 4a14e89..6bfedb1 100644
--- 
a/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java
+++ 
b/juneau-examples/juneau-examples-rest/src/main/java/org/apache/juneau/examples/rest/RootResources.java
@@ -12,16 +12,12 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.examples.rest;
 
-import static org.apache.juneau.rest.annotation.HookEvent.*;
 import static org.apache.juneau.serializer.WriterSerializer.*;
 
-import javax.inject.*;
-
 import org.apache.juneau.examples.rest.dto.*;
 import org.apache.juneau.examples.rest.petstore.rest.*;
 import org.apache.juneau.microservice.*;
 import org.apache.juneau.microservice.resources.*;
-import org.apache.juneau.rest.*;
 import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.widget.*;
 
@@ -29,7 +25,7 @@ import org.apache.juneau.rest.widget.*;
  * Sample REST resource showing how to implement a "router" resource page.
  */
 @RestResource(
-       path="/",
+       path="/*",
        title="Root resources",
        description="Example of a router resource page.",
        htmldoc=@HtmlDoc(
@@ -75,36 +71,4 @@ public class RootResources extends BasicRestServletJenaGroup 
{
        // It allows you to remove the Jena prerequisite.
 
        private static final long serialVersionUID = 1L;
-
-       private RestResourceResolver resolver;
-
-       /**
-        * Constructor used when using Jetty.
-        */
-       public RootResources() {
-               this(null);
-       }
-
-       /**
-        * Used when constructed via Spring.
-        *
-        * @param resolver The bean resolver for child resources.
-        */
-       @Inject
-       public RootResources(RestResourceResolver resolver) {
-               this.resolver = resolver;
-       }
-
-       /**
-        * Used when constructed via Spring.
-        * <p>
-        * Sets the resource resolver passed in through the constructor.
-        *
-        * @param config
-        * @throws Exception
-        */
-       @RestHook(INIT)
-       public void init(RestContextBuilder config) throws Exception {
-               config.resourceResolver(resolver);
-       }
 }
diff --git 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/Microservice.java
 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/Microservice.java
index 026e362..ef7bf2b 100755
--- 
a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/Microservice.java
+++ 
b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/Microservice.java
@@ -575,6 +575,15 @@ public abstract class Microservice implements 
ConfigEventListener {
                        }
 
                        if (cfPath == null) {
+                               for (File f : new File(".").listFiles()) {
+                                       if (f.getName().endsWith(".cfg")) {
+                                               cfPath = f.getName();
+                                               break;
+                                       }
+                               }
+                       }
+
+                       if (cfPath == null) {
                                cf = cfb.build();
                        } else {
                                cf = 
cfb.name(cfPath).varResolver(createVarResolver().build()).build();
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
index a142ba0..159b1e6 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
@@ -3866,8 +3866,7 @@ public final class RestContext extends BeanContext {
         * {@link RestContextBuilder#path(String)} method concatenated with 
those on all parent classes.
         *
         * <p>
-        * If path is not specified, returns <js>"/"</js>.
-        * <br>Path always starts with <js>"/"</js>.
+        * If path is not specified, returns <js>""</js>.
         *
         * <h5 class='section'>See Also:</h5>
         * <ul>
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServlet.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServlet.java
index 1427cea..d49236e 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServlet.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServlet.java
@@ -23,6 +23,8 @@ import java.util.logging.*;
 import javax.servlet.*;
 import javax.servlet.http.*;
 
+import org.apache.juneau.internal.*;
+import org.apache.juneau.rest.annotation.*;
 import org.apache.juneau.rest.exception.*;
 
 /**
@@ -41,13 +43,18 @@ public abstract class RestServlet extends HttpServlet {
        private volatile RestContext context;
        private volatile Exception initException;
        private boolean isInitialized = false;  // Should not be volatile.
+       private volatile RestResourceResolver resourceResolver;
+
 
        @Override /* Servlet */
        public final synchronized void init(ServletConfig servletConfig) throws 
ServletException {
                try {
                        if (context != null)
                                return;
-                       builder = RestContext.create(servletConfig, 
this.getClass(), null).init(this);
+                       builder = RestContext.create(servletConfig, 
this.getClass(), null);
+                       if (resourceResolver != null)
+                               builder.resourceResolver(resourceResolver);
+                       builder.init(this);
                        super.init(servletConfig);
                        builder.servletContext(this.getServletContext());
                        setContext(builder.build());
@@ -92,6 +99,34 @@ public abstract class RestServlet extends HttpServlet {
                context.postInit();
        }
 
+       /**
+        * Sets the resource resolver to use for this servlet and all child 
servlets.
+        * <p>
+        * This method can be called immediately following object construction, 
but must be called before {@link #init(ServletConfig)} is called.
+        * Otherwise calling this method will have no effect.
+        *
+        * @param resourceResolver The resolver instance.  Can be <jk>null</jk>.
+        * @return This object (for method chaining).
+        */
+       public synchronized RestServlet 
setRestResourceResolver(RestResourceResolver resourceResolver) {
+               this.resourceResolver = resourceResolver;
+               return this;
+       }
+
+       /**
+        * Returns the path defined on this servlet if it's defined via {@link 
RestResource#path()}.
+        *
+        * @return The path defined on this servlet, or an empty string if not 
specified.
+        */
+       public synchronized String getPath() {
+               if (context != null)
+                       return context.getPath();
+               for (RestResource rr : 
ClassUtils.getAnnotations(RestResource.class, this.getClass()))
+                       if (! rr.path().isEmpty())
+                               return trimSlashes(rr.path());
+               return "";
+       }
+
        @Override /* GenericServlet */
        public synchronized RestContextBuilder getServletConfig() {
                return builder;
@@ -213,7 +248,7 @@ public abstract class RestServlet extends HttpServlet {
         * @return The current HTTP request, or <jk>null</jk> if it wasn't 
created.
         */
        public RestRequest getRequest() {
-               if (context == null) 
+               if (context == null)
                        return null;
                return context.getRequest();
        }
@@ -224,7 +259,7 @@ public abstract class RestServlet extends HttpServlet {
         * @return The current HTTP response, or <jk>null</jk> if it wasn't 
created.
         */
        public RestResponse getResponse() {
-               if (context == null) 
+               if (context == null)
                        return null;
                return context.getResponse();
        }
@@ -238,7 +273,7 @@ public abstract class RestServlet extends HttpServlet {
 
        /**
         * Convenience method for calling 
<code>getContext().getProperties();</code>
-        * 
+        *
         * @return The resource properties as an {@link RestContextProperties}.
         * @see RestContext#getProperties()
         */

Reply via email to