[[api-java]]
== Java API

deprecated[7.0.0, The `TransportClient` is deprecated in favour of the https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.15/java-rest-high.html[Java High Level REST Client] and will be removed in Elasticsearch 8.0. The https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.15/java-rest-high-level-migration.html[migration guide] describes all the steps needed to migrate.]

{xpack} provides a Java client called `WatcherClient` that adds native Java
support for the {watcher}.

To obtain a `WatcherClient` instance, make sure you first set up the
`XPackClient`.

[discrete]
=== Installing XPackClient

You first need to make sure the +x-pack-transport-{version}+ JAR file is in the classpath.
You can extract this jar from the downloaded {xpack} bundle.

If you use Maven to manage dependencies, add the following to the `pom.xml`:

["source","xml",subs="attributes,callouts"]
--------------------------------------------------
<project ...>

   <repositories>
      <!-- add the elasticsearch repo -->
      <repository>
         <id>elasticsearch-releases</id>
         <url>https://artifacts.elastic.co/maven</url>
         <releases>
            <enabled>true</enabled>
         </releases>
         <snapshots>
            <enabled>false</enabled>
         </snapshots>
      </repository>
      ...
   </repositories>
   ...

   <dependencies>
      <!-- add the x-pack jar as a dependency -->
      <dependency>
         <groupId>org.elasticsearch.client</groupId>
         <artifactId>x-pack-transport</artifactId>
         <version>{version}</version>
      </dependency>
      ...
   </dependencies>
   ...

 </project>
--------------------------------------------------

If you use Gradle, add the dependencies to `build.gradle`:

["source","groovy",subs="attributes,callouts"]
--------------------------------------------------------------
repositories {
  /* ... Any other repositories ... */

  // Add the Elasticsearch Maven Repository
  maven {
    name "elastic"
    url "https://artifacts.elastic.co/maven"
  }
}

dependencies {
  // Provide the x-pack jar on the classpath for compilation and at runtime
  compile "org.elasticsearch.client:x-pack-transport:{version}"

  /* ... */
}
--------------------------------------------------------------

You can also download the https://artifacts.elastic.co/maven/org/elasticsearch/client/x-pack-transport/{version}/x-pack-transport-{version}.jar[X-Pack Transport JAR]
manually, directly from our Maven repository.

[discrete]
=== Obtaining the `WatcherClient`

To obtain an instance of the `WatcherClient` you first need to create the
`XPackClient`. The `XPackClient` is a wrapper around the standard Java
Elasticsearch `Client`:

[source,java]
--------------------------------------------------
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.xpack.client.PreBuiltXPackTransportClient;
import org.elasticsearch.xpack.core.XPackClient;
import org.elasticsearch.xpack.core.XPackPlugin;
import org.elasticsearch.core.watcher.client.WatcherClient;
...

TransportClient client = new PreBuiltXPackTransportClient(Settings.builder()
    .put("cluster.name", "myClusterName")
    ...
    .build())
    .addTransportAddress(new TransportAddress(InetAddress.getByName("localhost"), 9300));

XPackClient xpackClient = new XPackClient(client);
WatcherClient watcherClient = xpackClient.watcher();
--------------------------------------------------

include::java/put-watch.asciidoc[]

include::java/get-watch.asciidoc[]

include::java/delete-watch.asciidoc[]

include::java/execute-watch.asciidoc[]

include::java/ack-watch.asciidoc[]

include::java/activate-watch.asciidoc[]

include::java/deactivate-watch.asciidoc[]

include::java/stats.asciidoc[]

include::java/service.asciidoc[]
