blob: ecd2eb3ef1137d658c1e4bc10e5317d0a013bbe9 [file] [log] [blame]
// ***************************************************************************************************************************
// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file *
// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file *
// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance *
// * with the License. You may obtain a copy of the License at *
// * *
// * http://www.apache.org/licenses/LICENSE-2.0 *
// * *
// * 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. *
// ***************************************************************************************************************************
package org.apache.juneau.examples.rest;
import java.net.*;
import java.util.*;
import org.apache.juneau.microservice.jetty.*;
import org.apache.juneau.parser.*;
import org.apache.juneau.rest.client.*;
import org.apache.juneau.serializer.*;
/**
* Utility class for starting up the examples microservice.
* <p>
* This class is NOT thread safe.
*/
public class SamplesMicroservice {
static volatile JettyMicroservice microservice;
static URI microserviceURI;
// Reusable HTTP clients that get created and shut down with the microservice.
public static RestClient DEFAULT_CLIENT;
public static RestClient DEFAULT_CLIENT_PLAINTEXT;
/**
* Starts the microservice.
* @return <jk>true</jk> if the service started, <jk>false</jk> if it's already started.
* If this returns <jk>false</jk> then don't call stopMicroservice()!.
*/
public synchronized static boolean startMicroservice() {
if (microservice != null)
return false;
try {
Locale.setDefault(Locale.US);
microservice = JettyMicroservice.create().workingDir("../juneau-examples-rest-jetty").configName("juneau-examples-rest-jetty.cfg").servlet(RootResources.class).build();
microserviceURI = microservice.start().getURI();
DEFAULT_CLIENT = client().json().build();
DEFAULT_CLIENT_PLAINTEXT = client().plainText().build();
return true;
} catch (Throwable e) {
// Probably already started.
e.printStackTrace();
System.err.println(e); // NOT DEBUG
return false;
}
}
/**
* Returns the URI of the microservice.
* @return The URI of the microservice.
*/
public static URI getURI() {
if (microservice == null)
startMicroservice();
return microserviceURI;
}
/**
* Stops the microservice.
*/
public synchronized static void stopMicroservice() {
try {
microservice.stop();
microservice = null;
DEFAULT_CLIENT.closeQuietly();
DEFAULT_CLIENT_PLAINTEXT.closeQuietly();
} catch (Exception e) {
System.err.println(e); // NOT DEBUG
}
}
/**
* Create a new HTTP client.
*/
public static RestClientBuilder client() {
try {
return RestClient.create().rootUrl(microserviceURI);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* Create a new HTTP client using the specified serializer and parser.
*/
public static RestClientBuilder client(Serializer s, Parser p) {
return client().serializer(s).parser(p);
}
/**
* Create a new HTTP client using the specified serializer and parser.
*/
public static RestClientBuilder client(Class<? extends Serializer> s, Class<? extends Parser> p) {
return client().serializer(s).parser(p);
}
}