ヘッダーをスキップ
Oracle TimesTen In-Memory Database Java開発者およびリファレンス・ガイド
リリース7.0
E05166-03
  目次へ
目次
索引へ
索引

前へ
前へ
次へ
次へ
 

TimesTen Javaのデモ

Java環境を構成した後、 install_dir/demo/tutorial/javaディレクトリのTimesTen Javaデモ・アプリケーションをコンパイルして実行することによって、すべて正しく設定されているかどうかを確認できます。

TimesTenのデモ・スキーマ

TimesTen Javaのデモは、単純な注文処理データベースを想定したTimesTenのデモ・スキーマで動作するよう設計されています。データ・ストアをTimesTenのデモ・スキーマに移入するには、install_dir/demo/tutorial/datfiles/input0.datを実行します。詳細は、「TimesTen Javaのデモの実行」を参照してください。input0.datファイルでは、次の表が作成されます。

デモ・スキーマの表は、図1.1に示すように構成され、データが移入されます。

図1.1 TimesTenのデモ・スキーマ
TimesTen Java のデモ・スキーマ[説明]

TimesTenのデモの機能

TimesTen Javaのデモには、level1.javalevel2.javalevel3.javalevel4.javaXlaLevel1.javaXlaLevel2.javaおよびXlaLevel3.java. という名前が付けられています。すべてのレベルのデモで、データ・ストアへの直接接続およびクライアント接続がサポートされています。

level1デモでは、DriverManagerインタフェースを使用してデータ・ストアに接続し、準備済のINSERT文およびSELECT文を作成して新しい顧客データをxyz.customer表に挿入した後、この表の内容を表示します。また、input1.datファイルのすべてのデータがこの表にロードされるまでINSERTを実行し、SELECTを実行して、stdoutに結果セットをフェッチして印刷した後、データ・ストアから切断します。

level2デモでは、DataSourceインタフェースを使用してデータ・ストアに接続し、準備済のINSERT文、UPDATE文、DELETE文およびSELECT文を作成してxyz.product表に対して製品データの挿入、更新、削除および表示を行います。input2.datファイルのすべてのデータがこの表にロードされるまでINSERTを実行します。また、DELETEを実行して重複する製品データを削除した後、UPDATEを実行して表の製品価格を10%値上げします。ttCkptプロシージャを実行して、データ・ストアのチェックポイント処理をディスクに対して実行します。SELECTを実行して、stdoutに結果セットをフェッチして印刷した後、データ・ストアから切断します。

level3デモでは、DataSourceインタフェースを使用してデータ・ストアに接続し、準備された文を作成してinput3.datファイルの注文データに対する注文処理操作を実行します。また、データファイルの各注文品目に対して次のトランザクションを実行します。

在庫に十分な品目がない場合、デモでは、トランザクション全体をロールバックし、注文に対して在庫が不十分であることをレポートします。最後に、データ・ストアをチェックポイントとしてディスクに保存し、切断します。

level4デモでは、level3と同じ注文を処理しますが、複数のスレッドと複数の接続を使用してスループットを向上させます。

level1デモとlevel2デモではTimesTen ttOptUpdateStats組込みプロシージャをコールして、customer表およびproduct表の統計を更新します。ttOptUpdateStatsプロシージャでは、TimesTen問合せオプティマイザが問合せを効率的に実行できるように、統計をSYS.COL_STATS表およびSYS.TBL_STATS表に格納します。

XlaLevel1.javaデモ、XlaLevel2.javaデモおよびXlaLevel3.javaデモでは、「イベント管理のためのJMS/XLAの使用」で説明するJMS/XLA APIを使用して、データ・ストアの特定の更新を監視し、レポートします。XlaLevel1.javaデモおよびXlaLevel2.javaデモでは、xyz.customer表の更新を監視します。 XlaLevel3.javaデモでは、ユーザーが指定した表の更新を監視します。

TimesTen Javaのデモのコンパイル

Javaのデモをコンパイルするには、Javaのデモ・ディレクトリに移動し、build.xmlファイルに対してANTを実行します。ANTを使用しない場合は、javacコマンドを使用して各デモをコンパイルします。次に例を示します。

> cd /TimesTen/tt70/demo/tutorial/java

> javac *.java

TimesTen Javaのデモの実行

Javaのデモを実行する場合は、次に示すようにinput0.datファイルでSQL文を実行して、デモ・スキーマを作成または再作成する必要があります。各デモでは、DSN名を指定する必要があります。DSNは、データ・ストアへの直接接続またはクライアント接続に使用できます。

levelデモの実行

すべてのlevelデモには、次のコマンド構文があります。

demoname [-t] [-d | -c] {DSN}

demoname -h | -help

  -h | -help    使用方法の出力と終了

  -d            直接ドライバを使用して接続(デフォルト)

  -c            クライアント接続を使用して接続

  -t            JDBC追跡を有効化

  DSN           データ・ストアの名前

例1.2

この例では、DMdemoデータ・ストアへの直接ドライバ接続を使用して、level1デモおよびlevel2デモを実行します。level2 デモの実行時には、JDBC追跡を有効にします。その後、CSdemoデータ・ストアへのクライアント接続を使用して、level3デモを実行します。


注意: 各デモを実行する前に、input0.datファイルを実行してデータ・ストアのデモ・スキーマを再作成する必要があります。

> ttIsql -f ../datfiles/input0.dat DMdemo

...... output

> java level1 DMdemo

...... output

> ttIsql -f ../datfiles/input0.dat DMdemo

...... output

> java level2 -t DMdemo

...... output

> ttIsqlCS -f ../datfiles/input0.dat CSdemo

...... output

> java level3 -c CSdemo

...... output

データ・ストアに接続できない場合は、指定したDSN名が設定されていない可能性があります。『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のデータソース名に関する項を参照してください。

XlaLevelデモの実行


注意: イベント管理のためのJMS/XLAの使用」で説明するJMS/XLA APIを使用する場合のみ、XlaLevelデモを参照してください。

JMS/XLAでは、XLAアプリケーションで使用するデータ・ストア名およびその他のパラメータは、「XLA構成ファイルおよびXLAトピック」で説明するXLAトピックの形式で指定されます。XlaLevelデモでは、install_dir/demo/tutorial/javaディレクトリのjmsxla.xmlファイルからXLAトピックを取得します。msxla.xmlファイルのトピックは、事前定義されたRunData_TTinstanceデータ・ストアおよびその他のデフォルトのパラメータがXlaLevelデモで使用されるよう構成されています。jmsxla.xmlファイルを編集して、他のトピックを指定したり、既存のトピックの設定を変更することができます。


注意: このマニュアルのデモでは、事前定義されたデータ・ストアRunData_tt70が使用されます。

すべてのXlaLevelデモでは、オプションのトピック名を使用できます。

XlaLevel1を実行する構文は次のとおりです。

   XlaLevel1 [topic]

topic は、デフォルトでjmsxla.xmlファイルに事前に指定されているLevel1Demo トピックです。

XlaLevel2を実行する構文は次のとおりです。

   XlaLevel2 [topic [bookmark]]

topic はデフォルトでLevel2Demobookmark はデフォルトでbookmark です。

XlaLevel3を実行する構文は次のとおりです。

   XlaLevel3 [topic [bookmark [table]]]

topic はデフォルトでLevel3Demobookmark はデフォルトでbookmark です。また、table はデフォルトでtbl です。

XlaLevel1デモまたはXlaLevel2デモを実行する場合は、input0.datファイルでSQL文を実行してデモ・スキーマを作成または再作成する必要があります。XlaLevel1デモおよびXlaLevel2デモでは、xyz.customer表の変更を監視します。

XlaLevel1デモの実行時に、別のシェルでlevel1.javaデモを実行してxyz.customer表を更新できます。

例1.3

デフォルトのトピックを使用してXlaLevel1.javaデモを実行するには、1つのシェルに次のように入力します。

> ttIsql -f ../datfiles/input0.dat RunData_tt70

...... output

> java XlaLevel1

...... detected changes to the xyz.customer table

別のシェルに次のように入力します。

> java level1 RunData_tt70

...... output

XlaLevel1デモからの出力には、xyz.customer表に対する検出された変更が示されます。

jmsxla.xmlファイルに新しいトピックを作成する場合、XlaLevel1.javaデモを実行する際にトピックを指定できます。たとえば、MyTopicという新しいトピックを作成する場合、次のコマンドを使用してXlaLevel1.javaデモを起動します。

> java XlaLevel1 MyTopic

XlaLevel2デモによって、xyz.customer表への変更をコマンドラインからSQLの形式で入力するように求められます。トランザクションをコミットした後、表に対する検出された変更が表示されます。

例1.4

デフォルトのトピックおよびブックマークを使用してXlaLevel2.javaデモを実行するには、次のように入力します。

> ttIsql -f ../datfiles/input0.dat RunData_tt70

...... output

> java XlaLevel2

+++ Using default topic Level2Demo and default bookmark bookmark

+++ create session

+++ create topic

+++ createDurableSubscriber

+++ using connection string 'DSN=RunData_tt70'

+++ connecting to jdbc:timesten:direct:DSN=RunData_tt70

+++ turning off autocommit

You can now enter SQL commands. You should enter either DML (such as inserts, updates, or deletes), or DDL (such as CREATE SEQUENCE).

For instance, try:

create sequence s minvalue 1000

insert into xyz.customer values(s.nextVal,'us','Bob','nowhere')

commit

After each SQL command you enter, the demo tries to get and display any JMS/XLA updates.

Type "quit" to exit the demo, or "help" to see this message again.

autocommit is turned off, so you will have to enter "commit" to see your updates.


注意: Enter SQLプロンプトの後のSQL文はユーザー入力です。

Enter SQL: create sequence s minvalue 1000

+++ create sequence s minvalue 1000

Enter SQL: insert into xyz.customer values(s.nextVal,'us','Bob','nowhere')

+++ insert into xyz.customer values(s.nextVal,'us','Bob','nowhere')

Enter SQL: insert into xyz.customer values(s.nextVal,'us','Bob','nowhere')

+++ insert into xyz.customer values(s.nextVal,'us','Bob','nowhere')

Enter SQL: commit

+++ commit

>>> got a CREATE SEQUENCE message

CYCLE=true INCREMENT=1 MAX_VALUE=9223372036854775807 MIN_VALUE=1000

NAME=S OWNER=USER1 __COMMIT=false __CONTEXT=(null) __FIRST=true

__REPL=false __TYPE=16 __mtyp=null __mver=1144080

>>> got a INSERT message

ADDRESS=nowhere CUST_NUM=1000 NAME=Bob REGION=us __NULLS=

__TYPE=10 __mtyp=null __mver=1146360

>>> got a INSERT message

ADDRESS=nowhere CUST_NUM=1001 NAME=Bob REGION=us __COMMIT=true

__NULLS= __TYPE=10 __mtyp=null __mver=1147248

Enter SQL: quit

+++ cleaning up

+++ Subscriber close

+++ Producer.close

+++ done

+++ shutting down...

XlaLevel3デモによって、変更および監視する表を指定するように求められます。表がRunData_tt70 データ・ストアに存在しない場合は、作成されます。

例1.5

デフォルトのトピックLevel3Demo およびブックマークbkmk を使用してXlaLevel3.javaデモを実行し、新しい表tbl を作成するには、次のように入力します。

> java XlaLevel3 Level3Demo bkmk tbl

+++ topic=Level3Demo, bookmark=bkmk, table=tbl

May 11, 2007 3:32:26 PM com.timesten.dataserver.jmsxla.SimpleInitialContextFactory getInitialContext

INFO: Using configuration file jmsxla.xml

+++ create session

+++ create topic

May 11, 2007 3:32:27 PM com.timesten.dataserver.jmsxla.DestinationImpl <init>

FINE: Properties for topic Level3Demo:{xlaPrefetch=100, name=Level3Demo, connectionString=DSN=RunData_tt70}

+++ createDurableSubscriber

May 11, 2007 3:32:27 PM com.timesten.dataserver.jmsxla.XlaSubscriber <init>

FINE: Making XLA subscription, connstr=DSN=RunData_tt70, bookmark=bkmk, prefetch=100, ackMode=1 May 11, 2007 3:32:27 PM com.timesten.dataserver.jmsxla.MessageConsumerImpl createXlaSubscriber

FINE: Creating MessageConsumer with connection string=DSN=RunData_tt70, bookmark=bkmk May 11, 2007 3:32:27 PM com.timesten.dataserver.jmsxla.XlaSubscriber start

FINE: Starting XLA subscription

+++ using connection string 'DSN=RunData_tt70'

+++ connecting to jdbc:timesten:direct:DSN=RunData_tt70

+++ turning off autocommit

table tbl already exists

+++ {call ttXlaSubscribe('tbl', 'bkmk')}

You can now enter SQL commands. You should enter either DML (such as inserts, updates, or deletes), or DDL (such as CREATE SEQUENCE).

For instance, try:

create sequence s minvalue 1000

insert into tbl values(s.nextVal)

call ttApplicationContext('inserted something')

commit

After each SQL command you enter, the demo tries to get and display any JMS/XLA updates.

Type "quit" to exit the demo, or "help"

to see this message again.

NOTE: autocommit is turned off, so you will have to enter "commit" to see your updates.


注意: Enter SQLプロンプトの後のSQL文はユーザー入力です。

Enter SQL: create sequence s minvalue 1000

+++ create sequence s minvalue 1000

Enter SQL: insert into tbl values(s.nextVal)

+++ insert into tbl values(s.nextVal)

Enter SQL: call ttApplicationContext('inserted something')

+++ call ttApplicationContext('inserted something')

Enter SQL: commit

+++ commit

>>> got a CREATE TABLE message

NAME=TBL OWNER=USER1 _A_INPRIMARYKEY=null _A_NULLABLE=null

_A_OUTOFLINE=null _A_PRECISION=null _A_SCALE=null _A_SIZE=null

__COMMIT=null __FIRST=null __TYPE=null __mtyp=null __mver=null

>>> got a CREATE SEQUENCE message

CYCLE=true INCREMENT=1 MAX_VALUE=9223372036854775807 MIN_VALUE=1000

NAME=S OWNER=USER1 __COMMIT=false __CONTEXT=(null) __FIRST=true

__REPL=false __TYPE=16 __mtyp=null __mver=385368

>>> got a INSERT message

A=1000 __NULLS=B __TYPE=10 __mtyp=null __mver=386576

>>> got a COMMIT ONLY message

__COMMIT=true __CONTEXT=inserted something __FIRST=false

__REPL=false __TYPE=13 __mtyp=null __mver=386880 Enter SQL: create index ix on tbl(a)

+++ create index ix on tbl(a)


注意: Enter SQLプロンプトの後のSQL文はユーザー入力です。

Enter SQL: commit

+++ commit

>>> got a CREATE INDEX message

COLUMNS=A HASH_PAGES=0 INDEX_METHOD=T INDEX_TYPE=R IXNAME=IX

TBLNAME=TBL TBLOWNER=USER1 UNIQUE=false __COMMIT=true

__CONTEXT=(null) __FIRST=true __REPL=false __TYPE=3 __mtyp=null

__mver=392904


注意: Enter SQLプロンプトの後のSQL文はユーザー入力です。

Enter SQL: drop index ix

+++ drop index ix

Enter SQL: insert into tbl values(s.nextVal)

+++ insert into tbl values(s.nextVal)

Enter SQL: insert into tbl values(s.nextVal)

+++ insert into tbl values(s.nextVal)

Enter SQL: update tbl set a=a+10

+++ update tbl set a=a+10

Enter SQL: commit

+++ commit

>>> got a DROP INDEX message

INDEX_NAME=IX OWNER=USER1 TABLE_NAME=TBL __COMMIT=false

__CONTEXT=(null) __FIRST=true __REPL=false __TYPE=4 __mtyp=null

__mver=398776

>>> got a INSERT message

A=1001 __NULLS=B __TYPE=10 __mtyp=null __mver=399472

>>> got a INSERT message

A=1002 __NULLS=B __TYPE=10 __mtyp=null __mver=400112

>>> got a UPDATE message

A=1010 _A=1000 __NULLS=_B;B __TYPE=11 __UPDCOLS=A __mtyp=null

__mver=400712

>>> got a UPDATE message

A=1011 _A=1001 __NULLS=_B;B __TYPE=11 __UPDCOLS=A __mtyp=null

__mver=401256

>>> got a UPDATE message

A=1012 _A=1002 __COMMIT=true __NULLS=_B;B __TYPE=11 __UPDCOLS=A

__mtyp=null __mver=401800

Enter SQL: quit

+++ cleaning up

+++ Subscriber close

May 11, 2007 3:35:04 PM com.timesten.dataserver.jmsxla.XlaSubscriber tableUnsubscribe

FINE: Unsubscribing from table TBL

+++ Producer.close

+++ done

+++ shutting down...

TimesTen Javaのデモ・プログラムの実行の問題

次のようなエラー メッセージを受け取ることがあります。

java.lang.UnsatisfiedLinkError:no ttJdbcCS

または

java.lang.UnsatisfiedLinkError: no ttJdbc in java.library.path

LD_LIBRARY_PATHが適切に設定されていません。libttJdbc.soを検索して、LD_LIBRARY_PATHにそのディレクトリを追加します。

setenv LD_LIBRARY_PATH install_dir/lib

TimesTen Javaのデモ・プログラムのコンパイルでの問題

次のようなエラー メッセージを受け取ることがあります。

java.lang.ClassNotFoundException:com.timesten.jdbc.TimesTenDriver

CLASSPATHが適切に設定されていません。クラスのアーカイブ・ファイルを検索し、それがCLASSPATHに設定されていることを確認します。次に例を示します。

setenv CLASSPATH install_dir/lib/ttjdbc14.jar

いずれかのデモ('level1'など)で定義されているクラスに対してClassNotFoundExceptionが表示される場合は、現行のディレクトリがCLASSPATHに含まれることを確認します。次に例を示します。

setenv CLASSPATH install_dir/lib/ttjdbc14.jar: