XMLDB.jp

XMLDB開発支援
HOME  >  XMLDB開発支援  >  チュートリアル ~JAVA編(5):トランザクション~

チュートリアル ~JAVA編(5):トランザクション~

2004年6月3日 更新


チュートリアルのコンパイルと実行

ステップ 1

以下を確認したら、次のステップに進んでください。

すでにtutrial1を実行済みで、環境が正しくセットアップされており、サーバーアドレスとログイン情報の変更方法を理解している。


ステップ 2

 a) メモ帳その他のテキストエディタ、またはIDEで、tutorial5.javaを開きます。


 b) サーバー情報とログイン情報を必要に応じて変更します。


 c) tutorial5をコンパイルして実行します。


 d) 正常に実行されると、次のように表示されます。


コード
      <Query-Results>
              <CD>
                      <TITLE>For the good times</TITLE>
                      <ARTIST>Kenny Rogers</ARTIST>
                      <COUNTRY>United Kingdom</COUNTRY>
                      <COMPANY>Mucik Master</COMPANY>
                      <PRICE>8.70</PRICE>
                      <YEAR>1995</YEAR>
              </CD>
         ...
              <CD>
                      <TITLE>Empire Burlesque</TITLE>
                      <ARTIST>Bob Dylan</ARTIST>
                      <COUNTRY>United States</COUNTRY>
                      <STATE>Unknown</STATE>
                      <COMPANY>Columbia</COMPANY>
                      <PRICE>10.90</PRICE>
                      <YEAR>1985</YEAR>
              </CD>             
         ...
         <CD>
                      <TITLE>Red</TITLE>
                      <ARTIST>The Communards</ARTIST>
                      <COUNTRY>United KingdomK</COUNTRY>
                      <COMPANY>London</COMPANY>
                      <PRICE>7.80</PRICE>
                      <YEAR>1987</YEAR>
              </CD>
      </Query-Results>]

コードの詳細説明(相違点)

第51行: s = neosession.startTransaction();


ここでは、明示的なトランザクションを開始します。以前の例では、XMSが自動的に暗黙的なトランザクションを開始しました。 startTransaction()コマンドが存在しない場合、挿入、削除、変更などの各コマンドによって、暗黙的トランザクションが開始されます。トランザクションを明示的に開始することにより、任意の種類および任意の数の文書に対して複数の操作を実行できます。それらの操作は、全体として、ACIDに準拠した形で一体として動作します。いずれかが失敗すると、処理全体がロールバックされて、トランザクションが開始されなかったような状態になります。


第54、58、64行:

s = neosession.modifyXML("/ND/CD/COUNTRY[.=\"USA\"]", "<COUNTRY>United States</COUNTRY>");

s = neosession.modifyXML("/ND/CD/COUNTRY[.=\"UK\"]", "<COUNTRY>United Kingdom</COUNTRY>");

s = neosession.insertXML("/ND/CD/COUNTRY[.=\"United States\"]", "<STATE>Unknown</STATE>");


ここでは、「USA」を「United States」に、「UK」を「United Kingdom」(英国)に変更して、これらのCD用の新しいエレメントを「United States」から挿入します。


第68行: s = neosession.commitTransaction();


これは、トランザクションをコミットします。これらのすべての操作が一単位として成功する必要があります。そうでない場合、トランザクションは失敗してロールバックされます。


ステップ 3

以下の行を非コメント化します。


第61行: //s = neosession.rollbackTransaction();

および第68行: s = neosession.commitTransaction();


最初の2つの操作の後で明示的にロールバックすることにより、失敗をシミュレートします。最終結果として、トランザクションが開始されなかったかのように、文書は変更前の状態になることに注意してください。



--- チュートリアル(5)の終わり --- 以下はソースコードです ---


コード
//Title:        tutorial5 using NeoCore XMS
//Version:      1.0
//Date:         4/15/04
//Copyright:    Copyright (c) 2004
//Author:       Kevin Huck
//Company:      Xpriori
//Description:  Demonstrates explicit transactions

/**
This is a very simple Java application that demonstrates using explicit
transactions to accomplish multiple operations as a single unit.
*/

import com.neocore.httpclient.*;

public class tutorial5 {

   // change the below "server" variable to the machine name or IP if not running XMS on this machine
   public static String server = "localhost";
   public static SessionManagedNeoConnection neosession;
   public static String sid = null;

   public static void main(String[] args)
   {
      //--------------------- get connection and login ---------------------
      try{
         neosession = new  SessionManagedNeoConnection(server, 7700);   // neosession will manage session id for us
      }catch(Exception e){
         System.out.println("Cannot connect to NeoCore server:" + e);
         return;
      }
      try{
         // change the below password to what you entered during the installation
         sid = neosession.login("Administrator", "password");
      }catch(Exception e){
         System.out.println("Cannot login to NeoCore server:" + e);
         return;
      }

      try
      {
         //---------------- first, delete any tutorial4 documents -----------------
         String s = neosession.deleteXML("/ND[CD]");

         //---------------------- store from a file this time ---------------------
         System.out.println("Storing documents");
         s = neosession.storeFileXML("cds.xml", null, null);      // make sure the path is correct
         System.out.println("Store results: [" + s + "]");

         //----------------- now start an explicit transaction --------------------
         s = neosession.startTransaction();

         //-------------- now modify country "USA" to "United States" -------------
         s = neosession.modifyXML("/ND/CD/COUNTRY[.=\"USA\"]", "<COUNTRY>United States</COUNTRY>");
         System.out.println("Modify results: [" + s + "]");

         //-------------- now modify country "UK" to "United Kingdom" -------------
         s = neosession.modifyXML("/ND/CD/COUNTRY[.=\"UK\"]", "<COUNTRY>United Kingdom</COUNTRY>");
         System.out.println("Modify results: [" + s + "]");

         //s = neosession.rollbackTransaction();

         //------------ now insert <STATE> tag after <COUNTRY> for US -------------
         s = neosession.insertXML("/ND/CD/COUNTRY[.=\"United States\"]", "<STATE>Unknown</STATE>");
         System.out.println("Insert results: [" + s + "]");

         //---------------------- now commit all operations -----------------------
         s = neosession.commitTransaction();

         //------------------- now query the sample documents ---------------------
         s = neosession.queryXML("/ND/CD");
         System.out.println("Current documents: [" + s + "]");

         //------------------------------- logout ---------------------------------
         neosession.logout();
      }
      catch(Exception e)
      {
         System.out.println("NeoCore error: " + e);
      }
   }
}

▲このページのTOPへ

  • 無償で使える!XMLDB「NeoCore」
  • サイバーテック求人情報
  • メールマガジン申し込み
  • TEchScore

  • ▲NeoCoreについて記載されています!

  • ▲XMLマスター教則本です。試験対策はこれでばっちり!
Copyright (c) CyberTech corporation ltd. All ights Reserved. | サイバーテックについて | ご利用ガイド