ヘッダーをスキップ
Oracle Multimedia DICOM開発者ガイド
11g リリース1(11.1)
E05685-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

7 DICOMアプリケーションの開発

この章では、Oracle Multimedia DICOMを使用してアプリケーションを開発する方法について説明します。 Oracle Multimedia DICOMでは、ORDDicomオブジェクト型インタフェース、リレーショナル・インタフェースまたはDICOM Javaインタフェースのいずれかを介して、Oracle Databaseのサポートが実現されます。これによって、DICOMコンテンツをデータベースにアップロードしたり、データベースから取得したり、操作することができるアプリケーションを短期間で開発できます。

この章には、DICOMコンテンツのデータベースへのインポート、DICOMメタデータに基づくSQL問合せの書込み、基本的な画像処理の実行、ORDDicomオブジェクトの匿名コピーの作成、およびDICOMコンテンツのユーザー定義制約ルールへの準拠の確認について、それぞれの方法を示す例が含まれています。

この章は、次の項で構成されています。

Oracle Multimediaでは、この章で説明されている機能の他にも複数の機能が提供されています。 詳細は、Oracle Multimediaソフトウェア・ドキュメント・セット内の次のドキュメントを参照してください。

Oracle Multimediaのその他の例、説明および情報は、次に示すOracle Technology NetworkのWebサイトで「Oracle Multimedia」の「Software」セクションを参照してください。

http://www.oracle.com/technology/products/multimedia/

7.1 環境設定

この章の例では、次の4つの列を含むmedical_image_table表を使用しています。

例を実行する前に、次の文を発行する必要があります。ここで/mydir/workは、ユーザーscottがDICOMファイルを検索できるディレクトリです。

CONNECT sys/ as sysdba
Enter password: password
CREATE OR REPLACE DIRECTORY FILE_DIR as '/mydir/work';
GRANT READ ON DIRECTORY FILE_DIR TO scott;

注意:

オラクル社が提供するすべてのOracle Multimediaオブジェクトおよびプロシージャは、ORDSYSスキーマで定義されています。

7.2 ORDDicom列を含む表の作成

この項では、DICOMコンテンツを格納するための、ORDDicom列を含む表の作成方法を示します。

例7-1に示すコード・スニペットでは、iddicomimageThumbおよびanonDicomの4つの列を含むmedical_image_table表が作成されます。

例7-1 DICOMコンテンツの表の作成

CONNECT scott

Enter password: password

create table medical_image_table
             (id          integer primary key,
              dicom       ordsys.orddicom,
              imageThumb  ordsys.ordimage,
              anonDicom   ordsys.orddicom)
--
-- Use SecureFile LOBS for media content
--
lob(dicom.source.localData)      store as SecureFile,
lob(imageThumb.source.localData) store as SecureFile,
lob(anonDicom.source.localData)  store as SecureFile;

例7-1では、メディア・コンテンツにSecureFile LOB記憶域を使用しています。 Oracle SecureFilesは、再設計されたバイナリ・ラージ・オブジェクト(BLOB)で、パフォーマンスの向上、およびOracle Databaseのコンテンツ管理機能の強化を図ります。 SecureFile LOBの詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。 SecureFile LOBのチューニング・ヒントは、『Oracle Multimediaユーザーズ・ガイド』を参照してください。

セキュアなパスワードの作成については、『Oracle Databaseセキュリティ・ガイド』を参照してください。

7.3 SQL*Loaderユーティリティを使用したDICOMコンテンツのロード

この項では、SQL*Loaderユーティリティを使用して、Oracle Databaseの既存の表にDICOMコンテンツをロードする方法を示します。 SQL*Loaderは、外部ファイルのデータをOracle Databaseの表にロードするための高パフォーマンスのユーティリティです。 外部データは、Oracle Databaseのサーバーを実行しているマシンとは異なるクライアント・マシンからネットワークを経由してロードできます。 データは、同じマシン上でデータベース・サーバーとしてローカルにロードすることもできます。 SQL*Loaderの詳細は、『Oracle Databaseユーティリティ』を参照してください。

一般的なSQL*Loaderセッションでは、制御ファイルと1つ以上のデータファイルが入力に使用されます。 制御ファイルでは、データをデータベースにロードする方法を定義します。 SQL*Loaderセッションの出力先は、Oracle Database(データのロード先)およびログ・ファイルです。また、廃棄ファイルに出力される場合もあります。

例7-2に、7.2項で作成したmedical_image_table表にDICOMデータをロードするための制御ファイルを示します。 制御ファイルには、制御ファイルの最後でsample1.dcmおよびsample2.dcmとして指定された入力データを、medical_image_table表の列にマップするためのディレクティブが含まれます。 id列とdicom列のみに、外部から供給されたデータがロードされます。 imageThumb列とanonDicom列は、制御ファイルで指定された定数とデフォルト値を使用して初期化されます。

例7-2 DICOMコンテンツのロード

-- This file is a SQL*LDR control file to load DICOM data
-- into the table MEDICAL_IMAGE_TABLE. The control file contains directives
-- to load DICOM data into the DICOM column. It also contains directives
-- to initialize the IMAGETHUMB and ANONDICOM columns. The data to be loaded
-- is specified in this file after the BEGINDATA delimiter.
--
--  The following command invokes the SQL*Loader utility and then prompts you
--  to enter the password for the specified userid.
--
--    sqlldr userid=USER control=load_dicom.ctl
--
--
load data
--
-- The input data is contained in this file after the BEGINDATA delimiter.
--
infile *
into table medical_image_table
--
-- This example truncates the table. Change the following to "append"
-- if you want to add to an existing table.
--
truncate
fields terminated by whitespace optionally enclosed by '"'
(
 --
 -- The primary key column.
 --
 id                 integer external,
 --
 -- A filler field that holds the file path of the DICOM data.
 --
 dicomFilename      filler char,
 --
 -- Load the dicom column object
 --    The LOB attribute source.localData is loaded with the DICOM data.
 --    The srcType attribute is initialized to "local".
 --    The updateTime attribute is initialized to "SYSDATE".
 --    The LOB attribute extension is initalized with an empty LOB.
 --
   dicom             column object (
     source          column object (
       localData     lobfile(dicomFilename) terminated by EOF,
       srcType       constant 'local',
       updateTime    expression "SYSDATE"
     ),
     extension       lobfile(dicomFilename) terminated by EOF
                      defaultif dicom.source.srcType='local'
   ),
 --
 -- Initialize the imageThumb column object
 --    The LOB attribute source.localData is initialized with an empty LOB.
 --    This LOB will hold the content for the thumbnail image.
 --    The local attribute is initialized to "1".
 --
   imageThumb        column object (
     source          column object (
       localData     lobfile(dicomFilename) terminated by EOF
                       defaultif imageThumb.source.local=X'1',
       local         constant 1
     )
   ),
 --
 -- Initialize the anonDicom column object
 --    The LOB attributes source.localData and extension are initialized.
 --      with empty LOBs.
 --    The localData LOB will hold the content for the DICOM data to be
 --      made anonymous.
 --    The extension LOB is an internal field used by ORDDICOM.
 --    The srcType attribute is initialized to "local".
 --
   anonDicom         column object (
     source          column object (
       localData     lobfile(dicomFilename) terminated by EOF
                       defaultif anonDicom.source.srcType='local',
       srcType       constant 'local'
     ),
     extension         lobfile(dicomFilename) terminated by EOF
                      defaultif dicom.source.srcType='local'
   )
)
--
-- Input data begins here
--
-- ID  DICOMFILENAME
BEGINDATA
   1   sample1.dcm
   2   sample2.dcm

SQL*Loaderユーティリティを起動する前に、dicom列にロードするLOBデータのロギングを一時的に無効にできます。 ロギングが無効になると、データはデータベース表にのみ書き込まれます。REDOログには書き込まれません。 ロギングを無効にすることにより、実行するI/Oの量を半分に減らして、DICOMデータのロードに必要な時間を削減できます。 LOBおよびロギングの詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。

dicom列のDICOMコンテンツのロギングを無効にするには、次のSQLコマンドを使用します。

 alter table medical_image_table modify lob(dicom.source.localData) (nocache nologging);

SQL*Loaderユーティリティを起動するには、次のコマンドを使用します。プロンプトが表示されたら、パスワードを入力します。

    sqlldr userid=USER control=load_dicom.ctl

DICOMデータがロードされた後、次のSQLコマンドを使用して、dicom列のDICOMコンテンツのロギングを再度有効にします。

 alter table medical_image_table modify lob(dicom.source.localData)  (nocache logging);

DICOMデータが外部ファイルから表にロードされた後で、dicom列の初期化を完了し、imageThumbおよびanonDicom列に移入するデータを生成するには、別のプログラムが必要になります。 例7-3に示すように、これらのタスクはORDDicomオブジェクトのメソッドを使用して実行できます。 この例では、dicom列は、setProperties( )メソッドを使用して初期化されます。 imageThumb列オブジェクトは、processCopy( )メソッドを使用して作成されます。 また、anonDicom列オブジェクトは、makeAnonymous( )メソッドを使用して作成されます。このメソッドでは、1つの入力引数に対して一意の識別子が必要です。

例7-3では、id列の値と、定義する必要のあるDICOM UIDルートの値を連結することによって、一意識別子(UID)を生成するためのgenUID( )ファンクションを定義します。 このファンクションは、組織の標準に従って、一意の識別子を生成する別のファンクションに置き換えることができます。

例7-3 DICOM表のロードと初期化の終了

--
-- The ORDDicom method makeAnonymous() takes a unique UID as an input parameter.
-- This utility function generates a simple UID to use in this example.
-- Replace the string value of UID_ROOT with the DICOM UID for your organization.
--
create or replace function genUID(in_id varchar2)
return varchar2
is
 -- Declare the DICOM UID root value for your organization
 -- You must replace this value.
 UID_ROOT varchar2(128) := '<unique-UID root>';
begin
 return UID_ROOT || '.' || in_id;
end;
/
show errors;


--
-- This PL/SQL block loops over all the rows in the MEDICAL_IMAGE_TABLE and:
-- 1. Calls the ORDDicom method setProperties() to initialize the dicom column
-- 2. Calls the ORDDicom method processCopy() to create a JPEG thumbnail image
--    that is stored in the imageThumb column.
-- 3. Calls the ORDDicom method makeAnonymous() to create an anonymous version
--    of the dicom column. The new version is stored in the column anonDicom.
--
declare
 dcm ordsys.orddicom;
begin
  -- load the DICOM data model
  ord_dicom.setDatamodel;

  -- loop over all rows in the medical image table
  for rec in (select * from medical_image_table for update) loop

    -- initialize the dicom column
    rec.dicom.setProperties();

    -- create a JPEG thumbnail
    rec.dicom.processCopy('fileFormat=jpeg fixedScale=75,100', rec.imageThumb);

    -- make a new  anonymous version of the ORDDicom object
    rec.dicom.makeAnonymous(genUID(rec.id), rec.anonDicom);
    -- write the objects back to the row
    update medical_image_table
    set dicom = rec.dicom,
        imageThumb = rec.imageThumb,
        anonDicom = rec.anonDicom
    where id = rec.id;

  end loop;
  commit;
end;
/

例7-3では、medical_image_table表のすべての行に対して1回のループ処理を行います。 その後、3つのパスで各DICOM画像の読取りおよびアクセスを行います。 1つ目のパスでは、dicom列のプロパティを設定します。 2つ目のパスでは、JPEGサムネイル画像を作成します。 さらに、3つ目のパスでは、anonDicom列に格納する匿名のDICOM画像を作成します。 これらの読取り操作を繰り返すため、dicom列のLOB記憶域プロパティを変更して、DICOMコンテンツのキャッシュを有効にできます。 LOBおよびロギングの詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。

dicom列のDICOMコンテンツのキャッシュを有効にするには、次のSQLコマンドを使用します。

 alter table medical_image_table  modify lob(dicom.source.localData) (cache);

初期化の完了後、次のSQLコマンドを使用して、dicom列のDICOMコンテンツのキャッシュを無効にします。

 alter table medical_image_table  modify lob(dicom.source.localData) (nocache logging);

SQL*Loaderユーティリティを使用して、オブジェクトおよびLOBをOracle Databaseにロードする方法の詳細は、『Oracle Databaseユーティリティ』を参照してください。

7.4 PL/SQL APIを使用したDICOMアプリケーションの開発

この項では、Oracle Multimedia DICOMを使用してデータベース内のDICOMコンテンツの格納および操作を行う、基本的なPL/SQLコードの例を示します。

Oracle Multimedia DICOMを使用すると、ORDDicom型の列を含むデータベース表にDICOMコンテンツを格納できます。 表7-1に、データベース表のORDDicomオブジェクト内に含まれる属性の一部を示します。

表7-1 データベース表のORDDicomオブジェクトに含まれるコンテンツの例

ORDDicom

SOP_INSTANCE_UID

SOP_CLASS_UID

STUDY_INSTANCE_UID

SERIES_INSTANCE_UID

ソース(ORDDataSource)

メタデータ(SYS.XMLType)

ContentLength(整数)

内部属性


7.4.1 DICOM属性の選択

この項では、7.3項でロードしたDICOMコンテンツのDICOM属性にアクセスする方法を示します。

medical_image_table表が移入されると、メタデータが抽出され、SQL問合せを使用してメタデータにアクセスすることができます。 例7-4に、抽出されたDICOMメタデータをDICOMコンテンツから選択する方法を示します。 これらの操作を実行する部分は、太字で強調表示しています。

例7-4 DICOMコンテンツから選択されたメタデータ

1.     SOP_INSTANCE_UID.
2.     SOP_CLASS_UID
3.     STUDY_INSTANCE_UID
4.     SERIES_INSTANCE_UID.
5.     Content length (number of bytes of DICOM content)
6.     Patient Name, Patient ID, and Modality from DICOM metadata





select id,
       t.dicom.getSOPInstanceUID() as SOP_Instance_UID
from medical_image_table t;

select id,
       t.dicom.getSOPClassUID() as SOP_Class_UID
from medical_image_table t;

select id,
       t.dicom.getStudyInstanceUID() as Study_Instance_UID
from medical_image_table t;

select id,
       t.dicom.getSeriesInstanceUID() as Series_Instance_UID
from medical_image_table t;

select id,
       t.dicom.getcontentlength() as content_Length
from medical_image_table t;

select id,
        extractValue(t.dicom.metadata,
        '/DICOM_OBJECT/*[@name="Patient''s Name"]/VALUE',
        'xmlns=http://xmlns.oracle.com/ord/dicom/metadata_1_0') as "PATIENT_NAME",
        extractValue(t.dicom.metadata,
        '/DICOM_OBJECT/*[@name="Patient ID"]',
        'xmlns=http://xmlns.oracle.com/ord/dicom/metadata_1_0') as "PATIENT_ID",
        extractValue(t.dicom.metadata,
        '/DICOM_OBJECT/*[@name="Modality"]',
        'xmlns=http://xmlns.oracle.com/ord/dicom/metadata_1_0') as "MODALITY"
from medical_image_table t;

例7-4を実行すると、次の出力が生成されます。

ID SOP_INSTANCE_UID
-- -------------------------------------------------------
 1 1.2.392.200036.9116.2.2.2.1762676206.1077529882.102147

ID SOP_CLASS_UID
-- -------------------------------------------------------
 1 1.2.840.10008.5.1.4.1.1.2

ID STUDY_INSTANCE_UID
-- -------------------------------------------------------
 1 1.2.392.200036.9116.2.2.2.1762929498.1080638122.365416

ID SERIES_INSTANCE_UID
-- -------------------------------------------------------
 1 1.2.392.200036.9116.2.2.2.1762929498.1080638122.503288

ID CONTENT_LENGTH
-- ---------------
 1   525974

ID PATIENT_NAME                    PATIENT_ID      MODALITY
--- ------------------------------ ----------      ----------
 1 CANCIO   2HR                    A-02-013        CT

7.4.2 サムネイル画像の作成および画像形式の変更

この項では、データベース内で起動可能な画像処理操作の一部を示します。

例として、DICOMイメージからJPEGサムネイル画像を作成するために、ORDDicomオブジェクトから新しいORDImageオブジェクトが生成されます。 このタスクを完了するには、新しいORDImageオブジェクトに適用するプロパティを記述する必要があります。

次の記述により、75x100ピクセルのJPEGサムネイル画像が生成されます。

'fileFormat=jfif fixedScale=75 100'

例7-5に示すコード・スニペットでは、次のタスクを実行するgenerate_thumb()プロシージャを定義します。

  • 識別子source_idを含むmedical_image_table表のimageThumb列を移入する。

  • ソース行のORDDicomオブジェクトでprocessCopy( )メソッドをコールすることによって、列にORDImageオブジェクトを生成する。

例7-5で、これらのタスクを実行する部分は、太字で強調表示しています。

例7-5 新しいORDImageオブジェクトの生成および処理

-- Set Data Model Repository
execute ordsys.ord_dicom.setDataModel();

create or replace procedure generate_thumb(source_id number, verb varchar2) is
    dcmSrc    ordsys.orddicom;
    imgDst    ordsys.ordimage;
begin
  select dicom, imageThumb into dcmSrc, imgDst from medical_image_table
         where id = source_id for update;
  dcmSrc.processCopy(verb, imgDst);

  update medical_image_table set imageThumb = imgDst where id = source_id;
  commit;
end;
/


-- Create a JPEG thumbnail image for our test DICOM
execute generate_thumb(1, 'fileFormat=jfif fixedScale=75 100');

-- look at our handiwork
column t.imageThumb.getFileFormat() format A20;
select id, t.imageThumb.getWidth(), t.imageThumb.getHeight(),
       t.imageThumb.getFileFormat()
from medical_image_table t;

例7-5を実行すると、次の出力が生成されます。

ID  T.IMAGETHUMB.GETWIDTH() T.IMAGETHUMB.GETHEIGHT() T.IMAGETHUMB.GETFILE
--- ----------------------- ------------------------ ----------------------
 1              75                      100            JFIF

7.4.3 ORDDicomオブジェクトの匿名コピーの作成

この項では、ORDDicomオブジェクトを匿名化することによって、患者のプライバシを保護する方法を示します。

ORDDicomオブジェクトを匿名化するには、新しいDICOMコンテンツおよび関連するORDDicomオブジェクト・メタデータの両方でユーザー定義の特定のDICOM属性が削除されているか上書きされている、新しいORDDicomオブジェクトを作成する必要があります。 XMLの匿名ドキュメントでは、削除または置換する必要のあるDICOM属性、および各属性を匿名化するためのアクションが指定されます。

デフォルトの匿名ドキュメントordcman.xmlがインストール中にロードされます。 カスタマイズされた匿名ドキュメントを作成することもできますが、この例では、そのトピックは対象としていません。 この例では、デフォルトの匿名ドキュメントを使用します。

例7-6のコード・スニペットでは、次のタスクを実行するgenerate_anon()プロシージャを定義します。

  • 元のコンテンツdicomと、識別子source_idを含むmedical_image_table表のanonDicom列を選択する。

  • ソース行のdicomで、makeAnonymous( )メソッドをコールすることによって、anonDicom列にORDDicomオブジェクトを生成する。

このコード・スニペットを実行すると、generate_anonプロシージャの変数dest_sop_instance_uidに対する一時UIDがグローバルに一意なUIDに置き換えられます。

例7-6で、makeAnonymous( )メソッドをコールする部分は、太字で強調表示しています。

例7-6 列の移入および匿名ORDDicomオブジェクトの生成

-- Set Data Model Repository

execute ordsys.ord_dicom.setDataModel();

create or replace procedure generate_anon(source_id number) is
    dcmSrc    ordsys.orddicom;
    anonDst   ordsys.orddicom;
    dest_sop_inst_uid varchar2(128) := '1.2.3';

begin
  select dicom, anonDicom into dcmSrc, anonDst from medical_image_table
         where id = source_id for update;
  dcmSrc.makeAnonymous(dest_sop_inst_uid, anonDst);
  update medical_image_table set anonDicom = anonDst where id = source_id;
  commit;
end;
/

-- Generate an Anonymous Copy of our test DICOM
execute generate_anon(1);

-- look at our handiwork
select id,
        extractValue(t.anonDicom.metadata,
        '/DICOM_OBJECT/*[@name="Patient''s Name"]/VALUE',
        'xmlns=http://xmlns.oracle.com/ord/dicom/metadata_1_0') as "PATIENT_NAME",
        extractValue(t.anonDicom.metadata,
        '/DICOM_OBJECT/*[@name="Patient ID"]',
        'xmlns=http://xmlns.oracle.com/ord/dicom/metadata_1_0') as "PATIENT_ID"
from medical_image_table t;

例7-6を実行すると、次の出力が生成されます。

ID PATIENT_NAME                    PATIENT_ID
--- ------------------------------ ----------
 1  Joe^Smith                      anonymous

7.4.4 ORDDicomオブジェクトの準拠の検証

この項では、ユーザー定義の一連の制約ルールに対するORDDicomオブジェクトの準拠を検証する方法を示します。 制約ルールは、1つ以上の制約ドキュメントで指定されます。 これらのXML文書では、DICOMメタデータ・スキーマでは表現できない属性間の関係およびセマンティックの制約を指定します。

デフォルトの制約ドキュメントordcmct.xmlがインストール中にロードされます。 カスタマイズされた制約ドキュメントを作成することもできますが、この例では、そのトピックは対象としていません。 この例では、デフォルトの制約ドキュメントを使用します。

例7-7では、medical_image_table表のdicom列の準拠を検証します。

例7-7で、このタスクを実行する部分は、太字で強調表示しています。

例7-7 DICOMの準拠の検証

-- Set Data Model Repository
execute ordsys.ord_dicom.setDataModel();

select id, t.dicom.isconformanceValid('OracleOrdObject') as conformant
from medical_image_table t;

例7-7を実行すると、次の出力が生成されます。

ID  CONFORMANT
--- ----------
1     1

この例で使用されたDICOMコンテンツがOracleのデフォルトの制約定義に準拠していない場合は、メッセージが表に挿入されます。このメッセージは、情報ビューorddcm_conformance_vld_msgsを問い合せて参照できます。 このビューには、制約の検証中に生成された制約メッセージがリストされます。

次のコード・スニペットには、このビューの説明が示されています。

SQL> describe orddcm_conformance_vld_msgs;

 Name                         Null?          Type
 ----------------------    -------------    ---------------------
 SOP_INSTANCE_UID                            VARCHAR2(128 CHAR)
 RULE_NAME                  NOT NULL         VARCHAR2(64 CHAR)
 MESSAGE                                     VARCHAR2(1999 CHAR)
 MSG_TYPE                   NOT NULL         VARCHAR2(20 CHAR)
 MSG_TIME                   NOT NULL         TIMESTAMP(6)

この例で使用されたDICOMコンテンツがOracleの制約ルールに準拠していたため、orddcm_conformance_vld_msgsビューにメッセージはありません。

select * from orddcm_conformance_vld_msgs;

したがって、前述のSELECT文による問合せをコールすると、次の出力が生成されます。

no rows selected

組織内で定義された制約ルールにDICOMコンテンツが準拠していない場合の処置については、3.9項を参照してください。

7.4.5 PL/SQLでのOracle Multimedia DICOM例外の処理

実行時に発生する可能性があるエラーを、常にアプリケーションで処理する必要があります。これにより、実行時エラーが発生してもプログラムの動作を継続できます。また、プログラムの動作中に、ユーザーがエラーの原因を認識することもできるようになります。エラーを適切に処理することによって、可能であれば、アプリケーションの実行中に常にエラーからリカバリできるようになります。さらに、適切にエラーを処理することで、必要な情報が提供されるため、常にエラーの原因を認識できるようになります。

例外を処理する場合、PL/SQLでは例外ブロックを使用します。たとえば、PL/SQLの場合、次のように例外を処理します。

BEGIN
<some program logic>
EXCEPTION
     WHEN OTHERS THEN
     <some exception logic>
END;

独自に設計、コーディングおよびデバッグしたアプリケーションであれば、プログラム内のどの箇所でエラーが発生してプログラムの処理が停止する可能性があるかがわかります。そのような箇所に対しては、発生する可能性のあるエラーを処理するための例外処理ブロックを追加する必要があります。 PL/SQLでの例外処理の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

7.5 DICOM Java APIを使用したDICOMアプリケーションの開発

JavaおよびJava Database Connectivity(JDBC)に精通した開発者は、Oracle Multimedia DICOM Java APIを使用するDICOMアプリケーションを記述できます。 Oracle Multimedia DICOM Java APIに含まれるOrdDicomクラスは、ORDDicomデータベース・オブジェクト用のJavaプロキシ・クラスです。 このクラスを使用すると、Digital Imaging and Communications in Medicine(DICOM)コンテンツを格納するために設計された、Oracle Multimediaオブジェクトを使用するJavaアプリケーションを記述できます。

このJavaクラスは、oracle.ord.dicom.*パッケージに含まれています。 このクラスを使用して、JavaアプリケーションのORDSYS.ORDDicomデータベース・オブジェクト型のインスタンスを表現します。

これらのクラスで使用可能なメソッドの詳細は、『Oracle Multimedia DICOM Java API Reference』を参照してください。

7.5.1 環境変数の設定

Oracle Multimedia DICOM Java APIを使用する前に、Javaプログラムをコンパイルおよび実行するための環境を設定する必要があります。

まず、環境変数CLASSPATHを指定する必要があります。 また、Oracle Multimediaに適切なOracle Javaライブラリおよび使用する予定のその他の機能が含まれていることを確認する必要があります。 次の表には、各Javaライブラリについて、Javaライブラリの名前、そのライブラリを必要とするOracle Multimediaまたはその他の機能、ライブラリをサポートするJDKバージョンの詳細、プラットフォーム、およびライブラリのJARファイルを取得可能な<ORACLE_HOME>ディレクトリのパス名を示します。

Oracle Javaライブラリの名前 関連する機能 JDKバージョン、プラットフォームおよび位置
Oracle JDBCライブラリ すべてのOracle Multimedia機能 JDK 5以上、LinuxおよびUNIX:

<ORACLE_HOME>/jdbc/lib/ojdbc5.jar

JDK 5以上、Windows:

<ORACLE_HOME>\jdbc\lib\ojdbc5.jar

Oracle Multimedia Javaクラス・ライブラリ すべてのOracle Multimedia機能 JDK 5以上、LinuxおよびUNIX:

<ORACLE_HOME>/ord/jlib/ordim.jar

JDK 5以上、Windows:

<ORACLE_HOME>\ord\jlib\ordim.jar

Oracle Multimedia DICOM Javaクラス・ライブラリ DICOM機能 JDK 5以上、LinuxおよびUNIX:

<ORACLE_HOME>/ord/jlib/orddicom.jar

JDK 5以上、Windows:

<ORACLE_HOME>\ord\jlib\orddicom.jar

Oracle XDB Javaクラス・ライブラリ DICOM機能

Oracle Multimediaメタデータ抽出

JDK 5以上、LinuxおよびUNIX:

<ORACLE_HOME>/rdbms/jlib/xdb.jar

JDK 5以上、Windows:

<ORACLE_HOME>\rdbms\jlib\xdb.jar

Oracle Multimedia Java classes for servlets and JSPライブラリ JavaサーブレットおよびJSPアプリケーション JDK 5以上、LinuxおよびUNIX:

<ORACLE_HOME>/ord/jlib/ordhttp.jar

JDK 5以上、Windows:

<ORACLE_HOME>\ord\jlib\ordhttp.jar

NLSキャラクタ・セット変換ライブラリ(オプション)<ORACLEHOME>/jlib/orai18n.jar NLSキャラクタ・セット変換が必要脚注1  JDK 5以上、LinuxおよびUNIX:

<ORACLE_HOME>/jlib/orai18n.jar

JDK 5以上、Windows:

<ORACLE_HOME>\jlib\orai18n.jar


脚注1 クライアント・アプリケーションとデータベース間でNLSのキャラクタ・セット変換が必要な場合は、CLASSPATH変数にorai18n.jarファイルを含める必要があります。 NLSキャラクタ・セット変換が必要な場合に、適切なライブラリを指定しないと、Oracle Multimediaオブジェクト型のキャラクタベース属性が16進のエンコーディング文字列として戻されることがあります。 NLSキャラクタ・セット変換の詳細は、『Oracle Database JDBC開発者ガイドおよびリファレンス』を参照してください。


注意:

JDBC OCIドライバを使用している場合は、LD_LIBRARY_PATH変数(LinuxまたはUNIXの場合)またはPATH変数(Windowsの場合)にJDBC OCI共有ライブラリの位置を指定する必要があります。

使用しているプラットフォームに応じて、<ORACLE_HOME>ディレクトリの次の位置のいずれかにJDBC OCI共有ライブラリを格納してください。


<ORACLE_HOME>/lib(LinuxおよびUNIXの場合、libocijdbc11.so
<ORACLE_HOME>\bin(Windowsの場合、ocijdbc11.dll

このライブラリ・パスは共有されるため、SQL*Plusなどの他のクライアント・アプリケーションを使用できるように、このライブラリ・パスがすでに指定されている場合があります。


7.5.2 アプリケーションへのOracle Javaクラスのインポート

環境変数を設定し、適切なOracle Javaライブラリを含めた後は、Oracle Multimedia DICOM Java APIを使用する前に、適切なインポート文をJavaアプリケーションに含める必要があります。

oracle.ord.dicom.*パッケージおよびoracle.ord.im.*パッケージから必要なクラスをインポートするには、次の文を実行します。

import oracle.ord.dicom.OrdDicom;
import oracle.ord.im.OrdImage;

java.sqlパッケージに含まれる標準のJDBCクラスの他に、次の文を実行してOracle JDBC拡張クラスoracle.jdbc.OracleResultSetをインポートする必要があります。

import oracle.jdbc.OracleResultSet;

7.5.3 JavaでのOracle Multimedia DICOM例外の処理

実行時に発生する可能性があるエラーを、常にアプリケーションで処理する必要があります。これにより、実行時エラーが発生してもプログラムの動作を継続できます。また、プログラムの動作中に、ユーザーがエラーの原因を認識することもできるようになります。エラーを適切に処理することによって、可能であれば、アプリケーションの実行中に常にエラーからリカバリできるようになります。 さらに、適切にエラーを処理することで、必要な情報が提供されるため、常にエラーの原因を認識できるようになります。

例外を処理する場合、Javaではtry/catchブロックを使用します。たとえば、Javaの場合、次のように例外を処理します。

try {
    //<some program logic>)
}
catch (exceptionName a) {
//Exception logic
}
finally {
//Execute logic if try block is executed even if an exception is caught
}

独自に設計、コーディングおよびデバッグしたアプリケーションであれば、プログラム内のどの箇所でエラーが発生してプログラムの処理が停止する可能性があるかがわかります。そのような箇所に対しては、発生する可能性のあるエラーを処理するための例外処理ブロックを追加する必要があります。 Java例外の処理の詳細は、『Oracle Database Java開発者ガイド』および『Oracle Database JDBC開発者ガイドおよびリファレンス』を参照してください。