Java 版

Version 22.0.8500


Java 版


API Server のJava 版は、いくつかのサーバーオプションを使用して設定および実行できます。

  • 組み込みJetty ベースサーバー

  • 外部Jetty サーバー

  • 外部Tomcat サーバー

各オプションについて以下で説明します。

組み込みJetty サーバー

API Server にはJetty 上に構築されたWeb サーバーがバンドルされており、ほとんどのデプロイメントシナリオに最適です。CData では、別の設定が必要な場合を除き、この組み込みJetty サーバーを使用することを推奨しています。

アプリケーションの起動

以下の方法で、アプリケーションを起動できます。

Java コマンドを使用

ターミナルを開きAPI Server インストールディレクトリに移動します。次の例に示すように、Java コマンドを実行してapiserver.jar ファイルを実行します。

java -jar apiserver.jar

Linux サービスを使用

Linux プラットフォームでAPI Server サービスのインストール を行うと、次の例で示すようにターミナルで開始、停止、および再開コマンドを実行できます。

systemctl [start | stop | restart] cdata-apiserver

管理コンソールへのアクセス

デフォルトでは、組み込みサーバーはポート8080でAPI Server をホストし、プレーンテキスト接続のみを許容します(HTTPS ではなくHTTP)。

サーバーを起動したら、Web ブラウザでhttp://localhost:8080 にアクセスし、管理コンソールにアクセスします。UI にアクセスするためのデフォルトのユーザー名/パスワード認証情報は、admin/admin です。

アプリケーションの設定

このWeb サーバーの構成はwebapp/apiserver.xml に含まれています。このファイルは、デプロイに合わせて変更することができます。XML コメント内のapiserver.xml のコンテンツに変更例がいくつかありますが、有効なjetty.xml 設定はすべて受け入れられます。

ポートの変更

組み込みサーバーがリッスンするポートを設定するには、インストールディレクトリにあるapiserver.xml ファイルを見つけます。HTTP コネクタの定義を見つけます。

<New id="httpConnector" class="org.eclipse.jetty.server.ServerConnector">

この定義内で、次の行を変更して設定済みのポートを変更します。

<Set name="port">8080</Set>

SSL/TLS の有効化

SSL/TLS 接続(HTTPS)を有効化する場合にも、以下のように、インストールディレクトリのapiserver.xml ファイルを修正します。

  1. HTTP コネクタの定義を見つけます。

     <New id="httpConnector" class="org.eclipse.jetty.server.ServerConnector">
    
  2. この定義内で(手順1の上記<New> エレメントの直接の子として)、次のXML ブロックを追加してsslContextFactory 引数を指定します。

         <Arg name="sslContextFactory">
            <New id="sslContextFactory" class="org.eclipse.jetty.util.ssl.SslContextFactory$Server">
               <Set name="KeyStorePath"><SystemProperty name="apiserver.home" default="." />/keystore</Set>
               <Set name="KeyStorePassword">mypassword</Set>
            </New>
         </Arg>
    

Note:上記の<Arg> エレメントは、コネクタ定義の先頭で他の<Arg> エレメントに隣接している必要があります。このブロックは、例えばサーバーポートを定義する<Set> エレメントの後ろに配置してはいけません。

KeyStorePath プロパティは、SSL/TLS サーバーをホストするときに使用されるSSL/TLS 証明書の場所を定義します。前の例では、API Server のデータディレクトリ(デフォルトではC:\ProgramData\CData\apiserver 内)にkeystore という名前のJava keystore ファイルが作成されていると仮定しています。KeyStorePassword プロパティは、構成された証明書に対応するパスワードに設定する必要があります。

また、次の例のように、パスワード付きのキー参照を追加することで、PFX ファイル経由で秘密鍵を参照することができます。

<Arg name="sslContextFactory">
  <New id="sslContextFactory" class="org.eclipse.jetty.util.ssl.SslContextFactory">
    <Set name="KeyStorePath"><SystemProperty name="apiserver.home" default="."/>mycertificate.pfx</Set>
    <Set name="KeyStorePassword">mypassword</Set>
    <Set name="KeyStoreType">PKCS12</Set>
  </New>
</Arg>

Note:API Server で設定するために外部秘密鍵を取得する場合は、必ず証明書の所有者をAPI Server をホストするために使用されるサービスアカウントに変更してください。

ユーザークレデンシャルの変更

API Server Web UI にログイン可能なユーザーは、インストールディレクトリの’apiserverRealm.properties’ ファイルで定義されています。このファイルの各行は、次の構文でユーザーを定義します。

ユーザー名:パスワード\[ロール\]

新しいユーザーを定義するには行を追加し、デフォルトのログイン認証情報を変更する場合は既存の行を変更してください。

ロードバランシングの設定

組み込み用Jetty サーバーでロードバランシングの設定を行うには、以下の項目を同期させておく必要があります。

  • API Server アプリケーションファイル(apiserver.war)
  • データソースへの接続に使用するJDBC ドライバー

Jetty の設定ファイルには直接アクセスできません。代わりに、インストールした場所のwebapp\ サブディレクトリにあるapiserver.xml ファイルのWebAppContext エレメントでカスタムデータベースリソースを設定することができます。以下の例は、この設定を示しています。

<WebAppContext>
  <Call name="setHandler">
    <Arg>
      <New id="apiserver" class="org.eclipse.jetty.webapp.WebAppContext">
        [...]
        <Call name="setInitParameter">
          <Arg>APP_DB</Arg>
          <Arg>jdbc:mysql:Server=my_server;Port=3306;Database=my_database;User=my_user;Password=my_password</Arg>
        </Call>
        <Call name="setInitParameter">
          <Arg>APP_USERS</Arg>
          <Arg>jdbc:mysql:Server=my_server;Port=3306;Database=my_database;User=my_user;Password=my_password</Arg>
        </Call>
        <Call name="setInitParameter">
          <Arg>APP_LOGS</Arg>
          <Arg>jdbc:mysql:Server=my_server;Port=3306;Database=my_database;User=my_user;Password=my_password</Arg>
        </Call>
      </New>
    </Arg>
  </Call>
</WebAppContext>

API Server のベースURL が、API Server のインストールされているサーバーと一致しない場合、手動でベースURL を設定する必要があります。以下の手順で行います。

  1. API サーバーに管理アカウントでログインします。
  2. 設定 -> サーバーと選択します。
  3. OData セクションで、Base URL のフィールドに希望のURL を入力します。

メタデータURL など、API Server を参照するURL が生成される場合は、このカスタムベースURL を意味します。

管理API(Admin API)の有効化

Admin API はデフォルトでは有効になっていません。手動で有効化する場合は、以下の手順で行います。

  1. WEB-INF/web.xml ファイルを任意のテキストエディタで開いてください。
  2. security-constraint セクションに移動し、表示名を Restrict direct access to Management API とし、

     <auth-constraint/>
    

    の行を、

    ```xml

    cdata_admin

    ``` に変更します。

  3. ファイルへの変更を保存します。
  4. API サーバーを再起動します。

API Server 管理API に、管理者ユーザーとしてエンドポイント admin.rst (ドキュメント)や admin.rsc でアクセスできるようになりました。

Note:管理API は、API ユーザーである admin のみがアクセス可能です。その他のAPI ユーザーはアクセスを拒否されます。

AWS AMI

AWS AMI 用API Server は、Java/Jetty を使用しています。この環境で管理API を有効にするには、上記と同じ手順で行います。web.xml ファイルは、次のパスにあります。

/opt/apiserver/work/jetty-0.0.0.0-8443-apiserver.war-_-any-/webapp/WEB-INF/web.xml

API Server のサービスを再起動するために、次のコマンドを使用します。

systemctl restart jetty

通知の管理

通知を設定するには、管理コンソールで設定ページを開き、通知を選択します。API Server に関する通知をE メールで受け取るには、メールのFromTo件名を設定し、SMTP サーバーの認証とセキュリティプロパティを設定します。

外部Jetty サーバー

API Server にはJetty Web サーバーが組み込まれていますが、アプリケーションを外部のJetty 設定で使用することもできます。

WAR ファイルの配布

WAR ファイルをJetty のwebapps フォルダにコピーします。

Jetty ユーザーへのアクセスの許可

Jetty を開始する前に、Jetty ユーザーにcdata_admin ロールをアサインすることで、アプリケーションへのアクセスを許可します。例えば、JETTY_HOME/etc/realm.properties ファイルを開くことで、管理ユーザーにこのロールを追加することができます。ユーザーのプロパティはパスワードとユーザーロールによって作られています。次に例を示します。

admin: test,server-administrator,content-administrator,admin,user,cdata_admin

Java レルムのログインサービスの設定

また、アプリケーションへのログインサービスの設定をCDataRealm という名前で行わなれければなりません。以下は、HashLoginService の例です:

<Call name="addBean">
  <Arg>
    <New class="org.eclipse.jetty.security.HashLoginService">
      <Set name="name">CDataRealm</Set>
      <Set name="config"><Property name="jetty.home" default="."/>/etc/realm.properties</Set>
    </New>
  </Arg>
</Call>

データディレクトリ権限の設定

Java サーブレットコンテナを実行するプロセスのユーザーに、データディレクトリへの読み/書きのアクセス権限を許可:

  • Windows: C:\\ProgramData\\CData\\
  • Unix or Mac OS X: ~/cdata/

サーバーを再起動して、アプリケーションにログインします。

ロードバランシングの設定

外部Jetty サーバーでロードバランシングの設定を行うには、以下の項目を同期させておく必要があります。

  • API Server アプリケーションファイル(apiserver.war)
  • データソースへの接続に使用するJDBC ドライバー

以下の手順でこれらのリソースを設定します。

  1. $JETTY_HOME/start.ini で、コマンド--module=plus を使用して、jetty-plus モジュールを有効にします。

  2. オープンソースのJDBC MySQL ドライバーを$JETTY_HOME/lib/ext に追加します。

  3. jetty.xml ファイルに以下のエントリを追加します。

     <Configure id="Server" class="org.eclipse.jetty.server.Server">
       [...]
       <New Id="AppUsers" class="org.eclipse.jetty.plus.jndi.Resource">
         <Arg></Arg>
         <Arg>jdbc/APP_USERS</Arg>
         <Arg>
           <New class="com.mysql.cj.jdbc.MysqlConnectionPoolDataSource">
             <Set name="url">jdbc:mysql://my_server:3306/my_database</Set>
             <Set name="User">my_username</Set>
             <Set name="Password">my_password</Set>
           </New>
         </Arg>
       </New>
     </Configure>
    
  4. $JETTY_BASE/work/[app_name]/webapp/WEB-INF/web.xmlweb-app タグ内にある apiserver.xml に、新しく追加されたリソースへの参照を追加します。

     <web-app>
       [...]
       <resource-ref>
         <description>App Security Datasource</description>
         <res-ref-name>jdbc/APP_USERS</res-ref-name>
         <res-type>javax.sql.DataSource</res-type>
         <res-auth>Container</res-auth>
       </resource-ref>
     </web-app>
    
  5. Jetty のサービスを再起動すると、API Server は新しく定義されたデータベースを使用するようになります。

API Server のベースURL が、API Server のインストールされているサーバーと一致しない場合、手動でベースURL を設定する必要があります。以下の手順で行います。

  1. API サーバーに管理アカウントでログインします。
  2. 設定 -> サーバーと選択します。
  3. OData セクションで、Base URL のフィールドに希望のURL を入力します。

メタデータURL など、API Server を参照するURL が生成される場合は、このカスタムベースURL を意味します。

Tomcat サーバー

次の手順で、Tomcat にアプリケーションをインストールできます。

WAR ファイルの配布

Tomcat にWAR ファイルを配布するにはいくつかのオプションがあります。

  • webapps フォルダにWAR ファイルをコピーする。
  • Tomcat の管理コンソール内でWAR ファイルの配布を行う。Tomcat のドキュメントには、この方法のさらに詳しい説明があります。

WAR ファイルがTomcat のファイルアップロードに許可されているデフォルトの最大サイズを超える可能性があります。デプロイメント中のエラーを解決するために、Manager アプリケーションのWEB.XML ファイルを変更して、より大きなファイルを許可することができます。Tomcat の設定に応じて、このファイルは/usr/share/tomcat7-admin/manager/WEB-INF、または類似ディレクトリにあります。このファイルでは、許容される最大ファイルサイズ(ビット単位)を変更できます。例えば、200MB のWAR ファイルのデプロイメントを許容するには、次の値を変更して許容される最大ファイルサイズを変更します。

<multipart-config>
	<!-- 200MB max -->
	<max-file-size>209715200</max-file-size>
	<max-request-size>209715200</max-request-size>
	<file-size-threshold>0</file-size-threshold>
</multipart-config>

Tomcat ユーザーにAPI Server へのアクセスを許容

アプリケーションの管理者となる人に、cdata_admin ロールをアサインします。Tomcat のデフォルトのユーザーレルムを使用している場合は、CATALINA_BASE/conf/tomcat-users.xml にあるtomcat-user.xml ファイルを編集することで、これらのロールを追加することができます。次の例では、管理ユーザーは、アプリケーションへの管理アクセスのために必要なロールを与えられています。

<user name="admin" password="admin" roles="cdata_admin,admin-gui,manager-gui,manager-status,manager-script,manager-jmx" />

データディレクトリ権限の設定

Java サーブレットコンテナを実行するプロセスのユーザーに、データディレクトリへの読み/書きのアクセス権限を許可:

  • Windows: C:\\ProgramData\\CData\\
  • Unix or Mac OS X: ~/cdata/

特定のLinux ディストリビューションでは、SELinux のような追加のカーネルセキュリティモジュールによって、Data ディレクトリへの書き込みアクセスが無効になる場合があることに注意してください。アクセスを有効にするには、カーネルセキュリティモジュールのドキュメントを参照してください。

Tomcat サーバーを再起動して、変更を反映します。これでアプリケーションにログインすることができます。

ロードバランシングの設定

Tomcat でロードバランシングの設定を行うには、以下の項目を同期させておく必要があります。

  • API Server アプリケーションファイル(apiserver.war)
  • データソースへの接続に使用するJDBC ドライバー

Tomcat では、これらをリソースとして server.xml ファイルの <Host> タグ内に定義することができます。以下の例は、この設定を示しています。

<Host>
  <Context path="/apiserver">
    <Resource name="jdbc/APP_USERS" auth="Container" type="javax.sql.DataSource"
      maxActive="100" maxIdle="30" maxWait="10000"
      driverClassName="cdata.jdbc.mysql.MySQLDriver"
      url="jdbc:mysql:Server=myServer;Port=3306;Database=myDB;User=user;Password=pass;"/>
  </Context>
</Host>

使用するTomcat のバージョンによっては、Resource パスに属性ファクトリーが必要な場合があります。必要な場合は、次の例のような構成にします。

<Host>
  <Context path="/apiserver">
    <Resource name="jdbc/APP_USERS" auth="Container" type="javax.sql.DataSource"
      factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
      maxActive="100" maxIdle="30" maxWait="10000"
      driverClassName="cdata.jdbc.mysql.MySQLDriver"
      url="jdbc:mysql:Server=myServer;Port=3306;Database=myDB;User=user;Password=pass;"/>
  </Context>
</Host>

API Server のベースURL が、API Server のインストールされているサーバーと一致しない場合、手動でベースURL を設定する必要があります。以下の手順で行います。

  1. API サーバーに管理アカウントでログインします。
  2. 設定 -> サーバーと選択します。
  3. OData セクションで、Base URL のフィールドに希望のURL を入力します。

メタデータURL など、API Server を参照するURL が生成される場合は、このカスタムベースURL を意味します。

ユーザー管理

Java バージョンのAPI Server Web アプリケーションはフォーム認証を使います。

Java では、ユーザーのロールとパスワードは、Web サーバーのJava レルム設定で管理されます。ユーザーのロールとパスワードの設定方法は、お客様のWeb サーバーのドキュメントを参照してください。アプリケーションにはcdata_admin ロールが必要です。