Java環境を構成した後、
install_dir/demo/tutorial/java
ディレクトリのTimesTen Javaデモ・アプリケーションをコンパイルして実行することによって、すべて正しく設定されているかどうかを確認できます。
TimesTen Javaのデモは、単純な注文処理データベースを想定したTimesTenのデモ・スキーマで動作するよう設計されています。データ・ストアをTimesTenのデモ・スキーマに移入するには、install_dir/demo/tutorial/datfiles/input0.dat
を実行します。詳細は、「TimesTen Javaのデモの実行」を参照してください。input0.dat
ファイルでは、次の表が作成されます。
デモ・スキーマの表は、図1.1に示すように構成され、データが移入されます。
TimesTen Javaのデモには、level1.java
、level2.java
、level3.java
、level4.java
、XlaLevel1.java
、XlaLevel2.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
デモでは、ユーザーが指定した表の更新を監視します。
Javaのデモをコンパイルするには、Javaのデモ・ディレクトリに移動し、build.xml
ファイルに対してANTを実行します。ANTを使用しない場合は、javac
コマンドを使用して各デモをコンパイルします。次に例を示します。
> cd /TimesTen/tt70/demo/tutorial/java
> javac *.java
Javaのデモを実行する場合は、次に示すようにinput0.dat
ファイルでSQL文を実行して、デモ・スキーマを作成または再作成する必要があります。各デモでは、DSN名を指定する必要があります。DSNは、データ・ストアへの直接接続またはクライアント接続に使用できます。
すべてのlevelデモには、次のコマンド構文があります。
demoname [-t] [-d | -c] {DSN}
demoname -h | -help
-h | -help 使用方法の出力と終了
-d 直接ドライバを使用して接続(デフォルト)
-c クライアント接続を使用して接続
-t JDBC追跡を有効化
DSN データ・ストアの名前
この例では、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オペレーション・ガイド』のデータソース名に関する項を参照してください。
注意: | 「イベント管理のための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 はデフォルトでLevel2Demo、bookmark はデフォルトでbookmark です。
XlaLevel3
を実行する構文は次のとおりです。
XlaLevel3 [topic [bookmark [table]]]
topic はデフォルトでLevel3Demo、bookmark はデフォルトでbookmark です。また、table はデフォルトでtbl です。
XlaLevel1
デモまたはXlaLevel2
デモを実行する場合は、input0.dat
ファイルでSQL文を実行してデモ・スキーマを作成または再作成する必要があります。XlaLevel1
デモおよびXlaLevel2
デモでは、xyz.customer
表の変更を監視します。
XlaLevel1
デモの実行時に、別のシェルでlevel1.java
デモを実行してxyz.customer
表を更新できます。
デフォルトのトピックを使用して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の形式で入力するように求められます。トランザクションをコミットした後、表に対する検出された変更が表示されます。
デフォルトのトピックおよびブックマークを使用して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 データ・ストアに存在しない場合は、作成されます。
デフォルトのトピック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...
次のようなエラー メッセージを受け取ることがあります。
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
次のようなエラー メッセージを受け取ることがあります。
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: