この演習では、Java Persistence API (JPA)を使用してオブジェクト・リレーショナル・マッピングを実行する方法を学習します。ここでは、Coherenceのメモリーベースのバッキング・マップとOracle TopLink Gridの使用について取り上げます。
この章には次の項が含まれます:
実用バージョンのOracle Database Express Edition (OracleXE データベース)がシステムにインストールされている必要があります。このデータベースがない場合には、次のURLからダウンロードできます。
JPAでは、リレーショナル・データをJavaオブジェクト(永続性エンティティ)にマップする方法や、これらのオブジェクトをリレーショナル・データベースに格納して後でアクセスできるようにする方法のほか、エンティティを使用するアプリケーションが終了してもそのエンティティの状態を存続させる方法を定義します。エンティティ永続性モデルを簡略化する以外に、JPAはオブジェクト・リレーショナル・マッピングを標準化します。
Coherenceクラスタ内にデータを格納する方法を決定するには、バッキング・マップを使用します。デフォルトでは、Coherenceではメモリーベースのバッキング・マップが使用されます。データを永続化するために実装されるバッキング・マップには、複数のものがあります。
この演習で使用するJPA実装には、Java環境からデータベース環境へのオブジェクト・リレーショナル・マッピング(ORM)が用意されています。そのため、標準的なCoherenceのget
メソッドやput
メソッドを使用したり、JPAおよび(オープン・ソースのEclipseLinkプロジェクトに基づき)Oracle TopLinkを使用してCoherenceコールをデータベース・コールに変換したりすることもできます。
Oracle TopLinkとは
Oracle TopLinkは、Java SEおよびJava EE環境で変換、マッピング、永続性操作を提供するための開発ツールと実行時機能を含む永続性フレームワークです。TopLinkのコア・テクノロジは、Eclipse Foundationのオープンソースの永続性フレームワークであるEclipseLinkによって提供されます。
TopLinkには、EclipseLinkにはない追加機能が含まれています。TopLinkで提供される追加コンポーネントの1つはTopLink Gridです。
Oracle TopLink Gridとは
Oracle TopLink Gridは、EclipseLinkによって提供されるTopLink JPA実装とOracle Coherenceとを統合するために使用される機能です。
Coherence APIをTopLink Gridによって支援されたキャッシュとともに使用して、JPAに対して実装された特殊なキャッシュ・ローダーおよびキャッシュ・ストア・インタフェースでリレーショナル・データにアクセスできます。この従来のCoherenceアプローチでは、TopLink GridはEclipseLink JPA用に最適化されたoracle.eclipselink.coherence.standalone
パッケージにCacheLoader
およびCacheStore
実装を提供します。
JPAを使用してアプリケーションを構築し、データ・グリッドの機能を透過的に使用してスケーラビリティとパフォーマンスを向上させることができます。TopLink Gridは、Oracle Coherenceを使用してJPAアプリケーションをスケーリングするための手段を提供します。アプリケーションは、Coherenceを分散共有(L2)キャッシュとして使用することから、JP QL問合せをCoherenceに送ってグリッド全体でパラレル実行してデータベース負荷を削減することまで、様々な方法でスケーリングできます。このようなグリッド基盤のJPAアプローチにおいては、TopLink Gridが、キャッシュのセットと、EclipseLink JPAでのCoherenceの使用方法を制御できる問合せ構成オプションを提供します。これらの実装は、oracle.eclipselink.coherence.integrated
パッケージ内にあります。
TopLink Gridのキャッシュ・ストア実装およびキャッシュ・ローダー実装は、toplink-grid.jar
ファイルに含まれています。TopLink Gridは、標準のJPAランタイム構成ファイルpersistence.xml
とJPAマッピング・ファイルorm.xml
を使用します。Coherenceのキャッシュ構成ファイルcoherence-cache-config.xml
を、デフォルトのCoherence設定をオーバーライドし、キャッシュ・ストア・キャッシング・スキームを定義するように指定する必要があります。
このプロジェクトでは、EclipseLink JPAにあわせて最適化され、Coherenceアプリケーションで使用できるように設計されているTopLink Gridのキャッシュ・ストア・クラスとキャッシュ・ローダー・クラスが使用されます。これらのクラスはoracle.eclispelink.coherence.standalone
パッケージにあります。詳細は、『Oracle Fusion Middleware Oracle Coherenceの統合』のTopLink Gridによって支援されたCoherenceキャッシュの使用に関する項を参照してください。
グリッド基盤のJPAのアプローチは、このプロジェクトでは説明しません。この技術の詳細は、『Oracle Fusion Middleware Oracle Coherenceの統合』のTopLink GridとOracle Coherenceの統合に関する項を参照してください。
この演習では、Eclipseを使用して次のタスクを実行します。
インストール済のOracleXEデータベースでHR
アカウントのロックを解除します。
使用するシステムにOracleXEデータベースをインストールし、HRスキーマにアクセスできるようにしておく必要があります。HRアカウントのロックを解除するには:
「Start」→「All Programs」→「Oracle Database 11g Express Edition」→「Run SQL Command Line」の順に移動します。
connect
system
as
sysdba
と入力し、パスワードを要求されたらwelcome1
と入力します(注意: ユーザー名はsystem
、パスワードはwelcome1
です。)
次のコマンドを入力してアカウントのロックを解除します。
alter user hr identified by hr account unlock;
これらのコマンドは図8-1に示されています。
Eclipse IDE内にJPAProject
という新規プロジェクトを作成します。詳細は、「Eclipse IDEでの新規プロジェクトの作成」を参照してください。
Eclipse IDEで、「Window」→「Open Perspective」→「Other」をクリックし、「Open Perspective」ダイアログ・ボックスを開きます。図8-2に示されているように、「JPA」パースペクティブを選択します。
図8-2 「Open Perspective」ダイアログ・ボックス内でのJPAパースペクティブの選択
「File」→「New」→「JPA Project」を選択します。プロジェクト名にJPAProject
と入力します。デフォルトの場所がhome\oracle\workspace\JPAProject
をポイントしていることを確認します。「Configuration」フィールドで「Modify」をクリックし、「Project Facets」ダイアログ・ボックスを開きます。
「Oracle Coherence」ファセットを選択します。JPAとJavaファセットがすでに選択されていることを確認します。
「Configuration」フィールドで「Save As」をクリックします。「Save Preset」ダイアログ・ボックスでJPAConfiguration
と入力し、「OK」をクリックします。「Project Facets」ダイアログ・ボックスの内容は図8-3のようになります。
「New JPA Project」ダイアログ・ボックスの内容は、図8-4のようになります。「Next」をクリックして「Java」ページへ移動します。
「Java」ページで「Next」をクリックして、デフォルトの出力先フォルダの場所を受け入れます。
「JPA Facet」ページの「Platform」ドロップダウン・リストで「EclipseLink 2.4.x」を選択します。「Manage Libraries」アイコンをクリックして、TopLink Grid、EclipseLinkおよびJava Persistenceのファイルを追加します。
「Preferences」ダイアログ・ボックスで「New」をクリックします。「New User Library」ダイアログ・ボックスで、TopLinkと入力します。図8-5に示すように、「System library」チェック・ボックスを選択します。
「OK」をクリックして「New User Library」ダイアログ・ボックスを閉じます。
「Preference」ダイアログ・ボックスで、「TopLink[system library]」を選択し、「Add External JARS」をクリックします。
Oracle_Home\oracle_common\modules\oracle.toplink_12.1.2フォルダに移動します。toplink-grid.jar
およびeclipselink.jar
ファイルを選択し、「Open」をクリックします。toplink-grid.jar
およびeclipselink.jar
ファイルが「TopLink」ライブラリに追加されます。「Add External JARS」を再度クリックし、Oracle_Home\oracle_common\modulesフォルダに移動します。javax.persistence_2.0.0.0_2-0.jar
ファイルを選択し、「Open」をクリックします。終了すると、「User Libraries」は図8-6のようになります。
図8-6 TopLinkユーザー・ライブラリへのToplink Grid、EclipselinkおよびJava PersistenceのJARファイルの追加
「OK」をクリックして「Preferences」ダイアログ・ボックスを閉じます。「TopLink」ユーザー・ライブラリを選択します。「JPA Facet」ページが図8-7のように表示されます。
Oracle XEデータベースへの接続を作成します。「Add connection」をクリックします。
「Connection Profile」ダイアログ・ボックスで、図8-8に示されるように「Oracle Database Connection」を選択して、「Name」フィールドにXE_HR
と入力します。「Next」をクリックします。
「Drivers」フィールドで「Oracle Database 11g Driver Default」を選択します。「General」タブを編集します。「User name」フィールドにhr
、「Password」フィールドにhr
と入力します。「Save Password」チェック・ボックスを選択します。「Host」フィールドにlocalhost
と入力します。「Connect when the wizard completes」チェック・ボックスを選択します。「Test Connection」ボタンをクリックします。テストで、図8-9に示されているような成功メッセージが表示された警告ボックスが返されます。「OK」→「Next」をクリックすると、「Summary」ページが表示されます。「Finish」をクリックします。
図8-9 「New Connection Profile」ダイアログ・ボックスおよび成功メッセージ
「JPA Facet」ページで、「Add driver library to build path」→「Next」をクリックします。
「Coherence」ページで、「Coherence 12.1.2」および「TopLink」ユーザー・ライブラリが存在し、選択されていることを確認します。「Finish」をクリックします。
永続性ユニットには、メタデータ・ファイル、クラス、およびグループとしての永続に必要なすべてのクラスを含むJARのセットを識別する簡単な方法が備わっています。永続性ユニットは、その名前によって識別されます。エンティティは永続データを含み、永続データ・ストアに保存できます。JPAエンティティは、永続性ユニットに属することができます。永続性ユニットは、persistence.xml
ファイルにより記述されています。
JPA永続性ユニットとJPAエンティティを作成するには:
JPAProject
プロジェクトを右クリックして、「New」→「JPA Entities from Tables」を選択します。「Select Tables」ダイアログ・ボックスが開きます。
図8-11に示されているようにEMPLOYEES
表を選択し、「Next」をクリックします。
「Table Associations」ページで、図8-12に示されているように、「Next」をクリックしてデフォルト設定を受け入れます。
「Customize Defaults」ページで、「Collection properties type」のjava.util.List
を選択し、「Package」フィールドにcom.oracle.handson
と入力します。「Associations fetch」フィールドで、「Lazy」を選択します。
終了すると、「Customize Default Entity Generation」ページは図8-13のようになります。「Next」をクリックします。
「Customize Individual Entities」ページで、「Superclass」フィールドにjava.lang.Object
と入力します。図8-14に示すとおり、「Class name」をEmployee
からEmployees
に変更します。
「Finish」をクリックしてJPAエンティティを生成します。「Project Explorer」のJPAProject/src/com.oracle.handson
ノードにEmployees.java
ファイルが生成されます。
persistence.xml
ファイルは1つまたは複数の永続性ユニットを定義します。Eclipse IDEでpersistence.xml Editorツールを使用して、persistence.xml
ファイルを編集します。
Eclipseエディタでpersistence.xml
ファイルを開きます。
「一般」タブをクリックします。まだ指定していない場合は、永続性プロバイダの名前を入力します。org.eclipse.persistence.jpa.PersistenceProvider
と入力ます。
「Connection」タブで、「Transaction type」ドロップダウン・リストから「Resource Local」を選択します。
「EclipseLink connection pool」セクションで、「Populate from connection」リンクをクリックしてから、「Connection Selection」ダイアログ・ボックスのXE_HR項目をクリックします。このフィールドの値は、「JPAに対するプロジェクトの構成」で定義したデータベース接続に基づいて設定されます。「Connection Properties」タブは、図8-16のようになります。
図8-16 persistence.xmlエディタの「Connection Properties」タブ
「Logging」タブを開き、「Logging level」ドロップダウン・リストから「Fine」を選択します。
「Exceptions」チェック・ボックスを選択します。「Timestamp」、「Thread」、「Session」および「Connection」チェック・ボックスの選択を解除します。終了すると、「Logging」タブは次のようになります。
「Properties」タブを調べます。内容は図8-18のようになります。
「Source」タブを開きます。persistence.xml
ファイルは例8-1のようになります。ファイルを保存します。
例8-1 生成されたpersistence.xmlファイル
<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> <persistence-unit name="JPAProject" transaction-type="RESOURCE_LOCAL"> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <class>com.oracle.handson.Employees</class> <properties> <property name="eclipselink.target-server" value="None"/> <property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@localhost:1521:xe"/> <property name="javax.persistence.jdbc.user" value="hr"/> <property name="javax.persistence.jdbc.password" value="hr"/> <property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/> <property name="eclipselink.logging.level" value="FINE"/> <property name="eclipselink.logging.timestamp" value="false"/> <property name="eclipselink.logging.thread" value="false"/> <property name="eclipselink.logging.session" value="false"/> <property name="eclipselink.logging.connection" value="false"/> <property name="eclipselink.logging.exceptions" value="true"/> </properties> </persistence-unit> </persistence>
JPAプロジェクトに対するキャッシュ構成ファイルを作成します。
プロジェクト内のcoherence-cache-config.xml
ファイルを右クリックし、「Open」を選択します。
例8-2のようにコードを入力します。「Rename」または「Save As」を使用して、ファイルをjpa-cache-config.xml
として保存します。ファイルはhome\oracle\workspace\JPAProject\src
フォルダに保存されます。
「Project Explorer」に元のcoherence-cache-config.xml
ファイルが表示されていないことを確認します。
例8-2で、scheme-name
要素の値としてdistributed-eclipselink
、service-name
要素の値としてEclipseLinkJPA
、およびcachestore-scheme
要素のclass-name
サブ要素の値としてoracle.eclipselink.coherence.standalone.EclipseLinkJPACacheStore
が使用されていることに注意してください。
例8-2 JPAに対するキャッシュ構成
<?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 system-property="tangosol.coherence.serializer"/>
<socket-provider system-property="tangosol.coherence.socketprovider"/>
</defaults>
<caching-scheme-mapping>
<cache-mapping>
<!-- Set the name of the cache to be the entity name -->
<cache-name>Employees</cache-name>
<!-- Configure this cache to use the scheme defined below -->
<scheme-name>distributed-eclipselink</scheme-name>
</cache-mapping>
</caching-scheme-mapping>
<caching-schemes>
<distributed-scheme>
<scheme-name>distributed-eclipselink</scheme-name>
<service-name>EclipseLinkJPA</service-name>
<backing-map-scheme>
<read-write-backing-map-scheme>
<!--
Define the cache scheme
-->
<internal-cache-scheme>
<local-scheme/>
</internal-cache-scheme>
<cachestore-scheme>
<class-scheme>
<class-name>oracle.eclipselink.coherence.standalone.EclipseLinkJPACacheStore</class-name>
<init-params>
<!--
This param is the entity name
This param should match the value of the
persistence unit name in persistence.xml
-->
<init-param>
<param-type>java.lang.String</param-type>
<param-value>{cache-name}</param-value>
</init-param>
<init-param>
<param-type>java.lang.String</param-type>
<param-value>JPAProject</param-value>
</init-param>
</init-params>
</class-scheme>
</cachestore-scheme>
</read-write-backing-map-scheme>
</backing-map-scheme>
<autostart>true</autostart>
</distributed-scheme>
</caching-schemes>
</cache-config>
JPAプロジェクト用キャッシュ・サーバーを起動するための構成を作成します。
プロジェクトを右クリックして、「Run As」→「Run Configurations」を選択します。「Run Configurations」ダイアログ・ボックスで「Oracle Coherence」アイコンをダブルクリックして、新しい起動構成を作成します。
「Main」タブで、「Name」フィールドにJPAServer
と入力します。「Project」フィールドの「Browse」をクリックし、「Project Selection」ダイアログ・ボックスでJPAProjectプロジェクトを選択します。「Include system libraries when searching for a main class」チェック・ボックスを選択し、「Search」をクリックします。「Select Type」
フィールドにDefaultCacheServerと入力して、com.tangosol.net.DefaultCacheServerを選択します。「Apply」をクリックします。「Main」タブは図8-19のようになります。
「Coherence」タブの「General」タブで、「Cache configuration descriptor」の下にあるキャッシュ構成ファイルへのパスを指定します。「Browse」ボタンをクリックして、JPAキャッシュ構成ファイルの絶対ファイル・パスC:\home\oracle\workspace\JPAProject\src\jpa-cache-config.xml
に移動します。「Local storage」の下の「Enabled (cache server)」を選択します。「Cluster port」には3155
などの一意の値を入力します。
「Other」タブで、tangosol.pof.configの項目がデフォルトのpof-config.xml
に設定されていることを確認します。
「Common」タブで、「Shared file」を選択して\JPAプロジェクトを参照します。
「Classpath」タブは図8-20のようになります。
キャッシュ・サーバーの起動は、後の手順「JPAサンプルの実行」で実行します。
JPAProject
プロジェクト内にEmployees
オブジェクトとやり取りするための新規クラスを作成します。このクラスは、従業員のサラリーの値を変更する目的で作成されます。
RunEmployeeExample
というmain
メソッドを持つ新規クラスを作成します。詳細は、「Javaクラスの作成」を参照してください。
次のタスクを実行するコードを作成します。
EMPLOYEE_ID
属性を使用して従業員を取得します。EMPLOYEE_ID
はlong
データ・タイプです。
サラリーを表示します。
従業員の昇給を10%にします。
値を再度取得して、昇給を確定します。
例8-3は、考えられるRunEmployeeExample
クラスの実装を示しています。
例8-3 従業員クラスのサンプル・ファイル
package com.oracle.handson; import com.tangosol.net.CacheFactory; import com.tangosol.net.NamedCache; import java.math.BigDecimal; public class RunEmployeeExample { public RunEmployeeExample() { } public static void main(String[] args) { long empId = 190L; // emp 190 - Timothy Gates NamedCache employees = CacheFactory.getCache("Employees"); Employees emp = (Employees)employees.get(empId); System.out.println("Employee " + emp.getFirstName() + " " + emp.getLastName() + ", salary = $" + emp.getSalary() ); // give them a 10% pay rise emp.setSalary(emp.getSalary().multiply(BigDecimal.valueOf(1.1))); employees.put(empId, emp); Employees emp2 = (Employees)employees.get(empId); System.out.println("New Employee details are " + emp2.getFirstName() + " " + emp2.getLastName() + ", salary = $" + emp2.getSalary() ); } }
実行構成を作成するには、実行時のプロパティを変更してEclipseのクラス・パスを編集します。
「Project Explorer」のRunEmployeeExample.java
を右クリックし、「Run As」→「Run Configurations」を選択します。「Run Configurations」ダイアログ・ボックスで、「Oracle Coherence」アイコンをダブルクリックして、新しい起動構成を作成します。
「Main」タブで、「Name」フィールドにRunEmployee
と入力します。「Browse」をクリックし、JPAProject
プロジェクトを選択します。「Main class」フィールドで、「Search」をクリックしてcom.oracle.handson.RunEmployeeExample
を選択します。「Apply」をクリックします。
「Coherence」タブの「General」タブで、「Cache configuration descriptor」フィールドのC:\home\oracle\workspace\JPAProject\src\jpa-cache-config.xml
ファイルを参照します。「Disabled (cache client)」ボタンを選択します。「Cluster port」フィールドに3155
と入力します。「Apply」をクリックします。
「Other」タブで、デフォルトのpof-config.xml
がtangosol.pof.config
フィールドに表示されていることを確認します。
「Common」タブで、「Shared file」を選択して\JPAProjectプロジェクトを参照します。
「Classpath」タブは図8-21のようになります。
Employee
クラスに対してJPAを使用してデータベースに永続化するように注釈を付け、データベースの場所をJPAに知らせるpersistence.xml
ファイルを追加したため、CoherenceではCacheStore
実装が採用され、TopLink Gridを使用してオブジェクトがデータベースにロードおよび格納されます。get(Object key)
メソッドを使用すると、次のことが実行されます。
Coherenceで、キーを持つエントリが検索されます。
エントリがまだキャッシュされていない場合や、期限切れでキャッシュから削除されている場合には、バッキング・マップがコールされ、TopLink Gridキャッシュ・ストアを使用してデータが取得されます。
エントリがキャッシュされている場合は、TopLink Gridキャッシュ・ストアを介さずにそのエントリがアプリケーションに直接返されます。put(object key,object value)
メソッドを使用する場合は、データベースに変更を永続化するために、TopLink Gridを介してEclipseLink JPAが使用されます。
「Run Configurations」ダイアログ・ボックスで、JPAServer
起動構成を選択し、「Run」をクリックしてキャッシュ・サーバーを起動します。キャッシュ・サーバーの起動後、RunEmployee
構成を選択し、「Run」をクリックします。実行可能ファイルからの出力は例8-4のようになります。
例8-4 実行可能ファイルからの出力
... Group{Address=224.12.1.0, Port=3155, TTL=4} MasterMemberSet( ThisMember=Member(Id=2, Timestamp=2013-02-22 13:59:12.203, Address=192.168.0.102:8090, MachineId=18578, Location=site:,machine:tpfaeffl-lap7,process:5436, Role=OracleHandsonRunEmployeeExample) OldestMember=Member(Id=1, Timestamp=2013-02-22 13:58:41.89, Address=192.168.0.102:8088, MachineId=18578, Location=site:,machine:tpfaeffl-lap7,process:4152, Role=CoherenceServer) ActualMemberSet=MemberSet(Size=2 Member(Id=1, Timestamp=2013-02-22 13:58:41.89, Address=192.168.0.102:8088, MachineId=18578, Location=site:,machine:tpfaeffl-lap7,process:4152, Role=CoherenceServer) Member(Id=2, Timestamp=2013-02-22 13:59:12.203, Address=192.168.0.102:8090, MachineId=18578, Location=site:,machine:tpfaeffl-lap7,process:5436, Role=OracleHandsonRunEmployeeExample) ) MemberId|ServiceVersion|ServiceJoined|MemberState 1|12.1.2|2013-02-22 13:58:41.89|JOINED, 2|12.1.2|2013-02-22 13:59:12.203|JOINED RecycleMillis=1200000 RecycleSet=MemberSet(Size=0 ) ) TcpRing{Connections=[1]} IpMonitor{Addresses=0} 2013-02-22 13:59:12.625/1.860 Oracle Coherence GE 12.1.2.0.0 <D5> (thread=Invocation:Management, member=2): Service Management joined the cluster with senior service member 1 2013-02-22 13:59:12.656/1.891 Oracle Coherence GE 12.1.2.0.0 <Info> (thread=main, member=2): Loaded Reporter configuration from "jar:file:/C:/Oracle7/coherence/lib/coherence.jar!/reports/report-group.xml" 2013-02-22 13:59:12.843/2.078 Oracle Coherence GE 12.1.2.0.0 <D5> (thread=DistributedCache:EclipseLinkJPA, member=2): Service EclipseLinkJPA joined the cluster with senior service member 1Employee Timothy Gates, salary = $4245.89
New Employee details are Timothy Gates, salary = $4670.47
キャッシュ・サーバーからの応答によりログインの成功が表示され、例8-5に示すようにデータベースからの情報が取得されます。返されるロギング情報(太字)に注意してください。
例8-5 データベースへのログインに対するキャッシュ・サーバーの応答
... Started DefaultCacheServer... 2013-02-22 13:59:12.390/31.953 Oracle Coherence GE 12.1.2.0.0 <D5> (thread=Cluster, member=1): Member(Id=2, Timestamp=2013-02-22 13:59:12.203, Address=192.168.0.102:8090, MachineId=18578, Location=site:,machine:tpfaeffl-lap7,process:5436, Role=OracleHandsonRunEmployeeExample) joined Cluster with senior member 1 2013-02-22 13:59:12.640/32.203 Oracle Coherence GE 12.1.2.0.0 <D5> (thread=Invocation:Management, member=1): Member 2 joined Service Management with senior member 1 2013-02-22 13:59:12.875/32.438 Oracle Coherence GE 12.1.2.0.0 <D5> (thread=DistributedCache:EclipseLinkJPA, member=1): Member 2 joined Service EclipseLinkJPA with senior member 1 [EL Config]: metadata: The access type for the persistent class [class com.oracle.handson.Employees] is set to [FIELD]. [EL Config]: metadata: The target entity (reference) class for the many to one mapping element [field employee] is being defaulted to: class com.oracle.handson.Employees. [EL Config]: metadata: The target entity (reference) class for the one to many mapping element [field employees] is being defaulted to: class com.oracle.handson.Employees. [EL Config]: metadata: The alias name for the entity class [class com.oracle.handson.Employees] is being defaulted to: Employees. [EL Config]: metadata: The table name for entity [class com.oracle.handson.Employees] is being defaulted to: EMPLOYEES. [EL Config]: metadata: The column name for element [email] is being defaulted to: EMAIL. [EL Config]: metadata: The column name for element [salary] is being defaulted to: SALARY. [EL Config]: metadata: The primary key column name for the mapping element [field employee] is being defaulted to: EMPLOYEE_ID. [EL Info]: EclipseLink, version: Eclipse Persistence Services - 2.4.2.v20130131-a7b9798 [EL Fine]: connection: Detected database platform: org.eclipse.persistence.platform.database.oracle.Oracle11Platform [EL Config]: connection: connecting(DatabaseLogin( platform=>OraclePlatform user name=> "hr" datasource URL=> "jdbc:oracle:thin:@localhost:1521:xe" )) [EL Config]: connection: Connected: jdbc:oracle:thin:@localhost:1521:xe User: HR Database: Oracle Version: Oracle Database 11g Express Edition Release 11.2.0.2.0 - Production Driver: Oracle JDBC driver Version: 11.1.0.7.0-Production [EL Warning]: metadata: Reverting the lazy setting on the OneToOne or ManyToOne attribute [employee] for the entity class [class com.oracle.handson.Employees] since weaving was not enabled or did not occur. [EL Info]: connection: file:/C:/home/oracle/workspaceNov/JPAProject/build/classes/_JPAProject login successful [EL Fine]: sql: SELECT EMPLOYEE_ID, COMMISSION_PCT, DEPARTMENT_ID, EMAIL, FIRST_NAME, HIRE_DATE, JOB_ID, LAST_NAME, PHONE_NUMBER, SALARY, MANAGER_ID FROM EMPLOYEES WHERE (EMPLOYEE_ID = ?) bind => [190] [EL Fine]: sql: SELECT EMPLOYEE_ID, COMMISSION_PCT, DEPARTMENT_ID, EMAIL, FIRST_NAME, HIRE_DATE, JOB_ID, LAST_NAME, PHONE_NUMBER, SALARY, MANAGER_ID FROM EMPLOYEES WHERE (EMPLOYEE_ID = ?) bind => [122] [EL Fine]: sql: SELECT EMPLOYEE_ID, COMMISSION_PCT, DEPARTMENT_ID, EMAIL, FIRST_NAME, HIRE_DATE, JOB_ID, LAST_NAME, PHONE_NUMBER, SALARY, MANAGER_ID FROM EMPLOYEES WHERE (EMPLOYEE_ID = ?) bind => [100] [EL Fine]: sql: SELECT EMPLOYEE_ID, COMMISSION_PCT, DEPARTMENT_ID, EMAIL, FIRST_NAME, HIRE_DATE, JOB_ID, LAST_NAME, PHONE_NUMBER, SALARY, MANAGER_ID FROM EMPLOYEES WHERE (EMPLOYEE_ID = ?) bind => [190] [EL Fine]: sql: SELECT EMPLOYEE_ID, COMMISSION_PCT, DEPARTMENT_ID, EMAIL, FIRST_NAME, HIRE_DATE, JOB_ID, LAST_NAME, PHONE_NUMBER, SALARY, MANAGER_ID FROM EMPLOYEES WHERE (EMPLOYEE_ID = ?) bind => [122] [EL Fine]: sql: SELECT EMPLOYEE_ID, COMMISSION_PCT, DEPARTMENT_ID, EMAIL, FIRST_NAME, HIRE_DATE, JOB_ID, LAST_NAME, PHONE_NUMBER, SALARY, MANAGER_ID FROM EMPLOYEES WHERE (EMPLOYEE_ID = ?) bind => [100] [EL Fine]: sql: UPDATE EMPLOYEES SET SALARY = ? WHERE (EMPLOYEE_ID = ?) bind => [4670.47, 190] 2013-02-22 13:59:20.875/40.438 Oracle Coherence GE 12.1.2.0.0 <D5> (thread=Cluster, member=1): TcpRing disconnected from Member(Id=2, Timestamp=2013-02-22 13:59:12.203, Address=192.168.0.102:8090, MachineId=18578, Location=site:,machine:tpfaeffl-lap7,process:5436, Role=OracleHandsonRunEmployeeExample) due to a peer departure; removing the member. 2013-02-22 13:59:20.875/40.438 Oracle Coherence GE 12.1.2.0.0 <D5> (thread=Cluster, member=1): Member(Id=2, Timestamp=2013-02-22 13:59:20.875, Address=192.168.0.102:8090, MachineId=18578, Location=site:,machine:tpfaeffl-lap7,process:5436, Role=OracleHandsonRunEmployeeExample) left Cluster with senior member 1 2013-02-22 13:59:20.875/40.438 Oracle Coherence GE 12.1.2.0.0 <D5> (thread=DistributedCache:EclipseLinkJPA, member=1): Member 2 left service EclipseLinkJPA with senior member 1 2013-02-22 13:59:20.875/40.438 Oracle Coherence GE 12.1.2.0.0 <D5> (thread=Invocation:Management, member=1): Member 2 left service Management with senior member 1