Google Code が利用できる言語: English - Español - 日本語 - 한국어 - Português - Pусский - 中文(简体) - 中文(繁體)
Java Data Objects(JDO)は、データを含むオブジェクトをデータベースに保存するための標準なインターフェースです。この標準では、Java オブジェクトへのアノテーションの割り当て、クエリによるオブジェクトの取得、およびトランザクションを使用したデータベースの使用についてのインターフェースを定義しています。JDO インターフェースを使用しているアプリケーションは、データベース固有のコードを使用することなく、リレーショナル データベース、階層型データベース、オブジェクト データベースなどさまざまな種類のデータベースで作業できます。他のインターフェース標準については、JDO を使用し、アプリケーションを別のストレージ ソリューションへと簡単に移行できます。
App Engine Java SDK には、App Engine データストア用の JDO 2.3 の実装が含まれます。この実装は、JDO 2.3 におけるオープンソースの参照実装である DataNucleus Access Platform に基づいています。
JDO の詳細については、Access Platform 1.1 ドキュメントをご覧ください。特に、JDO マッピングおよび JDO API をご覧ください。
データストアへのアクセスに JDO を使用するには、App Engine アプリケーションで次の作業を実行する必要があります。
war/WEB-INF/lib/ ディレクトリに配置する必要があります。jdoconfig.xml という名前の設定ファイルは、アプリケーションの war/WEB-INF/classes/META-INF/ ディレクトリに配置する必要があります。この設定で、JDO が App Engine データベースを使用するように設定します。Google Plugin for Eclipse を使用している場合、上記の 3 つの作業を自動的に行います。新規プロジェクト ウィザードが JDO および DataNucleus App Engine プラグインの JAR を正しいディレクトリに配置し、jdoconfig.xml ファイルを作成します。構築プロセスは「拡張」手順を自動的に実行します。
プロジェクトの構築に Apache Ant を使用している場合、SDK に含まれている Ant タスクを使用し拡張手順を実行できます。プロジェクトのセットアップ時には、JAR をコピーし、設定ファイルを作成する必要があります。Ant タスクの詳細については、Apache Ant の使用をご覧ください。
JDO およびデータストアの JAR は App Engine Java SDK に含まれています。これらは appengine-java-sdk/lib/user/orm/ ディレクトリの下にあります。
JAR をアプリケーションの war/WEB-INF/lib/ ディレクトリにコピーします。
appengine-api.jar もまた war/WEB-INF/lib/ ディレクトリにあることを確認します。(プロジェクトの作成時にコピー済みの場合もあります)。App Engine DataNucleus プラグインはこの JAR を使用しデータストアにアクセスします。
JDO インターフェースには、war/WEB-INF/classes/META-INF/ ディレクトリ内に jdoconfig.xml という名前の設定ファイルが必要です。ファイルはこの場所に直接作成することができます。また、構築プロセスでソース ディレクトリからこの場所にコピーすることもできます。
ファイルには次の内容が含まれるように作成してください。
<?xml version="1.0" encoding="utf-8"?>
<jdoconfig xmlns="http://java.sun.com/xml/ns/jdo/jdoconfig"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://java.sun.com/xml/ns/jdo/jdoconfig">
<persistence-manager-factory name="transactions-optional">
<property name="javax.jdo.PersistenceManagerFactoryClass"
value="org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManagerFactory"/>
<property name="javax.jdo.option.ConnectionURL" value="appengine"/>
<property name="javax.jdo.option.NontransactionalRead" value="true"/>
<property name="javax.jdo.option.NontransactionalWrite" value="true"/>
<property name="javax.jdo.option.RetainValues" value="true"/>
<property name="datanucleus.appengine.autoCreateDatastoreTxns" value="true"/>
</persistence-manager-factory>
</jdoconfig>
JDO は構築プロセスにおいてコンパイル後の「拡張」手順を使用し、データ クラスと JDO 実装を関連付けます。
Eclipse を使用している場合、Google Plugin for Eclipse は構築時にこの手順を自動的に実行します。
Apache Ant を使用している場合、SDK にはこの手順を実行する Ant タスクが含まれます。Ant タスク使用の詳細については、Apache Ant の使用をご覧ください。
コマンド ラインで次のコマンドを実行し、コンパイル済みのクラスで拡張手順を実行できます。
java -cp classpath com.google.appengine.tools.enhancer.Enhance class-files
「classpath」には、ユーザーのデータ クラスに加え、appengine-java-sdk/lib/ ディレクトリからの JAR ファイル appengine-tools-api.jar が含まれている必要があります。
DataNucleus のバイトコードエンハンサの詳細については、DataNucleus のドキュメントをご覧ください。
アプリケーションは、PersistenceManager クラスのインスタンスを使用して JDO を操作します。このクラスはインスタンス化し、PersistenceManagerFactory クラスのメソッドをコールし利用可能となります。ファクトリは JDO 設定を使用し PersistenceManager インスタンスを生成します。
PersistenceManagerFactory インスタンスは初期化に時間がかかるため、アプリケーションは単一のインスタンスを再利用した方がよいでしょう。必ず再利用するようにするために、アプリケーションが(同じ設定名の)PersistenceManagerFactory を 1 つ以上インスタンス化した場合は例外が発生します。PersistenceManagerFactory インスタンスを管理するための簡単な方法は、シングルトン ラッパー クラスを静的なインスタンスで作成することです。次に例を示します。
PMF.java
import javax.jdo.JDOHelper;
import javax.jdo.PersistenceManagerFactory;
public final class PMF {
private static final PersistenceManagerFactory pmfInstance =
JDOHelper.getPersistenceManagerFactory("transactions-optional");
private PMF() {}
public static PersistenceManagerFactory get() {
return pmfInstance;
}
}
データストアにアクセスするリクエストごとに、アプリケーションはファクトリ インスタンスを使用して 1 つの PersistenceManager インスタンスを生成します。
import javax.jdo.JDOHelper;
import javax.jdo.PersistenceManager;
import javax.jdo.PersistenceManagerFactory;
import PMF;
// ...
PersistenceManager pm = PMF.get().getPersistenceManager();
PersistenceManager を使用してデータ オブジェクトの格納、更新、削除、およびデータストアへのクエリを実行します。
PersistenceManager インスタンスの使用が完了した後は、インスタンスの close() メソッドをコールする必要があります。close() メソッドをコールした後に PersistenceManager インスタンスを使用するとエラーとなります。
try {
// ... do stuff with pm ...
} finally {
pm.close();
}
JDO インターフェースの次の機能は、App Engine 実装ではサポートしていません。
@PersistenceCapable アノテーションの IdentityType.DATASTORE。IdentityType.APPLICATION のみをサポートしています。