wsenhancer コマンド
Java™ Persistence API (JPA) アプリケーション用のエンティティー・エンハンサー・ツールは、バイトコードをエンティティー・クラス・ファイルに挿入します。これにより、JPA プロバイダーはエンティティーの状態を管理できるようになります。このコマンド・ライン・ツールを使用すると、WebSphere® Application Server 用の Java™ Persistence API (JPA) 2.0 仕様プロバイダー WSJPA/OpenJPA におけるエンティティーを拡張できます。
すべてのエンティティー・クラスの状態を管理したい場合、アプリケーション・サーバーとともに JPA を使用するためには、すべてのエンティティー・クラスを機能拡張する必要があります。 コンテナー管理の環境では、自動的機能拡張はコンテナーによって提供されます。 しかし、Java SE 環境では、パーシスタンスを管理するコンテナーがなく、アプリケーション・ファイルをテストのためにパッケージ化する前に、このコマンドを頻繁に使用する場合があります。 JPA エンティティーを作成すると、Java アーカイブ (JAR) ファイルをアプリケーションのエンタープライズ・アーカイブ (EAR) ファイルにパッケージする前に、wsenhancer ツールを実行してバイトコードをエンティティーに注入することができます。
構文
コマンド構文は次のようになります。
![[AIX]](../images/aixlogo.gif)
![[HP-UX]](../images/hpux.gif)
![[Linux]](../images/linux.gif)
![[Solaris]](../images/solaris.gif)
![[z/OS]](../images/ngzos.gif)
wsenhancer.sh [parameters][arguments]
![[IBM i]](../images/iseries.gif)
wsenhancer [parameters][arguments]
![[Windows]](../images/windows.gif)
wsenhancer.bat [parameters][arguments]
パラメーター
- -directory/-d <output directory>: 出力ディレクトリーへのパスを指定します。
ディレクトリーが拡張クラスのパッケージと一致しない場合、パッケージ構造はディレクトリーの下に作成されます。デフォルトでは、エンハンサーは元の .class ファイルを上書きします。
- -enforcePropertyRestrictions/-epr <true/t
| false/f>: プロパティー・アクセスに課された制限にプロパティー・アクセス・エンティティーが従っていない場合に、例外を生成するかどうかを指定します。
デフォルトでは、false に設定されます。
- -addDefaultConstructor/-adc <true/t | false/f>: すべてのパーシスタント・クラスが引数のないコンストラクターを定義するように指定します。このフラグは、コンストラクターがまだ存在していないパーシスタント・クラスに、引数のない保護されたコンストラクターを追加することをエンハンサーに通知します。
- -tmpClassLoader/-tcl <true/t | false/f>: エンハンサーがパーシスタント・クラスを一時クラス・ローダーにロードするかどうかを指定します。
この機能により、後から他のコードでクラスの拡張バージョンを同じ Java 仮想マシン (JVM) にロードできるようになります。デフォルトでは true に設定されています。
トラブルの回避 (Avoid trouble): エンハンサーを実行しているときにクラス・ロードの問題が発生する場合は、デバッグ・ステップとして、このフラグを false に設定することができます。gotcha
- クラス名には、以下のいずれかを指定します。
- クラスのフルネーム。
- クラスの .java 名。
- クラスの .class ファイル。
使用法
wsenhancer ツールを使用するには、エンティティーを JPA 仕様に定義し、そのエンティティーをコンパイルする必要があります。エンティティーを JAR ファイルにパッケージ化する前に、wsenhancer ツールをエンティティーに対して実行してください。 エンティティーが既にパッケージされている場合は、エンティティー・クラス・ファイルを抽出し、エンハンサーを実行し、JAR ファイルを再作成します。
- エンティティーがクラスパス内にあることを確認します。クラスパス内にない場合は、追加します。
- wsenhancer コマンドを実行します。 これは profile_root/bin ディレクトリーにあります。
例
クラスパス上のすべてのエンティティーを機能拡張するには、以下のようにします。
![[AIX]](../images/aixlogo.gif)
![[HP-UX]](../images/hpux.gif)
![[Linux]](../images/linux.gif)
![[Solaris]](../images/solaris.gif)
![[z/OS]](../images/ngzos.gif)
$ cd build /home/user/myproject/build $ ${profile_root}/bin/wsenhancer.sh
![[IBM i]](../images/iseries.gif)
$ cd build
/home/user/myproject/build $ ${profile_root}/bin/wsenhancer
![[Windows]](../images/windows.gif)
C:¥myproject¥cd build
C:\myproject\build>%profile_root%\bin\wsenhancer.bat
myproject 内のすべてのエンティティーが機能拡張されます。
ソース・ファイルを保有している場合に、特定のエンティティーを機能拡張するには、以下のようにします。
![[AIX]](../images/aixlogo.gif)
![[HP-UX]](../images/hpux.gif)
![[Linux]](../images/linux.gif)
![[Solaris]](../images/solaris.gif)
![[z/OS]](../images/ngzos.gif)
$ cd build /home/user/myproject/build $ ${profile_root}/bin/wsenhancer.sh Magazine.java
![[IBM i]](../images/iseries.gif)
$ cd build
/home/user/myproject/build $ ${profile_root}/bin/wsenhancer Magazine.java
![[Windows]](../images/windows.gif)
C:¥myproject¥cd build
C:\myproject\build>%profile_root%\bin\wsenhancer.bat Magazine.java
コンパイル済みクラス・ファイルを保有している場合に、特定のエンティティーを機能拡張するには、以下のようにします。
![[AIX]](../images/aixlogo.gif)
![[HP-UX]](../images/hpux.gif)
![[Linux]](../images/linux.gif)
![[Solaris]](../images/solaris.gif)
![[z/OS]](../images/ngzos.gif)
$ export CLASSPATH=target/classes
$ ${profile_root}/bin/wsenhancer.sh /bin/wsenhancer.sh target/classes/jpa/example/MyEntity.class
![[IBM i]](../images/iseries.gif)
$ export CLASSPATH=target/classes
$ ${profile_root}/bin/wsenhancer target/classes/jpa/example/MyEntity.class
![[Windows]](../images/windows.gif)
C:> cd build
C:¥build> SET CLASSPATH=target¥classes
C:\build>%profile_root%\bin\wsenhancer.bat \bin\wsenhancer.bat target\classes\jpa\example\Magazine.class
プロジェクトにあるエンティティー Magazine.java が機能拡張されます。
追加情報
機能拡張ツールについて詳しくは、Apache OpenJPA 資料のパーシスタント・クラスに関するセクションを参照してください。