#!/bin/sh

#
# 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.
#
THIS_DIR=$(dirname $0)
LIB_DIR=$THIS_DIR/../../lib/java/
IVY_DIR=$LIB_DIR/build/ivy/lib/

# Optionally the following properties could be set for SSL instead
# of configuring it in the code
# -Djavax.net.ssl.trustStore=../../lib/java/test/.truststore
# -Djavax.net.ssl.trustStorePassword=thrift
# -Djavax.net.ssl.keyStore=../../lib/java/test/.keystore
# -Djavax.net.ssl.keyStorePassword=thrift

java -cp $IVY_DIR/*:$LIB_DIR/libthrift.jar:tutorial.jar JavaServer
