2010年9月6日月曜日

Windows 2008 R2で無線LAN認証

証明書の期限が近付いたら自動更新するような証明書を作りましたが、1点問題がありました。無線LAN(EAP-TLS)で認証する際にクライアントで、「該当する証明書が見つかりません」というようなエラーが表示され、無線LANにつながらないのです。
解決方法を調べてみましたがなかなか見つかりませんでしたが、ついにわかりました。
原因はユーザーテンプレートを複製する際に「Windows Server 2008 Enterprise」を選択していたことだと思われます。
というのも、「Foundation Network Companion Guide: Deploying Computer and User Certificates」に沿って作業したところ、あっさりつながったのです。
以下に、無線LANにつながる自動更新可能な証明書テンプレートを作成する際の注意点をまとめておきます。

  •  証明書テンプレートコンソールで複製する証明書は「ユーザー」とする。
  •  テンプレートは「Windows Server 2003 Enterprise」を選択する。
  •  「セキュリティ」タブでは「Domain Users」に「読み取り」、「登録」および「自動登録」をチェックする。

これでドメインユーザーに対して自動配布かつ自動更新可能な証明書を展開することができます。

2010年9月3日金曜日

Windows 2008 R2での証明書自動更新 その3

最終的にはグループポリシーで自動的に証明書を展開したいところですが、先ずは手動で証明書をインストールします。

  1. クライアント側でmmcを起動し、証明書スナップインを追加します。

  2. 次に、「証明書-現在のユーザー」→「個人」→「証明書」のコンテキストメニューから「すべてのタスク」→「新しい証明書の要求」をクリックします。

  3. 「証明書の登録」の「証明書の登録ポリシーの選択」で「Active Directory登録ポリシー」を選択します。

  4. 以前作成した自動更新可能な証明書テンプレートを選択し、「登録」ボタンをクリックしローカルに証明書をインストールします。
無事クライアントへ証明書がインストールできました。

Windows 2008 R2での証明書自動更新 その2

引き続いて証明書の自動更新について調査です。

Windows Server 2008 R2 Standard(以下Win2008R2とします)にて自動更新が可能なVersion 2以降の証明書テンプレートが利用できることが分かったところで、実際に証明書の自動更新が可能な環境を作ってみます。
尚、前提条件として
  • Active DirectoryスキーマがWin2008となっている
  • Active Directory証明書サービス(エンタープライズのルート)がインストール済み
であることとします。

AD証明書サービスのベストプラクティスアナライザーでスキャン

最初にWin2008R2のサーバーマネージャーで「役割」→「Active Directory証明書サービス」をクリックし、「ベストプラクティスアナライザー」で「この役割をスキャン」をクリックします。
その結果、

  • 「ユーザー自動登録のグループポリシーが有効になっていません」
  • 「コンピューター自動登録のグループポリシーが有効になっていません」
と表示されました。ので、先ずはユーザー証明書の自動更新から対処します。
対応方法としては、「AD CS: User autoenrollment should be enabled when an enterprise CA is installed」に記載されています。
その手順の概要は、
  1. デフォルトドメインポリシーで公開鍵の自動更新を有効にする
    (「ユーザーの構成」→「ポリシー」→「Windowsの設定」→「セキュリティの設定」→「公開キーのポリシー」の「証明書サービス クライアント - 自動登録」で「構成モデル」を有効にする)

  2. 自動更新用に証明書テンプレートを設定
    (「ユーザー」テンプレートの複製を適当な名前で複製します。その際、「セキュリティー」タブで「Domain Users」に「読み取り」と「自動更新」、「登録」の権限を設定しておきます。)

  3. エンタープライズCAに証明書テンプレートをアサインする
    (certserv.mscを起動し「証明書テンプレート」のコンテキストメニューで「新規作成」→「発行する証明書テンプレート」→2で作成したテンプレートを選択す・・・???)
2で作成したテンプレートを選択しようとしたところ、なぜか表示されず。ググってみたところ、追い打ちをかけるように「Troubleshoot Active Directory Certificate Services」で、
I cannot add a new version 2 or version 3 certificate template to my CA.
  • Cause: The CA is installed on a server running Windows Server 2008 R2 Standard or Windows Server 2008 Standard. Version 2 and version 3 certificate templates and certificate autoenrollment can only be used with CAs installed on Windows Server 2008 R2 Enterprise, Windows Server 2008 R2 Datacenter, Windows Server 2008 Enterprise, or Windows Server 2008 Datacenter.

  • Solution: Upgrade to Windows Server 2008 R2 Enterprise, Windows Server 2008 R2 Datacenter, Windows Server 2008 Enterprise, or Windows Server 2008 Datacenter.
と(赤はこちらでいれたものです)。マイクロソフト内でも認識が統一されていないのか、相変わらず「R2 StandardではV2、V3の証明書テンプレートはCAに追加できないよ」と記載されています。

で、さらに調べたところ「You cannot add V2 or V3 templates after an inplace upgrade was performed using Windows Server 2008 enterprise CA」では、

-Symptom

V2 and V3 templates are not available if an inplace upgrade was performed from a Windows Server 2003 or 2008 Certification Authority (CA) to a Windows Server 2008 enterprise CA.

-Cause

The enterprise features are missing because the underlying SKU is standard.

-Solution

To fix the problem, follow these steps:





1. Close the Certificate Services MMC snap-in.

2. Run the following commands from an elevated command-line on the CA computer:



certutil -setreg ca\setupstatus +512

net stop certsvc

net start certsvc

When you re-open the Certificate Services MMC snap-in, you will be able to assign V1, V2 and V3 certificate templates to the certification authority.


まさに、今現象に今ぶち当たっているわけで、該当するサーバーはWin2008StandardからR2へアップグレードしたものでした。
というわけで、記載の通り対処したところ、めでたく2で作成した証明書テンプレートが一覧に表示されるようになりました。

Windows 2008 R2での証明書自動更新 その1

社内でWindows 2008 R2 StandardサーバーをドメインコントローラーとしたActive Directory環境を運用していますが、先日あるユーザーの証明書が期限切れになってしまい、証明書の自動更新について調査してみました。


証明書テンプレートの種類について

証明書はそのテンプレートに沿って発行されますが、証明書テンプレートにはいくつかの種類があります(参照)。

  • Version 1
    一般的な証明書要件をサポート。
    変更できるプロパティはアクセス許可のみ。

  • Version 2
    Windows Server 2003から導入。
    証明書の要求、発行、使用方法を管理者が管理できる。
    証明書の自動登録がサポートされる。

  • Version 3
    Version 2の機能+Suite B暗号化アルゴリズム
Windows Server 2008 R2に関しては全てのエディションがVersion 1~3をサポートします(「Active Directory Certificate Services Features by SKU」)。

となると、
 「Windows Server 2008 (R2) からでもはじめたい Windows PKI」
に書いてある、
 

- 補足情報 (エディション情報)

Windows Server OS には以下のエディションがあります。

「Standard」「Enterprise」「Datacenter」

ちなみに、以下の機能は、「Enterprise」 と 「Datacenter」 エディションのみがサポートしており、Standard エディションはサポートしていない機能となります。

  • テンプレートの複製や編集
  • 証明書自動発行
  • キーのアーカイブ

は、間違った情報なのかしら。

2008年5月8日木曜日

muninでWindowsを監視 -muninのインストール-

muninで複数のホストを集中監視したいので、WindowsのSNMPを取得してグラフ化できるようにしました。
ここでは
  • OS: CentOS-5
  • munin: 1.3.4
  • 監視対象: Windows 2003サーバー
とします。

まずはmuninのインストール。途中で抜けているかもしれませんがご容赦を。基本的にはmunin-1.3.4/INSTALLにすべて書いてあります。
インストールの前にまずはグループ:munin、ユーザー:muninを作成しておきます。次にmunin-1.3.4ディレクトリ配下で、

# make install-main
.......... munin自体のインストール
# make intstall-node && make install-mode-plugins
.......... munin-nodeとプラグインのインストール

を行います。インストールされるディレクトリ等の調整はMakefile.configで行ってください。
SNMPを利用した監視を行いたいので、net-snmpがインストールされていなければyum等でインストールしてください。
次にperlモジュールNet::SNMPをインストールします。

# perl -MCPAN -e shell
cpan[1] > install Net::SNMP
.......... Net::SNMPモジュールと依存モジュールがインストールされる
これで準備完了。

VMware仮想ディスク容量の拡張

VMware Infrastructure上で動作しているWindows 2003サーバー(WSUSとして動作)のディスク容量がひっ迫してきたので、仮想ディスクを拡張してみました。
仮想ディスクの拡張方法を調べようとググってみたところ、vmware-vmvdiskmanagerを利用する方法がヒットしたけど、VI3.0にはそんなものないしと思ってVMware Infrastructure ClientのVirtual Machine PropertiesでHard Diskを見るとどうやら容量を変更できることが判明。
というわけでその方法です。

  1. 念のため容量を変更するVMのバックアップを取得する。
  2. VMをシャットダウンし、VMware Infrastructure Clientで容量を変更するVMのプロパティでHard Diskを選択。
  3. Capacityで適当な容量を指定して、VMを起動する。
  4. VM(Windows 2003)が起動したら、あとは@ITの記事のようにコマンドを実行するだけ。
というわけで思ったより簡単に済みました。

2008年4月17日木曜日

Symantec Endpoint Protection 11.0 MR1の適用

Symantec Endpoint Protection 11.0を社内で導入しておりMR1の適用を考えて不具合の検索をしたところ・・・

 【不具合】Symantec Endpoint Protectionの手動スキャンでウィルスチェックが実行されない場合がある (Windowsな日々, 2008.03.17)

が引っ掛かりアップデートを躊躇。どうやらMR2にてこの問題は解消するらしいが、MR2 + Windows Server 2008/Vistaでは、

 You receive a "Stop 0x000000E3" error message when Symantec Endpoint Protection MR2 quarantines a file in Windows Vista or in Windows Server 2008

なので、MR2の適用も見送り決定。Symantecってアップデートのリリース時にこうゆう脇の甘さが散見されるので、すぐに飛びつかないように心がけてます、ハイ。

VMware VI 3.5 Update1の適用

社内でVMWare Infrastructure 3.5を使用しており、4/10にリリースされたアップデート1を適用しようと思いその状況を検索した結果・・・・

VMware VI 3.5 Update 1の問題からパニックが発生 (20080414-1)


の中で、

最大の問題は、ビルド番号を見ると用意されたコードがUpdate 1用のものでない点だ。サイトにある最終ビルド番号は84782だが、ダウンロードしたものはビルド84767というバージョンをインストールする(この矛盾はMD5署名のミスマッチでも確認された)。

この誤ったビルドは、プラグインが無効になる、VirtualCenter Clientがクラッシュする、ゲストOSテンプレートが消える、カスタマイズできなくなるなど、アップグレードを試みた不運な初期導入者にあらゆる技術的問題を引き起こした。

という状況であることが判明。よってこの作業は2カ月程度ペンディング。

2008年3月21日金曜日

SpringFrameworkとHibernateの連係 -HibernateDaoSupport編-

HibernateDaoSupportを利用したSpringFrameworkとHibernateの連係を調べてみました。
 参考: Implementing Spring-based DAOs without callbacks

HibernateTemplateを利用してDAOを実装する代わりに、Hibernateアクセスコードをコールバック内にラップすることをせずに、データアクセスコードを従来の方法で記述することも可能です。HibernateDaoSupportを基にしたクラスは、従来のトランザクションベースのセッションや、例外の変換メソッドを備えています。これらのコードは、トランザクション内で必ず処理させるため、getSession()メソッドのallowCreateに通常falseを渡します。

public class HibernateProductDao extends HibernateDaoSupport implements ProductDao {

public Collection loadProductsByCategory(String category) throws DataAccessException, MyException {
Session session = getSession(false);
try {
Query query = session.createQuery("from test.Product product where product.category=?");
query.setString(0, category);
List result = query.list();
if (result == null) {
throw new MyException("No search results.");
}
return result;
}
catch (HibernateException ex) {
throw convertHibernateAccessException(ex);
}
}
}

この手法の長所は、データへアクセスするコードでアプリケーション独自の例外をスローできる点です(一方HibenrateTemplateクラスでは、callback内でアプリケーション独自の例外をスローすることはできません)。但し、独自のチェックルーチンや例外をcallbackの後に実装することもできるので、依然HibernateTemplateを利用できます。
一般的には、HibernateTemplateクラスの便利なメソッドはシンプルで、たいていの場合に適しています。

「つまりたいていの場合はHibernateTemplateを使ったほうがいいよ」ということでしょうか。

2008年3月19日水曜日

Hibernateの設定


Hibernateの設定をまとめてみます。

 参考: Chapter 3. Configuration (Hibernate v.3 Documentation)

SessionFactoryの取得

すべてのマッピングファイルがパースされ後、Sessionインスタンス用のファクトリを取得しなければなりません。このファクトリはアプリケーションの全スレッドで共有されます。

SessionFactory sessions = cfg.buildSessionFactory();

Hibernateでは複数のSessionFactoryをインスタンス化でき、これは複数データベースを利用する際に便利です。

JDBCコネクション

データベースへのアクセスが必要な処理を行う際にコネクションプールからJDBCコネクションを自動取得するには、JDBCコネクションを設定する必要があります。
主なプロパティは
  • hibernate.connection.driver_class
    jdbc driver class
  • hibernate.connection.url
    jdbc URL
  • hibernate.connection.username
    database user
  • hibernate.connection.password
    database user password
  • hibernate.connection.pool_size
    maximum number of pooled connections

Hibernateのコネクションプール用アルゴリズムは必要最小限なもので、製品やパフォーマンステスト向けのものではありません。その場合HibernateのlibディレクトリにあるC3P0などを利用してください。
C3P0をコネクションプールとして利用する場合は、以下のようなhibernate.c3p0.*プロパティを設定する必要があります。
hibernate.connection.driver_class = org.postgresql.Driver
hibernate.connection.url = jdbc:postgresql://localhost/mydatabase
hibernate.connection.username = myuser
hibernate.connection.password = secret
hibernate.c3p0.min_size=5
hibernate.c3p0.max_size=20
hibernate.c3p0.timeout=1800
hibernate.c3p0.max_statements=50
hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect

必須ではない設定
  • hibernate.dialect (方言)
    特定のリレーショナルデータベース向けに最適化されたSQLを発行するために、クラス名を指定する。
    (PostgreSQL: org.hibernate.dialect.PostgreSQLDialect、MySQL: org.hibernate.dialect.MySQLDialect eg...)

  • hibernate.show_sql
    コンソールにSQLを出力するか否かを指定する。(true|false)
  • hibernate.format_sql
    コンソールやログにSQLを出力する際に成型するか否か。(true|false)
  • hibernate.max_fetch_depth
    1対1や多対1関連に対してouterジョインをする際のどこまで辿るかを指定する。推奨は0(辿らない)~3。

Hibernateのアーキテクチャ

Hibernateを一通り使ったけど詳しいことを知らないので、どんな塩梅かちょこっと調べてみました(誤訳あり)。

 参考: Architecture (Hibernate v.3 Documentation - Chapter 2)


用語の定義

SessionFactory
 単一データベース用のコンパイル済みマッピングのスレッドセーフなキャッシュで、SessionのファクトリかつConnectionProviderのクライアント。トランザクション間で再利用可能な2次キャッシュを、場合によって提供する。

Session
 アプリケーションと永続化ストア間のやり取りを表す、シングルスレッドで短命なオブジェクト。JDBCコネクションをラップしたTransanctionのファクトリ。また、データの1次キャッシュ(idでオブジェクトを検索した場合や、オブジェクトの関連を辿る場合に利用される)を提供する。

Persistent objects and collections
 永続化状態とビジネスファンクション(?)を保持する短命な単一スレッドのオブジェクトで、ほぼJava Beans/POJO。異なる点は、唯一のSessionに関連付けられているということ。Sessionがクローズされるとデタッチされ、アプリケーション層で自由に利用できる。

Transient and detached objects and collections

 Sessionと関連づいていない永続化クラスのインスタンス。アプリケーションによってインスタンス化されまだ永続化されていないか、クローズされたSessionによってインスタンス化されたもの。

Transaction

 アプリケーションで処理のアトミック性を定めるために利用する、シングルスレッドで短命なオブジェクト。Sessionは複数Transactionに跨る場合もあるが、Transactionはそれ以上分割できない。

ConnectionProvider

 JDBCコネクションのファクトリで、DataSourceまたはDriverManager由来のアプリケーション。アプリケーションで利用できないが、カスタマイズできる。

TransactionFactory
 Transactionのファクトリで、アプリケーションで利用できないがカスタマイズできる。

インスタンスの状態について

 Sessionの状態を考慮し、永続化クラスのインスタンスは3つの状態の何れかになる。
  • transient
     インスタンスがSessionと関連付けられておらず、主キーの値がセットされていない状態。

  • persistent
     Sessionと関連付けられたインスタンスで、主キーの値がセットされておりデータベースの行と一致する。特殊な永続化コンテキストでは、永続化IDとJava ID(オブジェクトのメモリー内の場所)とが一致する。

  • detached
     既にクローズされた永続化コンテキストと関連付けられていたか、他のプロセスにシリアライズされたインスタンス。永続化IDがセットされており、データベースの行と一致する場合が多い。
 

SpringIDEのインストール(Eclipse用SpringFrameworkプラグイン)

EclipseにSpringFrameworkのプラグインをインストールしてみました。

インストール方法は簡単で、「Feature Updates」で「Search for new features to install」を選択して、「Update sites to visit」の「New Remote Site」ボタンで

   http://springide.org/updatesite

を登録するだけです。その際Aspect Jのプラグイン(?)も必要になるようなので、併せてインストールしました。

以上です。

2008年3月18日火曜日

SpringFrameworkとHibernateの連係 -HibernateTemplate編-

SpringFrameworkとHibernateを連携する方法を調査してみました

参考: Chapter 12. Object Relational Mapping(ORM) data access

SessionFactoryの設定

リソースルックアップのハードコードを避けるために、SpringFrameworkではJDBCデータソースやHiberanteのSessionFactoryなどのリソースをビーンとして定義することができます。

<beans>
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="org.postgresql.Driver"/>
<property name="url" value="jdbc:postgresql://localhost:5432"/Tomcat/>
<property name="username" value="tomcat"/>
<property name="password" value="password"/>
</bean>
<bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="myDataSource"/>
<property name="mappingResources">
<list>
<value>マッピングファイル1.hbm.xml</value>
</list>
<list>
<value>マッピングファイル2.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
</value>
</property>
</bean>
</beans>

HibernateTemplate

DAOもしくはビジネスサービスのメソッドの基本的なプログラムモデルは以下のようになります。

public class ProductDaoImpl implements ProductDao {

private HibernateTemplate hibernateTemplate;

public void setSessionFactory(SessionFactory sessionFactory) {
this.hibernateTemplate = new HibernateTemplate(sessionFactory);
}

public Collection loadProductsByCategory(String category) throws DataAccessException {
return this.hibernateTemplate.find("from test.Product product where product.category=?", category);
}
}

オブジェクトの実装に関して特に制限はありませんが、SessionFactoryを渡してやる必要があります。SessionFactoryはどこからでも呼び出せますが、できればSpring IOCコンテナからsetSessionFactory()メソッドを利用して、Beanとして呼び出します。その例を以下に示します。

<beans>
<bean id="myProductDao" class="product.ProductDaoImpl">
<property name="sessionFactory" ref="mySessionFactory"/>
</bean>
</beans>

HibernateTemplateクラスは上記のような便利なメソッドのほか、HiberanteのSessionインタフェースで公開されているメソッドを備えています。HiberanteTemplateにないメソッドを利用しようとしてSessionクラスへ直接アクセスするには、以下のようなコールバックベースの低レベルの方法をとることもできます。

public class ProductDaoImpl implements ProductDao {

private HibernateTemplate hibernateTemplate;

public void setSessionFactory(SessionFactory sessionFactory) {
this.hibernateTemplate = new HibernateTemplate(sessionFactory);
}

public Collection loadProductsByCategory(final String category) throws DataAccessException {
return this.hibernateTemplate.execute(new HibernateCallback() {

public Object doInHibernate(Session session) {
Criteria criteria = session.createCriteria(Product.class);
criteria.add(Expression.eq("category", category));
criteria.setMaxResults(6);
return criteria.list();
}
};
}
}
HibernateTemplateのAPI

 参考: Classs HibernateTemplate

Hibernateのデータアクセス処理を簡素化するヘルパークラス。org.springframework.daoの例外ヒエラルキーに沿ってHibernateExceptionをDataAccessExceptionへ自動的に変換します。
execute()が主となるメソッドで、HibernateCallbackインタフェースを実装したHibernateのアクセスコードを備えています。また、セッションの制御機能も備えており、Hibernateセッションの取得やクローズや関連した例外処理をする必要はありません。

2008年3月17日月曜日

DBスキーマからのコード自動生成 (HibernateToolsプラグインの利用)

HibernateToolsを利用することでDBスキーマからドメインクラスを自動生成することができます。

hiberante.cfg.xmlファイルとConsole設定ファイルの作成


初 めにConfiguration Wizardを利用してhibernate.cfg.xmlファイルを作成します。
EclipseでTomcatプロジェクトを作成した後、WEB-INF/libディレクトリにPostgreSQLドライバをインポートしておきます。

Package Explorerでプロジェクトを右クリックし、「New」→「Other」→「Hibernate」→「Hiberante Configuration File (cfg.xml)」を選択します。

「Create Hiberante Configuration file(cfg.xml)」画面でhibernate.cfg.xmlファイルの保存先としてWEB-INF/srcを指定します。

次の画面でデータベースの接続情報を設定します。ここではPostgreSQLへ接続することにします。ここで、「Create a console configuration」にチェックを入れます。

「Create Hibernate Console Configuration」の「Classpath」タブでWEB-INF/libディレクトリにインポートしたPostgreSQLのドライバ(jarファイル)を指定し、「Finish」ボタンをクリックします。


Reverse engineerファイルの作成

ドメインクラスを自動生成するためのReverse Engineerファイルを作成します。
Package Explorerでプロジェクトを右クリック→「New」→「Other」→「Hibernate」→「Hibernate Reverse Engineering File(reveng.xml)」をクリックします。

「Create Hibernate Reverse Engineering file(reveng.xml)」でhibernate.reveng.xmlファイルの保存先としてWEb-INF/srcディレクトリ指定します。

「Configure Table fileters」の「Console configuration」でconsoleの設定ファイルを指定し、「Refresh」ボタンをクリックします。そうすると設定が間違っていなければ データベースへ接続しスキーマを取得します。

ドメインクラスを作成するテーブルやビューを選択し「Include」ボタンをクリックし、「Finish」ボタンをクリックします。


ドメインクラスの自動生成


最後にデータベースに接続し、ドメインクラスを自動生成します。


EclipseのツールバーにあるHibernateボタンをクリックしドロップ ダウンメニューから、「Open Hibernate Code Generation Dialog...」をクリックします。

「Hibernate Code Generation」を右クリックし「New」をクリックします。

「Main」 タブの「Console Configuration」に、コンソール設定ファイル及びコードを出力するディレクトリを「Output directory」で指定します。その後「Reverse engineer JDBC Connection」にチェックを入れ、自動生成するコードのパッケージ名や先ほど作成したreveng.xmlファイルを指定します。


「Exporters」タブで自動生成する内容を指定します(参考)。その後「Run」ボタンをクリックしコードを自動生成します。

コード自動生成に成功すると指定したパッケージ名でWEB-INF/srcディレクトリ以下に出力されます。

以上です。

2008年3月14日金曜日

Hibernate + Eclipse開発環境の構築

O/RマッパーとしてHibernateを利用してアプリケーションを開発する環境を構築してみます。最終的に、データベースからのクラス自動生成まで行えるようにします。また、Hibernateは3.2.6を、Eclipseは3.3.2を、データベースはPostgreSQL-8.3.0を前提条件とします。

Hibernate Tools Documentation


Eclipseプラグインについて

Hibernate ToolsのEclipseプラグインでは以下のような機能が利用できます。
  • Mapping Editor: Hibernate XMLマッピングファイル用エディタ
  • Hibernate Console: Hibernate Console設定やpersistentクラスとその関連を俯瞰することができる
  • Configuration Wizards and Code generation: Hibernate設定ファイル用のウィザード(この設定ファイルで、データベーススキーマからのクラスファイル自動生成[reverse engineer]などができる)
  • Eclipse JDT integration
導入方法

Eclipseを起動し新規プラグインのアップデートサイト指定画面でHibernateToolsのURL(http://download.jboss.org/jbosstools/updates/stable)を指定します。その後「Hibernate Tools」→「JBossTools Development Release: 2.0.0.GA」→「Hibernate Tools 3.2.0.GA」にチェックを入れインストールします(尚、Eclipse Plug-in Development Environmentが入ってないとインストールできないようです)

2008年3月12日水曜日

managerのみMemoryRealmを利用する

servletの制御をおこなうmanagerアプリケーションのみMemoryRealmを利用するようにできるか調べてみました。
これは、managerアプリケーションとDBを利用するウェブアプリケーションをTomcat上に構築した際に、managerアプリケーションのRealmをDBに入れたくないためです(JDBCRealmで利用するテーブル構造が気に入らないのです)。
Apache Tomcat 6.0のリファレンスを参考にRealmを調べてみると、
Inside a <context> element</context> - This Realm will be used ONLY for THIS web application.
とあるので、CATALINA_HOME/conf/Catalina/localhost/manager.xmlのContextタグ内にRealmタグを付ければよいことになります。というわけでmanager.xmlを以下のようにしてみました。

<Context path="/manager" debug="0" privileged="true">
<Realm className="org.apache.catalina.realm.MemoryRealm"/>
</Context>


これでmanagerアプリケーションのみMemoryRealmを利用するようになったはずです。

さて、MemoryRealmに記載したパスワードはデフォルトでプレインテキストになっているので、これをダイジェストにしてみます。
それには、Realmタグにdigestプロパティを追加すればよくその値として、jaav.security.MessageDigestクラスがサポートしている
MD2、MD5、SHA-1、SHA-256、SHA-384、SHA-512が設定できるようです(Java 6のリファレンス)。
肝心のダイジェストの作成方法ですが、環境変数CATALINA_HOMEとしてTomcatのホームディレクトリが設定されているとして、以下のようにして作成できます。

java -cp %CATALINA_HOME%\lib\catalina.jar;%CATALINA_HOME%\bin\tomcat-juli.jar \
org.apache.catalina.realm.RealmBase -a SHA-256 プレインテキスト


ここで得られた文字列をtomcat-users.xmlのパスワードにコピーし、manager.xmlを以下のように修正します。


<Context path="/manager" debug="0" privileged="true">
<Realm className="org.apache.catalina.realm.MemoryRealm" digest="SHA-256"/>
</Context>

以上です。

2008年3月11日火曜日

PostgreSQLのインストール

PostgreSQL-8.3.0をWindows XPにインストールします。

  1. PostgreSQLのHPからWindows用のバイナリファイルをダウンロードし適当なディレクトリに解凍します。

  2. 解凍したフォルダに含まれるSETUP.batを実行し、「Welcome to the PostgreSQL Installation Wizard」で「Japanese/JAPAN」を選択します。

  3. 「インストールオプション」画面で「データ・ディレクトリ」、「アプリケーションスタックビルダ」、「ユーザーインターフェース」を指定します。

  4. 「サービス構成」でアカウント「postgresql」を設定します(無ければ作成してくれます)。

  5. 「データベースクラスタの初期化」で「ロケール」にJapanese, Japanを指定し、スーパーユーザーなどのパラメータを設定します。

  6. 「貢献モジュールを可能にする」では「Adminpack」のみチェックします。

  7. 「インストールは完了しました」で「スタックビルダを使って終了する」にチェックが入っていることを確認し、「終わる」ボタンをクリックします。

  8. スタックビルダの最初の画面で「PostgreSQL Database Server 8.3選択(5432から)」を選択します。
  9. インストールしたいアプリケーションとして「Database Drivers」の「psqlJDBC 8.3.xx」を選択します。
  10. あとはウィザードに沿ってJDBCドライバをインストールします。
  11. インストールが完了したらpgAdminを起動し、インストール時に設定したスーパーユーザーでログインできることを確認します。
以上です。

Tomcatユーザ認証(MemoryRealm)

Tomcatのアプリケーションマネージャ(Servletを制御するアプリケーション)はアクセスする際にユーザ認証を利用していますが、そのユーザ認証にデータベースを利用する方法を調べてみました。

データベースでのユーザ認証を行う前に通常のファイルベースのユーザ認証を、まず試してみます。
なおTomcatのバージョンは6.0.16を前提とします。

Tomcatのドキュメントを参考に設定してみます。

  1. CATALINA_HOME/conf/Catalina/localhost/manager.xmlとして以下の内容を記載します。これによりローカルホストからのみmanagerアプリケーションにアクセスできるようになります。

    <Context path="/manager" debug="0" privileged="true">
    <Valve className="org.apache.catalina.valves.RemoteAddrValve"
    allow="127\.0\.0\.1"/>
    <Context>

  2. CATALINA_HOME¥cont¥tomcat-users.xmlの<tomcat-users>タグ内にユーザの設定を記載します。
    <user name="ログインユーザー名" password="ログインパスワード" roles="manager"/>

    もしくはEclipseの「Window」→「Preferences...」→「Tomcat」→「Tomcatアプリケーション・マネージャー」でユーザー名とパスワードを入力し「tomcat-users.xmlにユーザーを追加」ボタンをクリックすることで同じ操作が行われます。

  3. EclipseでTomcatを起動し、ブラウザでhttp://localhost:8080/manager/へアクセスします。その際tomcat-users.xmlで指定したログインユーザー名とパスワードを入力します。

  4. Tomcat Webアプリケーションマネージャ画面が表示されることを確認します。
以上でMemoryRealmを利用したユーザ認証の設定は終了です。



Tomcatを利用したEclipseでのウェブアプリケーション開発 -開発環境構築-

EclispeとTomcatでウェブアプリケーションを開発するときの開発環境の構築方法を示します。
最終的にEclipse上でTomcatを制御できるようにします。

  1. EclipseのHPよりEclipse IDe for Java Developerをダウンロードし、適当なディレクトリに解凍します。

  2. eclipsetotaleのHPよりSysdeo Tomcat Plugin(2008/3/11現在V3.2.1)をダウンロードし適当なディレクトリに解凍します。

  3. Sysdeo Tomcat Pluginを解凍して出来たディレクトリ内にあるcom.sysdeo.eclipse.tomcat_3.2.1を、ディレクトリごとEclipseをインストールしたディレクトリ/pluginsディレクトリにコピーします。

  4. Eclipseを起動し、メニューの「Window」→「Preferences...」をクリックします。

  5. 「Preferences」画面の「Tomcat」をクリックし、「Tomcatバージョン」でバージョン6.xを、「Tomcatホーム」にCATALINA_HOMEで指定したディレクトリを指定します。

  6. 引き続いて「Preferences」画面の「Tomcat」→「JVM設定」をクリックし、「JVMパラメーターへ追加」に-serverを追加します。
    これによりJava VMがサーバモードで起動しパフォーマンスも改善するようです(参考)。

  7. 「Preferences」画面を閉じツールバーに表示されているTomcat起動ボタンをクリックします。

  8. EclipseのコンソールにTomcatが起動したことを意味するメッセージが表示されていることを確認し、http://localhost:8080/にWebブラウザでアクセスします。
Tomcatパフォーマンスの向上を目指したNative Libraryの導入

Tomcatのパフォーマンスを向上させるために、APRベースのNative Libraryを導入します。

  1. TomcatのHPよりWindows用のNative Libraryバイナリ、tcnative-1.dllをダウンロードします(2008/3/11現在V1.1.12)。

  2. ダウンロードしたファイルをJAVA_HOME/binディレクトリにコピーし、EclipseでTomcatを起動します。

  3. その際コンソールに「Loaded APR based Apache Tomcat Native library 1.1.12.」と表示されることを確認します。
以上です。

WindowsへのTomcatのインストール

(ここに記載されている内容に間違いがあるかもしれませんのであしからず)
Windows XPにTomcat-6.0.16をインストールする手順は以下のとおりです。
なおTomcatのインストールに先立って以下を満たすものとします。
  • JDK-6.xがインストールされている
  • 環境変数JAVA_HOMEとしてJDKをインストールしたディレクトリが設定されている
  • java.exeにパスが通っている

尚、JDK-6.xが既にインストールされており、環境変数JAVA_HOMEが設定されていることを前提条件とします。
  1. Apache TomcatのHPよりzipファイルをダウンロードし適当なディレクトリに解凍します。

  2. 環境変数CATALINA_HOMEとして、Tomcatを解凍したディレクトリを設定します。

  3. CATALINA_HOME/bin/startup.batを起動します。

  4. Windows XPによるプログラムのブロック設定ダイアログが開くので、「ブロックを解除する」をクリックします。

  5. Webブラウザでhttp://localhsot:8080/にアクセスし、Tomcatのインストール成功を示すページが表示されることを確認します。
以上でWindows XPへのTomcatのインストールは完了です。
なおTomcatを停止するにはCATALINA_HOME/bin/shutdown.batを実行します。