<?xml version="1.0"?>
<!--

    Copyright (c) 2010, 2021 Oracle and/or its affiliates. All rights reserved.

    This program and the accompanying materials are made available under the
    terms of the Eclipse Public License v. 2.0, which is available at
    http://www.eclipse.org/legal/epl-2.0.

    This Source Code may also be made available under the following Secondary
    Licenses when the conditions for such availability set forth in the
    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
    version 2 with the GNU Classpath Exception, which is available at
    https://www.gnu.org/software/classpath/license.html.

    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0

-->

<!DOCTYPE chapter [<!ENTITY % ents SYSTEM "jersey.ent" > %ents; ]>
<chapter xmlns="http://docbook.org/ns/docbook"
         version="5.0"
         xml:lang="en"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns:xi="http://www.w3.org/2001/XInclude"
         xmlns:xlink="http://www.w3.org/1999/xlink"
         xsi:schemaLocation="http://docbook.org/ns/docbook http://docbook.org/xml/5.0/xsd/docbook.xsd
                             http://www.w3.org/1999/xlink http://www.w3.org/1999/xlink.xsd"
         xml:id="getting-started">
    <title>Getting Started</title>

    <para>
        This chapter provides a quick introduction on how to get started building RESTful services using Jersey.
        The example described here uses the lightweight Grizzly HTTP server. At the end of this chapter you will
        see how to implement equivalent functionality as a JavaEE web application you can deploy on any servlet
        container supporting Servlet 2.5 and higher.
    </para>

    <section xml:id="new-from-archetype">
        <title>Creating a New Project from Maven Archetype</title>

        <para>
            Jersey project is built using &maven.link; software project build and management tool. All modules produced as
            part of Jersey project build are pushed to the &maven.central.repo.link;. Therefore it is very convenient to work
            with Jersey for any Maven-based project as all the released (non-SNAPSHOT) Jersey dependencies are readily
            available without a need to configure a special maven repository to consume the Jersey modules.

            <note>
                <para>
                    In case you want to depend on the latest SNAPSHOT versions of Jersey modules, the following repository
                    configuration needs to be added to your Maven project pom:

                    <programlisting language="xml" linenumbering="unnumbered">&lt;snapshotRepository&gt;
                        &lt;id&gt;ossrh&lt;/id&gt;
                    &lt;name&gt;Sonatype Nexus Snapshots&lt;/name&gt;
                &lt;url&gt;https://jakarta.oss.sonatype.org/content/repositories/snapshots/&lt;/url&gt;
            &lt;/snapshotRepository&gt;</programlisting>
                </para>
            </note>
        </para>
        <para>
            Since starting from a Maven project is the most convenient way for working with Jersey, let's now have a look
            at this approach. We will now create a new Jersey project that runs on top of a &grizzly.link; container. We will
            use a Jersey-provided maven archetype. To create the project, execute the following Maven command in the directory
            where the new project should reside:

            <programlisting language="bash" linenumbering="unnumbered">mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-grizzly2 \
-DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false \
-DgroupId=com.example -DartifactId=simple-service -Dpackage=com.example \
-DarchetypeVersion=&version;</programlisting>

            Feel free to adjust the <literal>groupId</literal>, <literal>package</literal> and/or <literal>artifactId</literal>
            of your new project. Alternatively, you can change it by updating the new project pom.xml once it gets generated.
        </para>
    </section>
    <section xml:id="new-project-structure">
        <title>Exploring the Newly Created Project</title>

        <para>
            Once the project generation from a Jersey maven archetype is successfully finished, you should see the new
            <literal>simple-service</literal> project directory created in your current location. The directory contains
            a standard Maven project structure:

            <simplelist>
                <member>
                    Project build and management configuration is described in the <literal>pom.xml</literal> located
                    in the project root directory.
                </member>
                <member>Project sources are located under <literal>src/main/java</literal>.</member>
                <member>Project test sources are located under <literal>src/test/java</literal>.</member>
            </simplelist>

            There are 2 classes in the project source directory in the <literal>com.example</literal> package.
            The <literal>Main</literal> class is responsible for bootstrapping the Grizzly container as well as configuring
            and deploying the project's JAX-RS application to the container. Another class in the same package
            is <literal>MyResource</literal> class, that contains implementation of a simple JAX-RS resource.
            It looks like this:

            <programlisting language="java" linenumbering="numbered">package com.example;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

/**
 * Root resource (exposed at "myresource" path)
 */
@Path("myresource")
public class MyResource {

    /**
     * Method handling HTTP GET requests. The returned object will be sent
     * to the client as "text/plain" media type.
     *
     * @return String that will be returned as a text/plain response.
     */
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String getIt() {
        return "Got it!";
    }
}</programlisting>

            A JAX-RS resource is an annotated POJO that provides so-called <emphasis>resource methods</emphasis> that
            are able to handle HTTP requests for URI paths that the resource is bound to. See
            <xref linkend="jaxrs-resources" /> for a complete guide to JAX-RS resources. In our case, the resource
            exposes a single resource method that is able to handle HTTP &lit.http.GET; requests, is bound to
            <literal>/myresource</literal> URI path and can produce responses with response message content represented
            in <literal>"text/plain"</literal> media type. In this version, the resource returns the same
            <literal>"Got it!"</literal> response to all client requests.
        </para>
        <para>
            The last piece of code that has been generated in this skeleton project is a <literal>MyResourceTest</literal>
            unit test class that is located in the same <literal>com.example</literal> package as the
            <literal>MyResource</literal> class, however, this unit test class is placed into the maven project test source
            directory <literal>src/test/java</literal> (certain code comments and JUnit imports have been excluded for brevity):

            <programlisting language="java" linenumbering="numbered">package com.example;

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;

import org.glassfish.grizzly.http.server.HttpServer;

...

public class MyResourceTest {

    private HttpServer server;
    private WebTarget target;

    @Before
    public void setUp() throws Exception {
        server = Main.startServer();

        Client c = ClientBuilder.newClient();
        target = c.target(Main.BASE_URI);
    }

    @After
    public void tearDown() throws Exception {
        server.stop();
    }

    /**
     * Test to see that the message "Got it!" is sent in the response.
     */
    @Test
    public void testGetIt() {
        String responseMsg = target.path("myresource").request().get(String.class);
        assertEquals("Got it!", responseMsg);
    }
}</programlisting>

            In this unit test, a Grizzly container is first started and server application is deployed in the
            test <literal>setUp()</literal> method by a static call to <literal>Main.startServer()</literal>.
            Next, JAX-RS client components are created in the same test set-up method. First a new JAX-RS client
            instance <literal>c</literal> is built and then a JAX-RS web target component pointing to the context root of our
            application deployed at <literal>http://localhost:8080/myapp/</literal> (a value of
            <literal>Main.BASE_URI</literal> constant) is stored into a <literal>target</literal> field of the unit test class.
            This field is then used in the actual unit test method (<literal>testGetIt()</literal>).
        </para>
        <para>
            In the <literal>testGetIt()</literal> method a fluent JAX-RS Client API is used to connect to and send
            a HTTP &lit.http.GET; request to the <literal>MyResource</literal> JAX-RS resource class listening on
            <literal>/myresource</literal> URI. As part of the same fluent JAX-RS API method invocation chain, a response is
            read as a Java <literal>String</literal> type. On the second line in the test method, the response content string
            returned from the server is compared with the expected phrase in the test assertion. To learn more about using
            JAX-RS Client API, please see the <xref linkend="client" /> chapter.
        </para>
    </section>

    <section xml:id="running-project">
        <title>Running the Project</title>
        <para>
            Now that we have seen the content of the project, let's try to test-run it. To do this, we need to invoke following
            command on the command line:

            <programlisting language="bash" linenumbering="unnumbered">mvn clean test</programlisting>

            This will compile the project and run the project unit tests. We should see a similar output that informs about a
            successful build once the build is finished:

            <screen linenumbering="unnumbered">Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  7.519 s
[INFO] Finished at: 2021-01-29T08:16:04+01:00
[INFO] ------------------------------------------------------------------------
</screen>

            Now that we have verified that the project compiles and that the unit test passes, we can execute the application
            in a standalone mode. To do this, run the following maven command:

            <programlisting language="bash" linenumbering="unnumbered">mvn exec:java</programlisting>

            The application starts and you should soon see the following notification in your console:

            <screen linenumbering="unnumbered">May 26, 2013 8:08:45 PM org.glassfish.grizzly.http.server.NetworkListener start
INFO: Started listener bound to [localhost:8080]
Jan 29, 2021 8:33:02 AM org.glassfish.grizzly.http.server.HttpServer start
INFO: [HttpServer] Started.
Jersey app started with WADL available at http://localhost:8080/myapp/application.wadl
Hit enter to stop it...</screen>

            This informs you that the application has been started and it's WADL descriptor is available at
            <literal>http://localhost:8080/myapp/application.wadl</literal> URL. You can retrieve the WADL content by
            executing a <literal>curl http://localhost:8080/myapp/application.wadl</literal> command in your console
            or by typing the WADL URL into your favorite browser. You should get back an XML document in describing
            your deployed RESTful application in a WADL format. To learn more about working with WADL, check the
            <xref linkend="wadl" /> chapter.
        </para>
        <para>
            The last thing we should try before concluding this section is to see if we can communicate with our
            resource deployed at <literal>/myresource</literal> path. We can again either type the resource URL
            in the browser or we can use <literal>curl</literal>:

            <screen language="bash" linenumbering="unnumbered">$ curl http://localhost:8080/myapp/myresource
Got it!</screen>

            As we can see, the <literal>curl</literal> command returned with the <literal>Got it!</literal> message that
            was sent by our resource. We can also ask <literal>curl</literal> to provide more information about the response,
            for example we can let it display all response headers by using the <literal>-i</literal> switch:

            <screen language="bash" linenumbering="unnumbered">curl -i http://localhost:8080/myapp/myresource
HTTP/1.1 200 OK
Content-Type: text/plain
Content-Length: 7

Got it!</screen>

            Here we see the whole content of the response message that our Jersey/JAX-RS application returned, including all
            the HTTP headers. Notice the <literal>Content-Type: text/plain</literal> header that was derived from the
            value of &jaxrs.Produces; annotation attached to the <literal>MyResource</literal> class.
        </para>
        <para>
            In case you want to see even more details about the communication between our <literal>curl</literal> client
            and our resource running on Jersey in a Grizzly I/O container, feel free to try other various options and switches
            that <literal>curl</literal> provides. For example, this last command will make <literal>curl</literal> output
            a lot of additional information about the whole communication:

            <screen language="bash" linenumbering="unnumbered"><![CDATA[$ curl -v http://localhost:8080/myapp/myresource
*   Trying 127.0.0.1:8080...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET /myapp/myresource HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.68.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Content-Type: text/plain
< Content-Length: 7
<
* Connection #0 to host localhost left intact
Got it!]]></screen>
        </para>
    </section>

    <section xml:id="new-webapp">
        <title>Creating a JavaEE Web Application</title>
        <para>
            To create a Web Application that can be packaged as WAR and deployed in a Servlet container follow a similar process
            to the one described in <xref linkend="new-from-archetype" />.
            In addition to the Grizzly-based archetype, Jersey provides also a Maven archetype for creating web application
            skeletons. To create the new web application skeleton project, execute the following Maven command in the directory
            where the new project should reside:

            <programlisting language="bash" linenumbering="unnumbered">mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-webapp \
                -DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false \
                -DgroupId=com.example -DartifactId=simple-service-webapp -Dpackage=com.example \
                -DarchetypeVersion=&version;</programlisting>

            As with the Grizzly based project, feel free to adjust the <literal>groupId</literal>, <literal>package</literal>
            and/or <literal>artifactId</literal> of your new web application project. Alternatively, you can change it by updating
            the new project &lit.pom.xml; once it gets generated.
        </para>
        <para>
            Once the project generation from a Jersey maven archetype is successfully finished, you should see the new
            <literal>simple-service-webapp</literal> project directory created in your current location. The directory contains
            a standard Maven project structure, similar to the <literal>simple-service</literal> project content we have seen
            earlier, except it is extended with an additional web application specific content:

            <simplelist>
                <member>
                    Project build and management configuration is described in the <literal>pom.xml</literal> located
                    in the project root directory.
                </member>
                <member>Project sources are located under <literal>src/main/java</literal>.</member>
                <member>Project resources are located under <literal>src/main/resources</literal>.</member>
                <member>Project web application files are located under <literal>src/main/webapp</literal>.</member>
            </simplelist>

            The project contains the same <literal>MyResouce</literal> JAX-RS resource class. It does not contain any unit tests
            as well as it does not contain a <literal>Main</literal> class that was used to setup Grizzly container in the
            previous project. Instead, it contains the standard Java EE web application <literal>web.xml</literal> deployment
            descriptor under <literal>src/main/webapp/WEB-INF</literal>.
            The last component in the project is an <literal>index.jsp</literal> page that serves as a client for the
            <literal>MyResource</literal> resource class that is packaged and deployed with the application.
        </para>
        <para>
            To compile and package the application into a WAR, invoke the following maven command in your console:

            <programlisting language="bash" linenumbering="unnumbered">mvn clean package</programlisting>

            A successful build output will produce an output similar to the one below:

            <screen linenumbering="unnumbered">Results :

Tests run: 0, Failures: 0, Errors: 0, Skipped: 0

[INFO]
[INFO] --- maven-war-plugin:2.2:war (default-war) @ simple-service-webapp ---
[INFO] Packaging webapp
[INFO] Assembling webapp [simple-service-webapp] in [.../simple-service-webapp/target/simple-service-webapp]
[INFO] Processing war project
[INFO] Copying webapp resources [.../simple-service-webapp/src/main/webapp]
[INFO] Webapp assembled in [110 msecs]
[INFO] Building war: .../simple-service-webapp/target/simple-service-webapp.war
[INFO] WEB-INF/web.xml already added, skipping
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  4.520 s
[INFO] Finished at: 2021-01-29T08:42:11+01:00
[INFO] ------------------------------------------------------------------------</screen>

            Now you are ready to take the packaged WAR (located under <literal>./target/simple-service-webapp.war</literal>)
            and deploy it to a Servlet container of your choice.
            <important>
                <para>
                    To deploy a Jersey application, you will need a Servlet container that supports Servlet 2.5 or later.
                    For full set of advanced features (such as JAX-RS 2.0 Async Support) you will need a Servlet 3.0 or later
                    compliant container.
                </para>
            </important>
        </para>
    </section>

     <section xml:id="heroku-webapp">
        <title>Creating a Web Application that can be deployed on Heroku</title>
        <para>
            To create a Web Application that can be either packaged as WAR and deployed in a Servlet container or that can be
            pushed and deployed on &heroku.link; the process is very similar to the one described in <xref linkend="new-webapp" />.
            To create the new web application skeleton project, execute the following Maven command in the directory
            where the new project should reside:

            <programlisting language="bash" linenumbering="unnumbered">mvn archetype:generate -DarchetypeArtifactId=jersey-heroku-webapp \
                -DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false \
                -DgroupId=com.example -DartifactId=simple-heroku-webapp -Dpackage=com.example \
                -DarchetypeVersion=&version;</programlisting>

            Adjust the <literal>groupId</literal>, <literal>package</literal> and/or <literal>artifactId</literal> of your new web
            application project to your needs or, alternatively, you can change it by updating the new project &lit.pom.xml; once it
            gets generated.
        </para>
        <para>
            Once the project generation from a Jersey maven archetype is successfully finished, you should see the new
            <literal>simple-heroku-webapp</literal> project directory created in your current location. The directory contains
            a standard Maven project structure:

            <simplelist>
                <member>
                    Project build and management configuration is described in the &lit.pom.xml; located
                    in the project root directory.
                </member>
                <member>Project sources are located under <literal>src/main/java</literal>.</member>
                <member>Project resources are located under <literal>src/main/resources</literal>.</member>
                <member>Project web application files are located under <literal>src/main/webapp</literal>.</member>
                <member>Project test-sources (based on &jersey.test.JerseyTest;) are located under <literal>src/test/java</literal>.</member>
                <member>Heroku system properties (OpenJDK version) are defined in <literal>system.properties</literal>.</member>
                <member>Lists of the process types in an application for Heroku is in <literal>Procfile</literal>.</member>
            </simplelist>

            The project contains one JAX-RS resource class, <literal>MyResouce</literal>, and one resource method which returns
            simple text message. To make sure the resource is properly tested there is also a end-to-end test-case
            in <literal>MyResourceTest</literal> (the test is based on &jersey.test.JerseyTest; from our <xref linkend="test-framework" />).
            Similarly to <literal>simple-service-webapp</literal>, the project contains the standard Java EE web application
            <literal>web.xml</literal> deployment descriptor under <literal>src/main/webapp/WEB-INF</literal> since the goal is to
            deploy the application in a Servlet container (the application will run in Jetty on Heroku).
        </para>
        <para>
            To compile and package the application into a WAR, invoke the following maven command in your console:

            <programlisting language="bash" linenumbering="unnumbered">mvn clean package</programlisting>

            A successful build output will produce an output similar to the one below:

            <screen linenumbering="unnumbered">    Results :

    Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

    [INFO]
    [INFO] --- maven-war-plugin:2.2:war (default-war) @ simple-heroku-webapp ---
    [INFO] Packaging webapp
    [INFO] Assembling webapp [simple-heroku-webapp] in [.../simple-heroku-webapp/target/simple-heroku-webapp]
    [INFO] Processing war project
    [INFO] Copying webapp resources [.../simple-heroku-webapp/src/main/webapp]
    [INFO] Webapp assembled in [122 msecs]
    [INFO] Building war: .../simple-heroku-webapp/target/simple-heroku-webapp.war
    [INFO] WEB-INF/web.xml already added, skipping
    [INFO]
    [INFO] --- maven-dependency-plugin:2.8:copy-dependencies (copy-dependencies) @ simple-heroku-webapp ---
    [INFO] Copying jetty-util-9.4.28.v20200408.jar to .../simple-heroku-webapp/target/dependency/jetty-util-9.4.28.v20200408.jar
    [INFO] Copying jersey-hk2-2.33.jar to .../simple-heroku-webapp/target/dependency/jersey-hk2-2.33.jar
    [INFO] Copying javassist-3.25.0-GA.jar to .../simple-heroku-webapp/target/dependency/javassist-3.25.0-GA.jar
    [INFO] Copying jakarta.inject-2.6.1.jar to .../simple-heroku-webapp/target/dependency/jakarta.inject-2.6.1.jar
    [INFO] Copying hk2-locator-2.6.1.jar to .../simple-heroku-webapp/target/dependency/hk2-locator-2.6.1.jar
    [INFO] Copying hk2-utils-2.6.1.jar to .../simple-heroku-webapp/target/dependency/hk2-utils-2.6.1.jar
    [INFO] Copying hk2-api-2.6.1.jar to .../simple-heroku-webapp/target/dependency/hk2-api-2.6.1.jar
    [INFO] Copying jetty-webapp-9.4.28.v20200408.jar to .../simple-heroku-webapp/target/dependency/jetty-webapp-9.4.28.v20200408.jar
    [INFO] Copying jakarta.annotation-api-1.3.5.jar to .../simple-heroku-webapp/target/dependency/jakarta.annotation-api-1.3.5.jar
    [INFO] Copying jersey-server-2.33.jar to .../simple-heroku-webapp/target/dependency/jersey-server-2.33.jar
    [INFO] Copying jakarta.ws.rs-api-2.1.6.jar to .../simple-heroku-webapp/target/dependency/jakarta.ws.rs-api-2.1.6.jar
    [INFO] Copying osgi-resource-locator-1.0.3.jar to .../simple-heroku-webapp/target/dependency/osgi-resource-locator-1.0.3.jar
    [INFO] Copying aopalliance-repackaged-2.6.1.jar to .../simple-heroku-webapp/target/dependency/aopalliance-repackaged-2.6.1.jar
    [INFO] Copying jetty-servlet-9.4.28.v20200408.jar to .../simple-heroku-webapp/target/dependency/jetty-servlet-9.4.28.v20200408.jar
    [INFO] Copying jetty-xml-9.4.28.v20200408.jar to .../simple-heroku-webapp/target/dependency/jetty-xml-9.4.28.v20200408.jar
    [INFO] Copying jersey-container-servlet-2.33.jar to .../simple-heroku-webapp/target/dependency/jersey-container-servlet-2.33.jar
    [INFO] Copying jetty-io-9.4.28.v20200408.jar to .../simple-heroku-webapp/target/dependency/jetty-io-9.4.28.v20200408.jar
    [INFO] Copying jetty-security-9.4.28.v20200408.jar to .../simple-heroku-webapp/target/dependency/jetty-security-9.4.28.v20200408.jar
    [INFO] Copying jetty-server-9.4.28.v20200408.jar to .../simple-heroku-webapp/target/dependency/jetty-server-9.4.28.v20200408.jar
    [INFO] Copying javax.servlet-3.0.0.v201112011016.jar to .../simple-heroku-webapp/target/dependency/javax.servlet-3.0.0.v201112011016.jar
    [INFO] Copying jersey-common-2.33.jar to .../simple-heroku-webapp/target/dependency/jersey-common-2.33.jar
    [INFO] Copying jakarta.validation-api-2.0.2.jar to .../simple-heroku-webapp/target/dependency/jakarta.validation-api-2.0.2.jar
    [INFO] Copying jersey-container-servlet-core-2.33.jar to .../simple-heroku-webapp/target/dependency/jersey-container-servlet-core-2.33.jar
    [INFO] Copying jersey-client-2.33.jar to .../simple-heroku-webapp/target/dependency/jersey-client-2.33.jar
    [INFO] Copying jetty-http-9.4.28.v20200408.jar to .../simple-heroku-webapp/target/dependency/jetty-http-9.4.28.v20200408.jar
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time:  12.009 s
    [INFO] Finished at: 2021-01-29T08:48:04+01:00
    [INFO] ------------------------------------------------------------------------</screen>

            Now that you know everything went as expected you are ready to:

            <itemizedlist>
                <listitem><simpara>
                    make some changes in your project,
                </simpara></listitem>
                <listitem><simpara>
                    take the packaged WAR (located under <literal>./target/simple-service-webapp.war</literal>) and deploy it to a
                    Servlet container of your choice, or
                </simpara></listitem>
                <listitem><simpara>
                    <xref linkend="deploy-it-on-heroku" />
                </simpara></listitem>
            </itemizedlist>

            <tip>
                <para>
                    If you want to make some changes to your application you can run the application locally by simply running
                    <code>mvn clean package jetty:run</code> (which starts the embedded Jetty server) or by
                    <code>java -cp target/classes:target/dependency/* com.example.heroku.Main</code> (this is how Jetty is
                    started on Heroku).
                </para>
            </tip>
        </para>
        <section xml:id="deploy-it-on-heroku">
            <title>Deploy it on Heroku</title>
            <para>
                We won't go into details how to create an account on &heroku.link; and setup the <literal>Heroku</literal> tools
                on your machine. You can find a lot of information in this article: <link xlink:href='https://devcenter.heroku.com/articles/getting-started-with-java'>Getting Started with Java on Heroku</link>.
                Instead, we'll take a look at the steps needed after your environment is ready.
            </para>
            <para>
                The first step is to create a Git repository from your project:
                <screen linenumbering="unnumbered">    $ git init
    Initialized empty Git repository in /.../simple-heroku-webapp/.git/</screen>
            </para>
            <para>
                Then, create a &heroku.link; instance and add a remote reference to your Git repository:
                <screen linenumbering="unnumbered">    $ heroku create
    Creating simple-heroku-webapp... done, stack is cedar
    http://simple-heroku-webapp.herokuapp.com/ | git@heroku.com:simple-heroku-webapp.git
    Git remote heroku added</screen>

                <note>
                    <para>
                        The name of the instance is changed in the output to <literal>simple-heroku-webapp</literal>. Your will be
                        named more like <literal>tranquil-basin-4744</literal>.
                    </para>
                </note>
            </para>
            <para>
                Add and commit files to your Git repository:
                <screen linenumbering="unnumbered">    $ git add src/ pom.xml Procfile system.properties</screen>
                <screen linenumbering="unnumbered">    $ git commit -a -m "initial commit"
    [master (root-commit) e2b58e3] initial commit
     7 files changed, 221 insertions(+)
     create mode 100644 Procfile
     create mode 100644 pom.xml
     create mode 100644 src/main/java/com/example/MyResource.java
     create mode 100644 src/main/java/com/example/heroku/Main.java
     create mode 100644 src/main/webapp/WEB-INF/web.xml
     create mode 100644 src/test/java/com/example/MyResourceTest.java
     create mode 100644 system.properties</screen>
            </para>
            <para>
                Push changes to Heroku:
                <screen linenumbering="unnumbered">    $ git push heroku master
    Counting objects: 21, done.
    Delta compression using up to 8 threads.
    Compressing objects: 100% (11/11), done.
    Writing objects: 100% (21/21), 3.73 KiB | 0 bytes/s, done.
    Total 21 (delta 0), reused 0 (delta 0)

    -----> Java app detected
    -----> Installing OpenJDK 1.8... done
    -----> Installing Maven 3.6.3... done
    -----> Installing settings.xml... done
    -----> executing /app/tmp/cache/.maven/bin/mvn -B -Duser.home=/tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd -Dmaven.repo.local=/app/tmp/cache/.m2/repository -s /app/tmp/cache/.m2/settings.xml -DskipTests=true clean install
    [INFO] Scanning for projects...
    [INFO]
    [INFO] ------------------ com.example:simple-heroku-webapp ------------------
    [INFO] Building simple-heroku-webapp 1.0-SNAPSHOT
    [INFO] --------------------------------[ war ]---------------------------------
    [INFO]
    [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ simple-heroku-webapp ---
    [INFO] Deleting /tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd/target
    [INFO]
    [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ simple-heroku-webapp ---
    [INFO] Using 'UTF-8' encoding to copy filtered resources.
    [INFO] skip non existing resourceDirectory /tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd/src/main/resources
    [INFO]
    [INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ simple-heroku-webapp ---
    [INFO] Compiling 2 source files to /tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd/target/classes
    [INFO]
    [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ simple-heroku-webapp ---
    [INFO] Using 'UTF-8' encoding to copy filtered resources.
    [INFO] skip non existing resourceDirectory /tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd/src/test/resources
    [INFO]
    [INFO] --- maven-compiler-plugin:2.5.1:testCompile (default-testCompile) @ simple-heroku-webapp ---
    [INFO] Compiling 1 source file to /tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd/target/test-classes
    [INFO]
    [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ simple-heroku-webapp ---
    [INFO] Surefire report directory: /tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd/target/surefire-reports

    -------------------------------------------------------
    T E S T S
    -------------------------------------------------------
    Running com.example.MyResourceTest
    Jan 29, 2021 9:13:20 AM org.glassfish.jersey.test.grizzly.GrizzlyTestContainerFactory$GrizzlyTestContainer
    INFO: Creating GrizzlyTestContainer configured at the base URI http://localhost:9998/
    Jan 29, 2021 9:13:20 AM org.glassfish.jersey.server.wadl.WadlFeature configure
    WARNING: JAXBContext implementation could not be found. WADL feature is disabled.
    Jan 29, 2021 9:13:21 AM org.glassfish.grizzly.http.server.NetworkListener start
    INFO: Started listener bound to [localhost:9998]
    Jan 29, 2021 9:13:21 AM org.glassfish.grizzly.http.server.HttpServer start
    INFO: [HttpServer] Started.
    Jan 29, 2021 9:13:21 AM org.glassfish.grizzly.http.server.NetworkListener shutdownNow
    INFO: Stopped listener bound to [localhost:9998]
    Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.476 sec

    Results :

    Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

    [INFO]
    [INFO] --- maven-war-plugin:2.2:war (default-war) @ simple-heroku-webapp ---
    [INFO] Packaging webapp
    [INFO] Assembling webapp [simple-heroku-webapp] in [/tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd/target/simple-heroku-webapp]
    [INFO] Processing war project
    [INFO] Copying webapp resources [/tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd/src/main/webapp]
    [INFO] Webapp assembled in [115 msecs]
    [INFO] Building war: /tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd/target/simple-heroku-webapp.war
    [INFO] WEB-INF/web.xml already added, skipping
    [INFO]
    [INFO] --- maven-dependency-plugin:2.8:copy-dependencies (copy-dependencies) @ simple-heroku-webapp ---
    [INFO] Copying jetty-util-9.4.28.v20200408.jar to /tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd/target/dependency/jetty-util-9.4.28.v20200408.jar
    [INFO] Copying jersey-hk2-2.33.jar to /tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd/target/dependency/jersey-hk2-2.33.jar
    [INFO] Copying javassist-3.25.0-GA.jar to /tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd/target/dependency/javassist-3.25.0-GA.jar
    [INFO] Copying jakarta.inject-2.6.1.jar to /tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd/target/dependency/jakarta.inject-2.6.1.jar
    [INFO] Copying hk2-locator-2.6.1.jar to /tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd/target/dependency/hk2-locator-2.6.1.jar
    [INFO] Copying hk2-utils-2.6.1.jar to /tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd/target/dependency/hk2-utils-2.6.1.jar
    [INFO] Copying hk2-api-2.6.1.jar to /tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd/target/dependency/hk2-api-2.6.1.jar
    [INFO] Copying jetty-webapp-9.4.28.v20200408.jar to /tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd/target/dependency/jetty-webapp-9.4.28.v20200408.jar
    [INFO] Copying jakarta.annotation-api-1.3.5.jar to /tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd/target/dependency/jakarta.annotation-api-1.3.5.jar
    [INFO] Copying jersey-server-2.33.jar to /tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd/target/dependency/jersey-server-2.33.jar
    [INFO] Copying jakarta.ws.rs-api-2.1.6.jar to /tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd/target/dependency/jakarta.ws.rs-api-2.1.6.jar
    [INFO] Copying osgi-resource-locator-1.0.3.jar to /tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd/target/dependency/osgi-resource-locator-1.0.3.jar
    [INFO] Copying aopalliance-repackaged-2.6.1.jar to /tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd/target/dependency/aopalliance-repackaged-2.6.1.jar
    [INFO] Copying jetty-servlet-9.4.28.v20200408.jar to /tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd/target/dependency/jetty-servlet-9.4.28.v20200408.jar
    [INFO] Copying jetty-xml-9.4.28.v20200408.jar to /tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd/target/dependency/jetty-xml-9.4.28.v20200408.jar
    [INFO] Copying jersey-container-servlet-2.33.jar to /tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd/target/dependency/jersey-container-servlet-2.33.jar
    [INFO] Copying jetty-io-9.4.28.v20200408.jar to /tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd/target/dependency/jetty-io-9.4.28.v20200408.jar
    [INFO] Copying jetty-security-9.4.28.v20200408.jar to /tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd/target/dependency/jetty-security-9.4.28.v20200408.jar
    [INFO] Copying jetty-server-9.4.28.v20200408.jar to /tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd/target/dependency/jetty-server-9.4.28.v20200408.jar
    [INFO] Copying javax.servlet-3.0.0.v201112011016.jar to /tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd/target/dependency/javax.servlet-3.0.0.v201112011016.jar
    [INFO] Copying jersey-common-2.33.jar to /tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd/target/dependency/jersey-common-2.33.jar
    [INFO] Copying jakarta.validation-api-2.0.2.jar to /tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd/target/dependency/jakarta.validation-api-2.0.2.jar
    [INFO] Copying jersey-container-servlet-core-2.33.jar to /tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd/target/dependency/jersey-container-servlet-core-2.33.jar
    [INFO] Copying jersey-client-2.33.jar to /tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd/target/dependency/jersey-client-2.33.jar
    [INFO] Copying jetty-http-9.4.28.v20200408.jar to /tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd/target/dependency/jetty-http-9.4.28.v20200408.jar
    [INFO]
    [INFO] --- maven-install-plugin:2.4:install (default-install) @ simple-heroku-webapp ---
    [INFO] Installing /tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd/target/simple-heroku-webapp.war to /app/tmp/cache/.m2/repository/com/example/simple-heroku-webapp/1.0-SNAPSHOT/simple-heroku-webapp-1.0-SNAPSHOT.war
    [INFO] Installing /tmp/build_992cc747-26d6-4800-bdb1-add47b9583cd/pom.xml to /app/tmp/cache/.m2/repository/com/example/simple-heroku-webapp/1.0-SNAPSHOT/simple-heroku-webapp-1.0-SNAPSHOT.pom
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time:  5.857 s
    [INFO] Finished at: 2021-01-29T09:13:23+01:00
    [INFO] ------------------------------------------------------------------------
    -----> Discovering process types
           Procfile declares types -> web

    -----> Compiled slug size: 75.9MB
    -----> Launching... done, v6
           http://simple-heroku-webapp.herokuapp.com deployed to Heroku

    To git@heroku.com:simple-heroku-webapp.git
     * [new branch]      master -> master</screen>
            </para>
            <para>
                Now you can access your application at, for example: <link xlink:href='http://simple-heroku-webapp.herokuapp.com/myresource'>http://simple-heroku-webapp.herokuapp.com/myresource</link>
            </para>
        </section>
    </section>

    <section xml:id="exploring-jersey-examples">
        <title>Exploring Other Jersey Examples</title>
        <para>
            In the sections above, we have covered an approach how to get dirty with Jersey quickly. Please consult the other
            sections of the Jersey User Guide to learn more about Jersey and JAX-RS.
            Even though we try our best to cover as much as possible in the User Guide, there is always a chance that you would
            not be able to get a full answer to the problem you are solving. In that case, consider diving in our examples that
            provide additional tips and hints to the features you may want to use in your projects.
        </para>
        <para>
            Jersey codebase contains a number of useful examples on how to use various JAX-RS and Jersey features.
            Feel free to browse through the code of individual
            <link xlink:href="&jersey.github.examples.uri;">Jersey Examples</link> in the Jersey source repository.
            For off-line browsing, you can also download a bundle with all the examples from
            <link xlink:href="http://central.maven.org/maven2/org/glassfish/jersey/bundles/jersey-examples/&version;/">here</link>.
        </para>
    </section>
</chapter>
