public class DefaultJdoDialect extends java.lang.Object implements JdoDialect, PersistenceExceptionTranslator
JdoDialect
インターフェースのデフォルト実装。Spring 4.0 では、JDO 3.0 (または、JDO 3.0 を超えるセマンティクス) 用に設計されています。JdoTransactionManager
によってデフォルトのダイアレクトとして使用されます。beginTransaction
で標準の JDO トランザクションを開始するだけです。getJdbcConnection
で JDO DataStoreConnection のハンドルを返します。flush
で対応する JDO PersistenceManager 操作を呼び出します。該当する場合は、例外変換に Spring SQLExceptionTranslator を使用します。
JDO 3.0 の場合でも、特別なトランザクションセマンティクスとより高度な例外変換にはベンダー固有のサブクラスが必要であることに注意してください。さらに、ベンダー固有のサブクラスでは、JDO 3.0 のラッパーハンドルではなく、getJdbcConnection
のネイティブ JDBC 接続を公開することが推奨されます。
このクラスは、Spring の PersistenceExceptionTranslationPostProcessor によって自動検出された PersistenceExceptionTranslator インターフェースも実装し、ネイティブ例外を Spring DataAccessExceptions に AOP ベースで変換します。標準の DefaultJdoDialect Bean が存在すると、PersistenceExceptionTranslationPostProcessor は自動的に JDO 例外を変換できるようになります。
コンストラクターと説明 |
---|
DefaultJdoDialect() 新しい DefaultJdoDialect を作成します。 |
DefaultJdoDialect(java.lang.Object connectionFactory) 新しい DefaultJdoDialect を作成します。 |
修飾子と型 | メソッドと説明 |
---|---|
java.lang.Object | beginTransaction(javax.jdo.Transaction transaction, TransactionDefinition definition) この実装は、標準の JDO Transaction.begin() メソッドを呼び出し、必要に応じて Transaction.setIsolationLevel(String) も呼び出します。 |
void | cleanupTransaction(java.lang.Object transactionData) デフォルトの beginTransaction 実装ではクリーンアップが必要ないため、この実装では何も行われません。 |
protected java.lang.String | extractSqlStringFromException(javax.jdo.JDOException ex) 指定された例外から SQL 文字列を抽出するためのテンプレートメソッド。 |
ConnectionHandle | getJdbcConnection(javax.jdo.PersistenceManager pm, boolean readOnly) この実装は、JDO に対して DataStoreConnectionHandle を返します。 |
SQLExceptionTranslator | getJdbcExceptionTranslator() このダイアレクトの JDBC 例外トランスレータがあればそれを返します。 |
protected java.lang.String | getJdoIsolationLevel(TransactionDefinition definition) 指定された Spring トランザクション定義に使用する JDO 分離レベル文字列を決定します。 |
void | releaseJdbcConnection(ConnectionHandle conHandle, javax.jdo.PersistenceManager pm) Connection が PersistenceManager で暗黙的に閉じられると仮定すると、この実装は何もしません。 |
void | setJdbcExceptionTranslator(SQLExceptionTranslator jdbcExceptionTranslator) このダイアレクトの JDBC 例外トランスレータを設定します。 |
DataAccessException | translateException(javax.jdo.JDOException ex) この実装は、PersistenceManagerFactoryUtils に委譲します。 |
DataAccessException | translateExceptionIfPossible(java.lang.RuntimeException ex) Spring の PersistenceExceptionTranslationPostProcessor によって自動検出される PersistenceExceptionTranslator インターフェースの実装。 |
public DefaultJdoDialect()
public DefaultJdoDialect(java.lang.Object connectionFactory)
connectionFactory
- デフォルトの JDBC 例外トランスレータを初期化するために使用される JDO PersistenceManagerFactory の接続ファクトリ PersistenceManagerFactory.getConnectionFactory()
, PersistenceManagerFactoryUtils.newJdbcExceptionTranslator(Object)
public void setJdbcExceptionTranslator(SQLExceptionTranslator jdbcExceptionTranslator)
指定されている場合、JDOException のあらゆる SQLException 根本原因に適用されます。デフォルトでは、JDO プロバイダーのネイティブ例外変換に依存します。
jdbcExceptionTranslator
- 例外変換者 SQLException
, JDOException.getCause()
, SQLErrorCodeSQLExceptionTranslator
, SQLStateSQLExceptionTranslator
public SQLExceptionTranslator getJdbcExceptionTranslator()
public java.lang.Object beginTransaction(javax.jdo.Transaction transaction, TransactionDefinition definition) throws javax.jdo.JDOException, java.sql.SQLException, TransactionException
Transaction.begin()
メソッドを呼び出し、必要に応じて Transaction.setIsolationLevel(String)
も呼び出します。JdoDialect
の beginTransaction
transaction
- JDO 取引を開始する definition
- セマンティクスを定義する Spring トランザクション定義 javax.jdo.JDOException
- JDO メソッドによってスローされた場合 java.sql.SQLException
- JDBC メソッドによってスローされた場合 TransactionException
- 無効な引数の場合 Transaction.begin()
, InvalidIsolationLevelException
protected java.lang.String getJdoIsolationLevel(TransactionDefinition definition)
definition
- Spring トランザクション定義 null
Transaction.setIsolationLevel(String)
、Constants.TX_SERIALIZABLE
、Constants.TX_REPEATABLE_READ
、Constants.TX_READ_COMMITTED
、Constants.TX_READ_UNCOMMITTED
public void cleanupTransaction(java.lang.Object transactionData)
JdoDialect
の cleanupTransaction
transactionData
- トランザクションデータを保持する任意のオブジェクト(存在する場合) (beginTransaction によって返された)beginTransaction(javax.jdo.Transaction, org.springframework.transaction.TransactionDefinition)
public ConnectionHandle getJdbcConnection(javax.jdo.PersistenceManager pm, boolean readOnly) throws javax.jdo.JDOException, java.sql.SQLException
注意 : JDO DataStoreConnection は常にラッパーであり、ネイティブの JDBC 接続ではありません。ネイティブの JDBC 接続 (または、Spring NativeJdbcExtractor を介してラップ解除される接続プールハンドル) にアクセスする必要がある場合は、このメソッドをオーバーライドして、対応するベンダー固有のメカニズムを通じてネイティブ接続を返します。
JDO DataStoreConnection は PersistenceManager から「借用」されるだけなので、できるだけ早く返す必要があります。実際、JDO では、PersistenceManager の作業を続行する前に、フェッチされた接続を閉じる必要があります。このため、公開された ConnectionHandle は、各 JDBC データアクセス操作の終了時 (つまり、DataSourceUtils.releaseConnection
) に、JDBC 接続を積極的に解放します。
JdoDialect
の getJdbcConnection
pm
- 現在の JDO PersistenceManagerreadOnly
- 接続が読み取り専用の目的でのみ必要かどうか releaseJdbcConnection
に渡されます。JDBC 接続を取得できない場合は null
に渡される javax.jdo.JDOException
- JDO メソッドによってスローされた場合 java.sql.SQLException
- JDBC メソッドによってスローされた場合 PersistenceManager.getDataStoreConnection()
, NativeJdbcExtractor
, DataSourceUtils.releaseConnection(java.sql.Connection, javax.sql.DataSource)
public void releaseJdbcConnection(ConnectionHandle conHandle, javax.jdo.PersistenceManager pm) throws javax.jdo.JDOException, java.sql.SQLException
JDO プロバイダーが、アプリケーションが閉じることを期待する接続ハンドルを返す場合、ダイアレクトはここで Connection.close
を呼び出す必要があります。
JdoDialect
の releaseJdbcConnection
conHandle
- 解放する JDBC 接続ハンドル pm
- 現在の JDO PersistenceManagerjavax.jdo.JDOException
- JDO メソッドによってスローされた場合 java.sql.SQLException
- JDBC メソッドによってスローされた場合 Connection.close()
public DataAccessException translateExceptionIfPossible(java.lang.RuntimeException ex)
JDOException の場合は、この JdoDialect を使用して例外を変換します。それ以外の場合は、不明な例外を示す null
を返します。
PersistenceExceptionTranslator
の translateExceptionIfPossible
ex
- 変換する RuntimeExceptionnull
。この場合、実際の永続性の問題ではなく、ユーザーコードが原因である可能性があります。)PersistenceExceptionTranslationPostProcessor
, translateException(javax.jdo.JDOException)
public DataAccessException translateException(javax.jdo.JDOException ex)
JdoDialect
の translateException
ex
- JDOException がスローされました null
であってはなりません)PersistenceManagerFactoryUtils.convertJdoAccessException(javax.jdo.JDOException)
protected java.lang.String extractSqlStringFromException(javax.jdo.JDOException ex)
デフォルトの実装では常に null
が返されます。サブクラスでオーバーライドして、ベンダー固有の例外クラスの SQL 文字列を抽出できます。
ex
- SQLException を含む JDOExceptionnull