C 非推奨のContent Repository API for Java

Oracle XML DB Content Connectorは、JSR-170としてJavaコミュニティが開発した標準Java APIであるContent Repository API for Java (JCRとも呼ばれる)を実装します。Oracle XML DBリポジトリには、Oracle XML DB Content Connectorを使用してアクセスできます。

注意:

Oracle XML DB Content Connectorは、Oracle Database 12c リリース2 (12.2.0.1)から非推奨となりました。Java標準JSR-170は、JSR-283 Content Repository for Java Technology Version 2.0に置き換えられました。

C.1 Content Repository API for Java (JCR)について

JCR 1.0は、アプリケーションがコンテンツ・リポジトリと対話するための標準Java APIを定義します。コンテンツ・リポジトリは、ノードのツリーであり、各ノードは1つ以上の子ノードを持つことができます。ルート・ノード以外の各ノードは、親ノードを1つのみ持ちます。

子ノードに加えて、各ノードは1つ以上のプロパティを持つことができます。プロパティは、単純な名前と値の組合せです。たとえば、コンテンツ・リポジトリで特定のファイルを表すノードには、値がファイルの作成日であるjcr:createdというプロパティがあります。

各プロパティにはプロパティ型があります。たとえば、jcr:createdプロパティには値を有効な日時にするよう要求するDATEというプロパティ型があります。

同様に、各ノードにはノード型があります。たとえば、ファイルを表すノードにはnt:fileというノード型があります。ノード型は、ノードが持つことが可能または必要な子ノードおよびプロパティを制御します。たとえば、nt:file型のすべてのノードにはjcr:createdプロパティがあります。

ノードとプロパティには名前が付けられているため、パスで指定できます。JCRでは絶対パスと相対パスの両方がサポートされています。たとえば、絶対パス

/My Documents/pictures/puppy.jpg/jcr:created

は、ファイルpuppy.jpgjcr:createdプロパティに変換されます。また、次の相対パスにより、このプロパティをMy Documentsフォルダに対して指定できます。

pictures/puppy.jpg/jcr:created

ノード名およびプロパティ名は、名前空間修飾にできます。XML同様、JCRはコロンで区切られた名前空間接頭辞を使用して、jcr:createdなどの名前空間修飾名を表します。XMLと異なり、JCRではリポジトリ全体の名前空間レジストリで名前空間接頭辞とURIのマッピングが記録されます。たとえば、jcr接頭辞はURI http://www.jcp.org/jcr/1.0にマップされます。

関連項目:

JSR 170: Content Repository for Java technology API。この仕様の第4章でJCR 1.0の簡単な概要が説明されています。

C.2 Oracle XML DB Content Connectorについて

Oracle XML DB Content Connectorでは、JCR 1.0 Javaを使用してOracle XML DBリポジトリにアクセスできます。アプリケーションは、スタンドアロンJava仮想マシン(JVM)またはJ2EEコンテナのいずれかで動作できます。このリポジトリのファイルおよびフォルダは、JCRノード(およびそれらのノードのプロパティ)として表されます。

JCR APIを使用して、リポジトリ・ファイルおよびフォルダを作成、取得および更新できます。

注意:

Oracle XML DB Content ConnectorをデータベースOracle JVM(データベース・プロセス内で使用可能なJava仮想マシン)で使用できません。データベース層でContent Connectorを使用するには、スタンドアロンJava仮想マシンまたはJ2EEコンテナのいずれかを使用する必要があります。

C.3 JCRでのOracle XML DBリポジトリの公開方法

Oracle XML DB Content Connectorは、Oracle XML DBリポジトリのデータをJCRノードおよびプロパティとして表します。ファイルおよびフォルダは、それぞれ型がnt:filent:folderのノードとして表されます。そのコンテンツとメタデータは、ノード型がnt:resourceのノードとして公開されます。

C.4 Oracle XML DB Content ConnectorのCLASSPATH

Oracle XML DB Content Connectorでは、環境変数CLASSPATHに特定のエントリが必要です。

  • $ORACLE_HOME/lib/jcr-1.0.jar

  • $ORACLE_HOME/lib/ojcr.jar

  • $ORACLE_HOME/lib/xmlparserv2.jar

  • $ORACLE_HOME/jlib/xquery.jar

C.5 JCRリポジトリ・オブジェクトの取得

Oracle XML DB Content Connectorでは、oracle.jcr.OracleRepositoryは、JCRリポジトリへのエントリ・ポイントとなるJCRインタフェースjavax.jcr.Repositoryを実装します。これを使用して、Oracle XML DBリポジトリのリポジトリ・オブジェクトを取得できます。

例C-1のコード・フラグメントは、これを示しています。

OracleRepositoryは、java.io.Serializableおよびjavax.naming.Referenceableの両方を実装します。これによりアプリケーションのデプロイ時にOracleRepositoryオブジェクトを作成および構成し、JNDIディレクトリにすぐに使用できるOracleRepositoryオブジェクトを格納できます。実行時に、アプリケーションはJNDIディレクトリから構成済のOracleRepositoryオブジェクトを取得できます。JCRの仕様でお薦めするこの方法により、デプロイメントと実行時の懸案事項が区別されます。

Oracle XML DB Content Connectorでは、JCR名前空間レジストリを構成する接頭辞とURIのマッピングはOracleRepository構成の一部として格納されます。

関連項目:

Oracle Database XML Java APIリファレンス、パッケージoracle.jcr

例C-1 リポジトリ・オブジェクトの取得方法を示すコード・フラグメント

import oracle.jcr.OracleRepository;
import oracle.jcr.OracleRepositoryFactory;
import oracle.jcr.xdb.XDBRepositoryConfiguration;
import oracle.jdbc.pool.OracleDataSource;
...
XDBRepositoryConfiguration configuration =
  new XDBRepositoryConfiguration();
OracleDataSource ods =
  (OracleDataSource)configuration.getDataSource();
// databaseURL is a JDBC database URL.
ods.setURL(databaseURL);
// OracleRepository implements javax.jcr.Repository.
OracleRepository repository =
  OracleRepositoryFactory.createOracleRepository(configuration);

C.6 Oracle XML DB Content Connectorを使用してリポジトリにファイルをアップロードするためのJavaコード

Oracle XML DB Content Connectorを使用して、ローカルのファイル・システムからOracle XML DBリポジトリにファイルをアップロードできます。

例C-2は、これを示すJavaプログラムです。コマンドラインからこれをコンパイルおよび実行できます。プログラムには、次のようなコマンドライン引数が必要です。

  • JDBCデータベースURL

  • ユーザーID

  • ユーザー・パスワード

  • ファイルをアップロードするOracle XML DBリポジトリのフォルダ

  • アップロードするファイル

  • MIMEタイプ

例C-3に、これを示します。

例C-2 Oracle XML DB Content Connectorを使用したファイルのアップロード

import java.io.FileInputStream;
 
import javax.jcr.Node;
import javax.jcr.Session;
import javax.jcr.SimpleCredentials;
 
import oracle.jcr.OracleRepository;
import oracle.jcr.OracleRepositoryFactory;
 
import oracle.jcr.xdb.XDBRepositoryConfiguration;
 
import oracle.jdbc.pool.OracleDataSource;
 
public class UploadFile
{
  public static void main(String[] args)
    throws Exception
  {
    String databaseURL = args[0];
    String userName = args[1];
    String password = args[2];
    String parentPath = args[3];
    String fileName = args[4];
    String mimeType = args[5];
    
    // Get the JCR Repository object.
    XDBRepositoryConfiguration configuration =
      new XDBRepositoryConfiguration();
 
    OracleDataSource ods =
      (OracleDataSource)configuration.getDataSource();
 
    ods.setURL(databaseURL);
    
    OracleRepository repository =
      OracleRepositoryFactory.createOracleRepository(configuration);
    
    // Create a JCR Session.
    SimpleCredentials sc =  
      new SimpleCredentials(userName, password.toCharArray());
 
    Session session = repository.login(sc);
 
    // Get the parent node.
    Node parentNode = (Node)session.getItem(parentPath);
    
    // Get the child contents.
    FileInputStream inputStream = new FileInputStream(fileName);
    
    // Create child node.
    Node node = parentNode.addNode(fileName, "nt:file");
    Node contentNode = node.getNode("jcr:content");
    contentNode.setProperty("jcr:mimeType", mimeType);
    contentNode.setProperty("jcr:data", inputStream);
    
    // Save changes and logout.
    session.save();
    session.logout();
  }
}
 
// EOF

例C-3 コマンドラインを使用したファイルのアップロード

export CLASSPATH=.:$ORACLE_HOME/lib/jcr-1.0.jar:$ORACLE_HOME/lib/ojcr.jar:Foot 1
$ORACLE_HOME/lib/xmlparserv2.jar:$ORACLE_HOME/jlib/xquery.jar

javac UploadFile.java
java UploadFile jdbc:oracle:oci:@ quine password /public MyFile.txt text/plain

C.7 追加のJCRコード例

追加のJCRコード例は、$ORACLE_HOME/xdk/demo/java/jcrで入手できます。コード・サンプルごとに、READMEファイルにその目的および使用方法が記述されています。

C.8 Oracle XML DB Content Connectorでの標準JavaロギングAPIの使用

Oracle XML DB Content Connectorは標準のjava.util.loggingフレームワークを使用します。そのフレームワークにより提供されたロギングAPIを使用して、ロギング動作を制御できます。

たとえば、次のJavaコード・フラグメントはすべてのロギングを無効にします。

import java.util.logging.LogManager;
...
LogManager.getLogManager().reset();

C.9 サポートされているJCRコンプライアンス・レベル

JCRバージョン1.0を定義するJSR-170標準では、2つのコンプライアンス・レベルと一連のオプション機能が定義されています。Oracle XML DB Content Connectorでは、レベル1(読取り機能)とレベル2(書込み機能)がサポートされています。

C.10 Oracle XML DB Content Connectorの制限

Oracle XML DB Content Connectorには特定の制限事項が適用されます。

C.11 XML SchemaとJCR

Oracle XML DB Content ConnectorはXML SchemaからJCRノード型を作成できます。



脚注の説明

脚注1:

この文は、説明のために2行に分割されています。