Java 版


Java 版


Java 版には組み込みJetty Web サーバーが含まれ、外部サーバー構成なしでSync を実行できます。さらに、インストールにはTomcat、Jetty、JBoss、WebLogic、WebSphere などのJava サーブレットコンテナにデプロイ可能な.WAR ファイルが含まれています。

組み込みJetty サーバーの使用には、JDK 1.8、またはそれ以上のバージョンがマシンにインストールされている必要があります。外部Java サーブレットコンテナへのデプロイにはサーブレット3.0(Jetty 8+、Tomcat 7+、JBoss EAP 6/7、Glassfish 3、WebLogic 12+、WebSphere 8+、etc)が必要です。

Note:Sync のデプロイ方法に関わらず、AppDirectory 内のファイルおよびフォルダは、アプリケーションを実行しているユーザーによって読み取り / 書き込み可能である必要があります。Java 版のセットアップに付属のサービスインストーラーは’cdatasync’ をこのユーザーとして使用します。

アプリケーションが以前別のユーザーで実行されていて、’cdatasync’ ユーザーがアプリケーションを実行するために必要な権限を復元したい場合は、コマンドは以下のようになります:

sudo chown -R cdatasync:cdatasync /opt/sync.

組み込みJetty サーバーの使用

組み込みJetty サーバーを起動するには、Sync インストールディレクトリにあるsync.jar を実行するだけです。このディレクトリには、Unix システム上でsystemd またはinit.d サービスを設定するために使用できるservice スクリプトも含まれています。

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

サーバーを起動したら、ブラウザでhttp://localhost:8181 に移動してWeb UI にアクセスします。The application will prompt for creating the username/password credentials for the first user of the application (which will have the role of ‘admin’).

ポートの変更

組み込みサーバーがリッスンするポートを設定するには、インストールディレクトリにあるsync.xml ファイルを見つけ、テキストエディタで開きます。このXML で示されているHTTP コネクタの定義を見つけます。

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

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

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

SSL/TLS の有効化

SSL/TLS 接続(HTTPS)を有効にするには、インストールディレクトリのsync.xml ファイルを変更する必要もあります。HTTP コネクタの定義を見つけます。

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

この定義内で(上記のNew エレメントの直接の子として)、次のXML ブロックを追加してsslContextFactory 引数を指定します。

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

Note: The Arg element shown above must be adjacent to other Arg elements at the beginning of the connector definition.This block must not be placed after the Set element that defines the server port, for example.

KeyStorePath 要素は、SSL/TLS サーバーをホストするときに使用されるSSL/TLS 証明書の場所を定義します。上記の例では、Sync インストールディレクトリに’keystore’ フォルダが作成され、このフォルダに’mycert’ というPFX 証明書が含まれていることを前提としています。KeyStorePassword 要素は、構成された証明書に対応するパスワードに設定する必要があります。

You can also reference a private key via a pfx file using an additional key reference, as shown in the example below:

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

Note:If you obtain an external private key for configuration in Sync, be sure to change the owner of the certificate to the service account that is used to host Sync (cdatasync:cdatasync).

サーバーの起動と停止

If the service script has been used to set up a CData Sync service, please reference the Running as a Service section below.Otherwise, the Running In-Process section is applicable.

インプロセスで実行

The embedded Jetty server is started by executing the sync.jar file extracted from the application download during setup.Standard Java syntax can be used to execute this file and start the server:

java -jar sync.jar

To stop the server, simply pass an additional parameter to this command:

java -jar sync.jar -stop

サービスとして実行

The Sync service can be manipulated using standard system service commands, referencing ‘sync’ as the name of the service.

To start the service:

systemctl start sync

To stop the service:

systemctl stop sync

To restart the service:

systemctl restart sync

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>

JAAS の設定

Sync がアプリケーション内のユーザーを動的に管理するには、次のサブセクションで記載されている通りにJAAS を設定する必要があります。

ログインモジュール

Create a JAAS configuration file with the name jaas.config located here: $CATALINA_BASE/conf/jaas.config

The content for this file should be as follows:

Sync {
  sync.LoginModule required;
};

JAASRealm モジュール

Create a context for Sync by by creating (or modifying, if it is present) the configuration XML file located here: $CATALINA_BASE/conf/Catalina/localhost/sync.xml

Define a Context block and add a Realm element as follows:

<Context>
	<Realm className="org.apache.catalina.realm.JAASRealm" appName="Sync"
    userClassNames="sync.SimplePrincipal"
    roleClassNames="sync.GroupPrincipal" />
</Context>

Then, update the Host element in server.xml configuration file for the Tomcat server by setting the copyXML attribute to true, like the following:

<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true" copyXML="true">
  ...
</Host>

Make the Login Module Visible

The JVM must be pointed towards the Login Module (jaas.config) in order for the configuration to be visible.Set the java.security.auth.login.config system property on the JVM to the path to the jaas.config file.This can be done by appending to the $CATALINA_BASE/conf/catalina.properties file as follows:

java.security.auth.login.config=${catalina.base}/conf/jaas.config

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

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

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

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

JBoss での設定

JBoss AS はサポートされていません。

WAR ファイルの配布

WAR ファイルをJBoss に配布するにはいくつか方法があります。

  • JBOSS_HOME/standalone/deployments サブフォルダにWAR ファイルをコピーする。
  • JBoss の管理コンソールを使ってWAR ファイルをインストールする。

JAAS の設定

Sync がアプリケーション内のユーザーを動的に管理するには、次のサブセクションで記載されているとおりにJAAS を設定する必要があります。

ログインモジュール

Edit the standalone.xml configuration file (located here: standalone/configuration/standalone.xml) with a login module as follows:

<subsystem xmlns="urn:jboss:domain:security:2.0">
  <security-domain name="SyncRealm" cache-type="default">
      <authentication>
          <login-module code="sync.LoginModule" flag="required">
              <module-option name="isJBoss" value="true"/>
          </login-module>
      </authentication>
  </security-domain>
</subsystem>

JBoss Web ファイル

デプロイメントのWEB-INF フォルダ内にjboss-web.xml を作成します。ファイル内容を次のように設定します。

<jboss-web>
    <security-domain>java:/jaas/SyncRealm</security-domain>
</jboss-web>

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

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

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

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

WebSphere での設定

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

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

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

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

Configure the WebSphere Class Loader

In order for WebSphere to load the application resources correctly, the following steps are required:

  1. Within WebSphere, navigate to:Application -> Application Types -> WebSphere enterprise applications
  2. Select Sync
  3. Select ‘Class loading and update detection’
  4. Choose ‘Classes loaded with local class loader first (parent last)’
  5. Choose ‘Single class loader for application’
  6. Select OK -> Save

JAAS の設定

The following process is required to allow Sync to dynamically manage users in WebSphere Application Server:

  • Deploy CData Sync
  • Enable application security
    • Security → Global security → Enable application security
  • Add custom login module to System Login
    • Security → Global security → Java Authentication and Authorization Service → System logins → WEB_INBOUND → New → sync.LoginModule
    • Check the “Use login module proxy”
    • Select OPTIONAL under Authentication strategy
    • Add isWebSphere under Custom properties, set it to true
    • The sync.LoginModule must be prior to the com.ibm.ws.security.server.lm.ltpaLoginModule.
  • Create groups
    • Users and Groups → Manage Groups → Create
    • Create sync_admin_, sync_standard, sync_operator groups
  • Map groups to roles
    • Applications → Application Types → WebSphere enterprise applications → sync_war\ → security role to user/group mapping
    • Map sync_admin group to sync_admin role
    • Map sync_standard group to sync_standard role
    • Map sync_support group to sync_operator role
    • Map “All Authenticated in Application’s Realm” to sync_user_ role
  • Set the com.ibm.ws.webcontainer.AllowQueryParamWithNoEqual property to true:
    • Navigate to Server → Server Types → Web Sphere Application Servers, and select the server you are hosting CData Sync on
    • Select Container Settings → Web Container Settings → Web Container
    • Select Additional Properties → Custom Properties
    • Add a new property: com.ibm.ws.webcontainer.AllowQueryParamWithNoEqual
    • Set the value to true.
  • Restart WebSphere

WebLogic での設定

WAR ファイルの配布

WebLogic の配布ウィザードを使ってWAR ファイルを配布するには:

  1. [デプロイメント]をクリックします。
  2. [デプロイメント]テーブルで、[インストール]をクリックします。
  3. WAR ファイルのパスを入力し、リストからWAR ファイルを選択します。
  4. [デプロイメントをアプリケーションとしてインストールする]を選択します。
  5. [カスタムロール]を選択:管理コンソールで定義されたロールを使います。デプロイメントディスクリプターで定義されたポリシーを使います。このオプションを選択することで、WebLogic の管理コンソールでロールとユーザーの管理ができるようになります。一方、WebLogic は、アプリケーションで定義されたロールとポリシーをロードします。

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

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

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

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

Jetty での設定

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

WAR ファイルの配布

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

JAAS の設定

The following steps are required to configure JAAS and allow Sync to manage application users.

JAAS モジュールの追加

Run the following command to install the JAAS module:

java -jar {JETTY_HOME}/start.jar --add-to-start=jaas

ログインモジュールの作成

Create a login configuration file with the name login.config located here: etc/login.conf

The content for this file should be as follows:

Sync {
    sync.LoginModule required debug=true;
};

Update the Security Handler

The Security Handler configuration can be found in the sync.xml configuration file.Modify the securityHandler block as follows:

<Set name="securityHandler">
  <New class="org.eclipse.jetty.security.ConstraintSecurityHandler">
   <Set name="loginService">
     <New class="org.eclipse.jetty.jaas.JAASLoginService">
       <!-- This name is the same as **login-config -> realm-name** in web.xml  -->
       <Set name="name">SyncRealm</Set>
       <!-- The LoginModuleName must match the name of your LoginModule as declared in your login module configuration file -->
       <Set name="loginModuleName">Sync</Set>
       <!-- Set custom role principal class name -->
       <Set name="roleClassNames">
           <Array type="java.lang.String">
             <Item>sync.GroupPrincipal</Item>
           </Array>
         </Set>
     </New>
   </Set>
  </New>
</Set>

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

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

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

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

ユーザー管理

Upon first starting, Sync will prompt for the creation of a user with username/password credentials.After this first user is created, users can be added, deleted, and managed via the Settings page of the application, under the Users tab.

When deploying Sync to an external Java servlet (i.e. when not using the embedded server included with the application), JAAS configuration is required to allow Sync to manage users.The sections above detail the process of JAAS configuration for each specific external servlet.

Find and Configure the Application Directory

Sync’s Application Directory holds all of the data used by the application: configuration data, application data, logging data, certificates, etc.The default location of the Application Directory depends on whether Sync is hosted via the embedded web server or an external Java servlet container.

For the embedded web server, the Application Directory is the same as the installation directory, which by default is the following:

/opt/cdata/sync

When hosting Sync in an external Java servlet container, the Application Directory is relative to the home directory of the user running the server:

~/cdata/sync (where ‘~’ resolves to the home directory of the user running the server hosting the application)

The Application Directory folder can be configured, which is useful in a variety of scenarios:

  • Clustering multiple instances of Sync
  • Using a shared network drive for application data
  • Embed Sync within other systems accessing the same folders

Changing the Application Directory will move the application’s data files but will not move other application resources like .exe’s, .jar’s, etc.These resources are held in the Installation Directory, which may be the same as the Application Directory but will not change if the Application Directory is changed.

組み込みJava サーバー

When using the Java edition with the embedded Jetty server, the application database is configured in the sync.xml file found in the Installation Directory.Within this server configuration file, the AppDirectory environment variable must be set to the path to the desired directory.The following example demonstrates what this might look like when setting the data directory to a shared folder on a mounted drive:

<Call name="setInitParameter">
  <Arg>AppDirectory</Arg>
  <Arg>/mnt/shared/sync</Arg>
</Call>

If Sync can find the path, and has the appropriate permissions to read and write at the given path, it will create the data folder within the specified directory.

External Java Server

When using the Java edition with an external Java servlet (any server other than the Jetty server that is included with the application), the details of configuring the application data directory depend upon the specific servlet used.Using the syntax appropriate for the specific servlet, the AppDirectory environment variable must be set to the path to the desired directory.

If Sync can find the AppDirectory path, and has the appropriate permissions to read and write at the given path, it will create the data folder within the specified directory.

Configure the Application Database

Sync’s Application Database stores several tables of application data, including:

  • Jobs
  • Tasks
  • Connections
  • History (both Jobs and Tasks)
  • Application Settings
  • Application Log (application-level errors and events)
  • Audit Log (user-made changes to Sync’s configuration)

By default, Sync uses a Derby database located in the Application Directory as the Application Database, but this can be configured to use an enterprise database like SQL Server, PostgreSQL, or MySQL.

組み込みJava サーバー

When using the Java edition with the embedded Jetty server, the application database is configured in the sync.xml file found in the installation directory.Within this server configuration file, the APP_DB environment variable must be set to a JDBC connection string containing the appropriate connection parameters for the desired database.For example:

<Call name="setInitParameter">
  <Arg>APP_DB</Arg>
  <Arg>jdbc:mysql:Server=MySQLServer;Port=3306;Database=mysql;User=user;Password=password</Arg>
</Call>

If Sync can successfully establish a connection with the APP_DB connection string, it will use that database as the application database.

JNDI 接続

If you want to leverage JNDI connection pooling with the embedded Jetty server, open sync.xml and add a JNDI resource named java:comp/env/jdbc/APP_DB, which is an instance of cdata.jdbc.mysql.MySQLConnectionPoolDataSource, as shown below:

<New id="DSTest" class="org.eclipse.jetty.plus.jndi.Resource">
  <Arg>java:comp/env/jdbc/APP_DB</Arg>
  <Arg>
    <New class="cdata.jdbc.mysql.MySQLConnectionPoolDataSource">
      <Set name="Url">jdbc:cdata:mysql:Server=192.168.1.1;Port=3306;Database=MyDatabase;User=root;Password=xA123456;UseConnectionPooling=true</Set>
    </New>
  </Arg>
</New>

Set the connection parameters in the Url property of the cdata.jdbc.mysql.MySQLConnectionPoolDataSource class.Note that you must add the parameter UseConnectionPooling=true to this connection string to enable connection pooling.

After configuring sync.xml, you must add the MySQL or PostgreSQL driver to your Sync installation.Follow these steps to do this:

1.In the Data directory, open the libs folder and copy the .jar file for the driver.In Windows, this is C:\ProgramData\CData\sync\libs and in Unix or Mac, this is /opt/cdata/sync/libs 2.Open the Sync install directory.In Windows, this is C:\Program Files\CData\CData Sync Java Edition by default. 3.If there is not a folder named lib in this directory, create it.If the folder already exists, open it. 4.Paste the copied .jar file into this directory.

外部Java サーバー

When using the Java edition with an external Java servlet (any server other than the Jetty server that is included with the application), the details of configuring the application database depend upon the specific servlet used.Using the syntax appropriate for the specific servlet, one of the following approaches should be used when configuring the server:

  • Define a JNDI datasource to include the connection properties for the target database.
  • Set the APP_DB environment variable to a JDBC connection string.

If Sync can use the JDNI datasource or APP_DB connection string to connect to a database, it will use that database as the application database.

Login Lockouts

Sync will automatically lock out users who enter incorrect passwords too many times in order to prevent brute force attacks.By default, a user who enters 6 incorrect passwords within 5 minutes will be locked out for 30 minutes.

These settings can be modified by editing the XML configuration file that governs the web server behavior.There are 3 settings relevant to lockouts:

  • LockoutFailedAttempts - the number of incorrect passwords that will trigger a lockout (set this to 0 to disable lockouts)
  • LockoutMinutes - the duration of the lockout (default 30 minutes)
  • LockoutTimeCheckPeriod - the period after which the number of failed attempts is reset to 0 (default 5 minutes)

組み込みJetty サーバー

The syntax for editing these settings within the sync.xml file for the embedded web server is the following:

<Call name="setInitParameter">
  <Arg>LockoutFailedAttempts</Arg>
  <Arg>0</Arg>
 </Call>

Tomcat

The syntax for editing these settings within Tomcat’s server.xml is the following:

<Context>
   <Parameter name="LockoutFailedAttempts" value="0" />
</Context>

Common Issues and Solutions

This section lists common issues encountered when deploying Sync in a Java environment.The recommended solution for each issue is included, and for further help please contact support@cdata.co.jp.

CData Sync fails to start, or starts using an AppDirectory other than what is expected

This error may indicate that does not have the permissions required to access the Application Directory (the Application Directory is a folder used to store critical information regarding the configuration of Jobs, connetions, etc).Possible causes include running Sync as a local user prior to setting it up as a service; in this case, it is possible that certain resources created by the app were created under the local user and are thus not available when running as a service.

Recommended Solution

In Linux, the easiest way to ensure that the service account (or any other account that you want to use to run Sync) has access to the Application Directory is to use the chown command.For example, if the Application Directory is in the default linux location and Sync should run under the service account, the following command should resolve the error:

sudo chown -R cdatasync:cdatasync /opt/sync