2014年9月16日

[WLS, Java] Top 10 solution documents for Weblogic Server J2EE June 2014 -Aug 2014

原文はこちら。
https://blogs.oracle.com/proactivejavadevelopment/entry/top_10_solution_documents_for4

下表は、2014年6月から8月までの間で、WebLogic Server Java EEのSR(Service Request)で解決策になったトップ10のドキュメントです。
1215249.1 Spring Framework Support in Oracle WebLogic Server Versions
Oracle WebLogic ServerでサポートするSpring Frameworkのバージョンがまとまっています。
1584779.1 Socket Leaks When Calling Web-Service Over SSL
これは既知のもの(bug 16810786)で、10.3.5にパッチを適用すると対応できます。12.1.3では既に修正済みです。
1300770.1 WLS Web Application: Error page configuration!
error-pageタグを使ってweb.xmlで特定のエラーコードに対するカスタムエラーページを設定すると、カスタムエラーページが適切にロードされていないという問題。
1284413.1 InvalidAlgorithmParameterException when client invokes secure webservice on WLS, due to "trustAnchors parameter must be non-empty"
クライアントがWebLogic Server 10.3.3上の保護されたWebサービスを呼び出すと、[SEVERE: AbstractWebServiceBindingComponent.dispatchRequest Unable to dispatch request]という例外が原因で、SOAP Faultが発生する、という問題。
1436012.1
The exception is seen on the log file while navigating to a page that access a file which size has been recently modified. 直近にサイズが変わったファイルにアクセスするようなページへ遷移すると、ログファイルに例外が見られる、という問題。具体的には、このエラーは特定のファイルのサイズが小さくなった場合に見られる。
1306295.1 Deployment Issue - BEA-2156203 A version attribute was not found in element persistence in the deployment descriptor
WebLogic Server 10.3.3以上で動作するアプリケーションでEJBのコンパイルをWebLogic Serverに付属するユーティリティを使って実施した場合にこのエラーが見られる。
1679110.1 WebLogic searches the entire jars in the classpath to determine the Jaxp implementation class to load
WebLogic Serverが間欠的にハングし、スレッドダンプには数多くのスレッドがロックを取得しようとしてブロックされている、という問題。
(例) java/util/Collections$SynchronizedList
1476767.1 "java.lang.IllegalArgumentException: com.sun.xml.messaging.saaj.soap.LocalStrings" With WLS11g (Java 6) And SAAJ When Having The wls-wsat.war Deployed
If the web service (using saaj-impl 1.3.jarを使用する)Webサービスを"wls-wsat.war"より前にデプロイするとサービスには問題がないが、"wls-wsat.war"のデプロイに失敗する。
948932.1
(JRockitのアップグレードと同時に)Weblogic 10.3へアップグレードした後、以下のJSPのコンパイルエラーが発生する。
Failed to compile JSP /xxx/Search.jsp Search.jsp:19:2: The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the 65535 bytes limit
966191.1 WLS 10.0 MP1: JAVA.NET.PROTOCOLEXCEPTION IN THE LOGS. 
On deploying their web application 'abc-portal-5.2.5.war', on WebLogic Server 10.0 MP1に'abc-portal-5.2.5.war'というカスタムWebアプリケーションをデプロイすると、以下のエラーに頻繁に遭遇する。
In servlet context "weblogic.servlet.internal.WebAppServletContext@584e97 - appName: 'abc-portal-5', name: 'abc-portal-5.2.5.war', context-path: ''" failed, java.net.ProtocolException: Didn't meet stated Content-Length, 

2014年9月10日

[BPM] Process level Exception Handling in BPM12c

原文はこちら。
https://blogs.oracle.com/OBPM-leaning/entry/process_level_exception_handling_in

BPM 12cでは、よりコントロールされたアクションでプロセスレベルのトランザクションを取り扱うことができます。BPM 11.1.1.7では、イベント・サブプロセスを使って全てのビジネス例外やシステム例外を捕捉しましたが、BPMNプロセスフローの失敗したアクティビティに戻って再開したり、失敗したアクティビティをスキップして処理を進めることはできません。この機能はBPM 10gR3における主要な機能で、Process Exceptionsを使い、BPMインスタンスをよりコントロールしていました。
BPM 12cでは、プロセス·フロー実行中に例外が発生した場合、例外を発生したフローオブジェクトに戻って再試行するか、メインプロセスフローの次のフローオブジェクトにプロセス·インスタンスを移動するかを選択できます。
この設定は、事前定義済み変数"action"に特定の値を入れることで定義できます。
利用可能な値は、以下の2種類です。

1. BACK

例外を捕捉し、BPMプロセスフローの例外を吐いたアクティビティを再実行したい場合は、スクリプトタスク内で事前定義済み変数actionに文字列"back"を設定します。

2. SKIP

例外が発生した場合に次のアクティビティにインスタンスを遷移するためには、スクリプトタスクで事前定義済み変数actionに文字列"skip"を指定します。

Retry Failed BPM instance

以下の手順でイベント・サブプロセスを構成すると、例外が発生したBPMプロセスのアクティビティを再実行します。
  1. ヒューマンタスク、サービスタスクなどといったアクティビティを使ってBPMプロセスを作成します。また、ビジネス例外(ここではRetryExceptionとします)をBPMプロジェクトのビジネスカタログ・コンポーネントに定義しておきます。
  2. イベント・サブプロセスをBPMプロセスにドラッグ&ドロップで貼り付けます。
  3. スタート・アクティビティを右クリックし、[実装]タブに移動します。
  4. [実装タイプ]では[エラー]を選択し、[リカバリ可能なエラー]チェックボックスにチェックを入れます。
  5. [タイプ]では、RetryExceptionを選択します。
  6. [データ・アソシエーション]タブで、例外の詳細を記述するようにプロセスデータオブジェクトで定義されている"errorInfo"に値をマッピングします。
  7. スクリプトタスクを同じイベント・サブプロセスに追加します。
  8. スクリプトタスクの[実装]タブを開き、事前定義済み変数actionに"back"を指定します。
  9. BPMアプリケーションをデプロイ、テストします。
  10. イベント・サブプロセスが例外を捕捉すると、手順8で定義した内容に従い、BPMインスタンスは例外が発生したアクティビティに戻って再実行します。

Skip Failed BPM instance

以下の手順でイベント・サブプロセスを構成すると、失敗したBPMプロセスのアクティビティをスキップし、次のアクティビティから実行を再開します。
  1. ヒューマンタスク、サービスタスクなどといったアクティビティを使ってBPMプロセスを作成します。また、ビジネス例外(ここではSkipExceptionとします)をBPMプロジェクトのビジネスカタログ・コンポーネントに定義しておきます。
  2. イベント・サブプロセスをBPMプロセスにドラッグ&ドロップで貼り付けます。
  3. スタート・アクティビティを右クリックし、[実装]タブに移動します。
  4. [実装タイプ]では[エラー]を選択し、[リカバリ可能なエラー]チェックボックスにチェックを入れます。
  5. [タイプ]では、SkipExceptionを選択します。
  6. [データ・アソシエーション]タブで、例外の詳細を記述するようにプロセスデータオブジェクトで定義されている"errorInfo"に値をマッピングします。
  7. スクリプトタスクを同じイベント・サブプロセスに追加します。
  8. スクリプトタスクの[実装]タブを開き、事前定義済み変数actionに"skip"を指定します。
  9. BPMアプリケーションをデプロイ、テストします。
  10. イベント・サブプロセスが例外を捕捉すると、手順8で定義した内容に従い、BPMインスタンスは例外が発生したアクティビティをスキップし、プロセスフローで定義されている次のアクティビティに移動して実行を継続します。
今後、BPM 10gR3に含まれていた機能のうち、BPM 12cで復活した新機能をご紹介していく予定です。このエントリがOracle BPMの開発者にお役に立つことを願っています。


例外処理のProof of Concept用プロジェクトを作成しました。こちらからダウンロードできます。

[Java] GlassFish Server Open Source Edition 4.1 Released!

原文はこちら。
https://blogs.oracle.com/theaquarium/entry/glassfish_server_open_source_edition

GlassFish Server 4.1 Open Source Editionがダウンロードできるようになりました。世界初のJava EE 7アプリケーションサーバであるこのリリースには、いろいろな新機能や役に立つ機能、アップデートが含まれています。以下に一例をまとめてみました。
GlassFish Server Open Source Edition 4.1 Download
https://glassfish.java.net/download.html
  • サポート対象のプラットフォーム
    このリリースではJava 8、CDI 1.2、WebSocket 1.1のサポートが追加されています。GlassFish,という世界最初のJava EE 7アプリケーションサーバは引き続き最新のJava EE仕様との優れた互換性を維持しています。
  • Developer Experienceの改善
    GlassFish 4.1はオープンソースとしてのリリースのみではありますが、品質や生産性、Developer Experienceはやはり主要な注力ポイントです。GlassFish Serverは20以上のサブプロジェクト(Tyrus、Jersey、Weld、EclipseLinkなど)から構成されています。各プロジェクトでは機能追加やバグの修正など、1000点以上の改善がなされています。GlassFish 4.1 FishCATプログラムに参加し、GlassFishをよりよいものにしてくれた開発者の皆様に感謝します。特に、GlassFishがMac OS X 10.10 (Yosemite) で起動しないバグを発見してくれたJoonas Lehtinenには感謝しています!
  • 新機能
    重要なアップデートをリストにしてみました。
    • Tyrus (WebSocket 1.1の参照実装)WebSocketの1.1仕様をサポートしました。それにあたり、ラムダ式のサポートを改善するため数個のAPIを追加しています。Tyrusでは、仕様を超えたいくつかの機能が追加されています。例えばオープンしているセッション数の調整、JMXでのメトリック公開、クライアント再接続やプロキシのサポート、全てのオープンしているソケットへのメッセージブロードキャストの最適化機能などです、
    • Jersey (JAX-RS 2.0の参照実装)いくつかの印象的な新機能が追加されています。Jerseyは元々Jersey 1.1の時からOAuthをサポートしていますが、新たにOAuth 1およびOAuth 2をサポートするクライアント用APIが追加されました。Jerseyでは診断機能が改善され、わかりやすい、エラーレポートやJerseyメトリックのJMS経由での公開、リクエスト毎のトレースをログファイルやHTTPレスポンスヘッダに出力できるようになっています。Jerseyはクライアント側のServer-Sent Eventの再接続をサポートも追加されました。
    • OpenMQ (JMS 2.0の参照実装)Open MQにはWebSocketをを介して通信できるようになりました。2種類のWebSocketクライアントをサポートしています。一つは、mqstompという、STOMP 1.2プロトコルをサポートする任意のWebSocketクライアント、もう一つはmqjsonstompという、(WebSocket)クライアントがJSON形式のメッセージをSTOMP1.2プロトコルを使用して送信できるクライアントです。 
  • Java EE 7 SDK
    Java EE 7 SDKがアップデートされ、全体的により使いやすくなりました。第1に、zip形式でリリースされているため非常にインストールが簡単です。SDKには、GlassFish 4.1がバンドルされており、Java 8をサポートしています。最後に、Java EE 7 SDKバンドルには、アップデートされたJava EE 7 Tutorial とJava EE 7 First Cupが両方含まれています。
  • [アップデート]
    Netbeans 8.0.1 available for download; bundles GlassFish 4.0.1をバンドルしたNetBeans 8.0.1がダウンロードできるようになっています。
まとめると、GlassFish 4.1ではサポートプラットフォームがアップデートされ、Developer Experienceが改善され、新機能が提供されています。また、アップデートされたJava EE 7 SDKにバンドルされています。GlassFish 4.1はglassfish.orgからダウンロードできます。Java EE 7 SDKは、Oracle Technology Network(OTN)からダウンロードできます。
GlassFish Server Open Source Edition 4.1 Download
https://glassfish.java.net/download.html
Java EE 7 SDK Downloads
http://www.oracle.com/technetwork/java/javaee/downloads/index.html

2014年9月9日

[FMW] JDeveloper 12.1.3での自動ビルドを停止する

久しぶりにオリジナルです。

SOA SuiteやBPM Suiteの12c (12.1.3) がリリースされ、Oracle Service Bus (OSB) やOracle Event Processing (OEP) の開発環境がEclipse (厳密にはOracle Enterprise Pack Eclipse) からJDeveloperに代わったこともあり、JDeveloperを使う機会が増えた、という方も多いかもしれません。

JDeveloperには内部にMavenが入っており、デフォルトでは保存と同時にビルドするようになっています。しかし、保存の都度ビルドはちょっと、という方もいらっしゃるはず。そういう方のために、Mavenの自動ビルドを停止する設定をご紹介します。

方法は以下の通りです。
  1. JDeveloper のメニューから、[ツール]>[プリファレンス]を選択します。
  2. [プリファレンス]>[コード・エディタ]>[保存アクション]の設定画面で、[プロジェクトおよび依存を保存後に作成]を[×]をクリックして削除します。
  3. 削除が終われば、[OK]を押します。

2014年8月28日

[Java] Java EE 8 Takes Off!

原文はこちら。
https://blogs.oracle.com/theaquarium/entry/java_ee_8_takes_off

Java EEにとって重要な日です。Java EE 8がJCPプロセスを通じ、公式にJSR 366として立ち上がりました。期待されているように、主要な注力領域は、HTTP 2/HTML 5のサポート、CDI/managed beanの整合、クラウドのサポート、Java SEとの整合です。
以下にハイレベルな内容をまとめました。

Web Standards
  • HTTP 2
  • Server-Sent Events (SSE)
  • JSON binding
  • JSFを補完するアクション指向Webフレームワーク
  • Hypermediaのさらなるサポート
  • JSON-P、WebSocket、JAX-RSの機能強化
Managed Bean/CDI Alignment
  • CDI 2
  • EJBスタイルの宣言的セキュリティやスケジューリングのコンテナサービスがManaged Bean/CDIで利用可能
  • MDBスタイルのCDIベースの宣言的JMSメッセージリスナ
  • 古いEJB2/CORBAのAPIのプルーニング
  • CDIとJAX-RSの整合
Cloud
  • 設定
  • マルチテナント
  • 簡素化されたセキュリティ設定
  • 管理・監視用REST API
Java SE
  • 繰り返しのアノテーション、ラムダ式、Date/Time API、Type Annotation、Completable Futuresなどの機能を利用
もちろん、これはただのハイレベルな初期計画であって、他の多くの変更があります。例えば、JSFやJMSのアップデートだけでなく、JCache/データグリッドの追加も含まれます。詳細はjcp.orgのJSRページをチェックしてください。
JSR 366: Java Platform, Enterprise Edition 8 (Java EE 8) Specification
https://jcp.org/en/jsr/detail?id=366
現在が参加したり、少なくとも検討を始めたりする時期です。
プラットフォームJSRのほかに、Java EE 8でのリリースを目指している数多くのAPIもまたリストアップされていて、各々のJSRが立ち上がっていますので、詳細は各JSRのページをご覧下さい。
多くのJava EE8 JSRがすぐに引き続きます。いつものように、事態が進展すればこの場でご連絡しますので、このブログ(The Aquarium)を引き続きチェックしていただき、ご意見を聞かせてください。

2014年8月20日

[Java] Release: Oracle Java Development Kit 8, Update 20

原文はこちら。
https://blogs.oracle.com/java/entry/release_oracle_java_development_kit

Java Development Kit 8, Update 20 (JDK 8u20)がダウンロードできるようになりました。このJavaプラットフォームの最新リリースでは、JDK8に対し、引き続き新機能やセキュリティ、パフォーマンスの最適化を進め、改善しています。例えば、
  • Oracle Java SE Advancedでご利用頂ける、新しいエンタープライズ向け管理機能
  • Javaバージョンの互換性をより細かく制御出来る製品
  • セキュリティアップデート
  • MSI互換インストーラ
といった機能が追加・拡張されています。
ダウンロード
http://www.oracle.com/technetwork/java/javase/downloads/index.html
リリースノート
http://www.oracle.com/technetwork/java/javase/8u20-relnotes-2257729.html
Java SE 8ドキュメント
http://docs.oracle.com/javase/8/
それでは、JDK 8 Update 20での主要な新しいツールや新機能、機能拡張・改善をご紹介しましょう。

Advanced Management Console

http://www.oracle.com/technetwork/java/javaseproducts/advanced-mgmt/index.html
Java Advanced Management Console 1.0 (AMC) がOracle Java SE Advancedでご利用頂けるようになりました。AMCは他の機能と共に配布ルールセット(Deployment Rule Set / DRS)セキュリティ機能を採用しました。これにより、自社のデスクトップやJavaベースのアプリケーションやソリューションを展開するISV向けに、システム管理者がJavaのバージョン互換性やセキュリティアップデートをより細かくしかも簡単に制御できるようになっています。

MSI Enterprise JRE Installer

http://www.oracle.com/technetwork/java/javase/8u20-relnotes-2257729.html#newft
Oracle Java SE Advanced製品で、Windows 64bit/32bitシステムでご利用頂けるMSI互換インストーラを使うことで、システム管理者は、企業内の全てのデスクトップに対し、JREをユーザーインタラクションなしで自動インストールできます。

Performance

  • 文字列の重複をなくし、メモリ使用量を削減しました
  • 長時間実行するアプリケーション用に、改善されたG1 GCをサポートしました

その他

  • 新しいDRSの強制機能を使うと、システム管理者はJava Web Start アプリケーションが動作するJREを指定することができます。
    Deployment Rule Set by Example
    https://blogs.oracle.com/java-platform-group/entry/deployment_rule_set_by_example
    この機能により、エンドユーザは実行のためにセキュリティ例外を承認する必要がなくなるため、レガシーアプリケーションを使っている場合には有用です。
  • Java Mission Control 5.4に新たに使い勝手を上げる機能が追加されました。また、ランチャーはEclipse 4.4に統合されています。
    Java Mission Control
    http://www.oracle.com/technetwork/java/javaseproducts/mission-control/index.html
  • ARM上でのJavaFX
  • 初期コンパイル後のバイトコードの永続化(bytecode persistence)により、Nashornのパフォーマンスが向上しています。
詳細情報はリリースノートをどうぞ。
JDK 8u20 Release Notes
http://www.oracle.com/technetwork/java/javase/8u20-relnotes-2257729.html

2014年8月14日

[Coherence] Getting Started With The Coherence Memcached Adaptor

原文はこちら。
https://blogs.oracle.com/OracleCoherence/entry/getting_started_with_the_coherence
[訳注]正しくはAdapterですが、原文のタイトルのままAdaptorを使っています。

Overview

Coherence 12c (12.1.3) でMemcachedクライアントのサポートが追加され、直接CoherenceクラスタにBinary Memcachedプロトコルでデータを格納できるようになりました。このエントリではCoherence Memcached Adapterの設定方法を紹介するとともに、MemcachedクライアントがどのようにCoherenceクラスタへ接続することができるのかを紹介するため、シンプルなPHPのサンプルを用意しました。

Memcached Adapterはプロキシサービスとして構成し、そのプロキシサービスをCoherenceクラスタで実行します。以下はサンプルのCache構成です。
<?xml version="1.0"?>
<cache-config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns="http://xmlns.oracle.com/coherence/coherence-cache-config"
  xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-cache-config 
  http://xmlns.oracle.com/coherence/coherence-cache-config/1.2/coherence-cache-config.xsd">
  <defaults>
    <serializer>pof</serializer>
  </defaults>
  <caching-scheme-mapping>
    <cache-mapping>
      <cache-name>memcache</cache-name>
      <scheme-name>DistributedCacheScheme</scheme-name>
    </cache-mapping>
  </caching-scheme-mapping>
  <caching-schemes>
    <distributed-scheme>
      <scheme-name>DistributedCacheScheme</scheme-name>
      <service-name>DistributedCacheService</service-name>
      <backing-map-scheme>
        <local-scheme/>
      </backing-map-scheme>
      <autostart>true</autostart>
    </distributed-scheme>
    <proxy-scheme>
      <service-name>MemecachdTcpCacheService</service-name>
      <acceptor-config>
        <memcached-acceptor>
          <cache-name>memcache</cache-name>
          <memcached-auth-method>plain</memcached-auth-method>
          <address-provider>memcached-addr-provider</address-provider>
        </memcached-acceptor>
      </acceptor-config>
      <autostart>true</autostart>
    </proxy-scheme>
  </caching-schemes>
</cache-config>
いくつか注意点を。
<memcached-acceptor>以下の<cache-name>要素は、Memcached acceptorのための分散キャッシュを定義しています。このacceptorに接続するすべてのMemcachedクライアントはこのキャッシュにアクセスします。
必要であれば、<memcached-auth-method>を設定し、クライアント認証を有効にすることができます。現時点ではSASL (Simple Authentication and Security Layer)プレーン認証のみをサポートしています。
<address-provider>要素ではMemcached Adapterが接続を待ち受けるソケットアドレスを定義します。Coherenceのオペレーション構成ファイルで定義します。
以下はaddress-providerの設定を紹介するオペレーション構成ファイルの例です。
<?xml version='1.0'?>
<coherence
 xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-operational-config
 http://xmlns.oracle.com/coherence/coherence-operational-config/1.2/coherence-operational-config.xsd">
 <cluster-config>
    <address-providers>
      <address-provider id="memcached-addr-provider">
        <socket-address>
          <address>127.0.0.1</address>
          <port>11211</port>
        </socket-address>
      </address-provider>
    </address-providers>
  </cluster-config>
  <logging-config>
    <destination system-property="tangosol.coherence.log">stdout</destination>
    <severity-level system-property="tangosol.coherence.log.level">9</severity-level>
  </logging-config>
  <security-config>
    <identity-asserter>
      <class-name>memcached.PasswordIdentityAsserter</class-name>
    </identity-asserter>
  </security-config>
</coherence> 
memcached-addr-providerというidを持つアドレスプロバイダはsocket-addressの参照を定義しています。

Authentication


認証のため、カスタムIdentityAsserterを実装でき、そのIdentityAsserterをオペレーション構成ファイルで宣言できます。上記オペレーション構成ファイルのサンプルから、関連する部分だけ抜き出してみます。
…
<security-config>
    <identity-asserter>
      <class-name>memcached.PasswordIdentityAsserter</class-name>
    </identity-asserter>
 </security-config>
…
Memcached AdapterはIdentityAsserterの実装を呼び出し、トークンとしてcom.tangosol.net.security.UsernameAndPasswordオブジェクトを渡します。

以下はIdentityAsserterのサンプルです。
package memcached;
import com.tangosol.net.Service;
import com.tangosol.net.security.IdentityAsserter;
import com.tangosol.net.security.UsernameAndPassword;
import javax.security.auth.Subject;
public class PasswordIdentityAsserter implements IdentityAsserter {
  public Subject assertIdentity(Object oToken, Service service)
  throws SecurityException {
    if (oToken instanceof UsernameAndPassword) {
      UsernameAndPassword secToken = (UsernameAndPassword) oToken;
      String sPwd = new String(secToken.getPassword());
      if (secToken.getUsername().equals("username")
          && sPwd.equals("password")) {
        return new Subject();
      }
    }
    throw new SecurityException("Access denied");
  }
}

PHP Memcached client


PHPのmemcachedクライアントであるMemcacheとMemcachedは非常に人気があります。Memcachedはより新しいもので、Binary MemcachedプロトコルとSASL認証を両方ともサポートしています。MemcachedとSASLを有効にするためには、以下の設定をphp.iniファイルに設定する必要があります。
    extension=memcached.so
    memcached.use_sasl = 1
次のPHPコードはPHP Memcachedクライアントライブラリを使ってCoherenceクラスタに接続し、エントリを追加し、エントリを再度読み出しています。
<?php
  $m = new Memcached();
  $m->setOption(Memcached::OPT_BINARY_PROTOCOL, true);
  $m->setSaslAuthData("username", "password");
  if (!count($m->getServerList())) {
    // List of Coherence proxy service nodes
    $m->addServer('127.0.0.1', 11211);
  }
  print_r($m->getVersion());
  $m->set('test', 'test_string');
  print_r('Cache value: ' . $m->get('test'));
?>

Putting it all together


これは簡単に試すことができます。まずはCoherence、PHP、PHP Memcachedクライアントライブラリをダウンロードしてインストールしましょう。続いて、テスト用ディレクトリに、先ほど説明したtangosol-coherence-override.xmlという名前のオペレーション構成ファイルを作成します。同様に、Memcachedクライアントのためのキャッシュ構成を指定するcoherence-cache-config.xmlという名前のキャッシュ構成ファイルを作成します。最後に、テスト用ディレクトリにmemcachedというディレクトリを作成し、先ほどのコードを含むPasswordIdentityAsserter.javaというファイルを作成します。

PHPで、先ほどのPHPのサンプルコードをtest.phpとして保存しましょう。これでテストの準備は完了しました。

Coherenceを立ち上げるために、Coherenceライブラリを参照する必要があります。簡単のために、Coherenceのインストールディレクトリを環境変数COH_HOMEと定義しましょう。以下ではLinuxやOS X環境を想定していますが、Windowsでも同様です。

テストディレクトリ内で以下のコマンドを実行し、PasswordIdentityAsserterをビルドします。
javac –cp $COH_HOME/lib/coherence.jar memcached/PasswordIdentityAsserter.java
それでは、Coherenceキャッシュサーバを起動し、Memcachedクライアントのデータを保存します。
java -cp .:$COH_HOME/lib/coherence.jar com.tangosol.net.DefaultCacheServer
最後に、PHPクライアントがCoherence Memcached Adapterを使って安全に接続、データの格納および読み出しができることを確認しましょう。
php test.php
出力結果は以下のようになるはずです。
 Array
 (
     [127.0.0.1:11211] => 12.1.3
 )
 Cache value: test_string
PHPクライアントがCoherenceにインサートした値であるtest_stringの読み出しに成功したことを示しています。