2013年6月19日水曜日

JBoss7 管理コンソール を有効にする方法



JBoss AS 7 は起動が断然速くなりましたね、でもアプリ構成が大きく変わり、まだなじめません。 起動バッチも、run.batからstandalone.batに変わったりして。

でも相変わらずセットアップは簡単だったので、さくっと起動して、管理コンソール でも覗いて見てみようかと思ったら、エラーが。。。

ということで、今回は JBoss AS 7 の 管理コンソール (以下 management console ) 起動方法ということで。。。



このエラーにピンときたら:

デフォルトの状態だと、JBoss 起動後に Management Console の Web Page (port:9990) にアクセスしようとすると


Unable to redirect.
It is not possible to redirect to the console, please contact the system administrator for the correct address to access the console.

と出てしまいます。

対策:

この場合は、AS起動時に -bmanagement で Management ConsoleがListenするIPを与えてやる必要があります。 ちなみに、-b オプションは、前と変わらず AS本体(デフォルトだと8080ポート)をListenするIPになります
standalone.bat -b 0.0.0.0 -bmanagement=0.0.0.0
* 0.0.0.0 は、すべてのNetwork Interface (NIC) のアドレスでリスエストを受け付けるようになります

おまけ(その1):

Management Consoleにアクセスできるようなったら、管理ユーザーでのログインを求められます。 ユーザー作成がまだであれば、コマンドプロンプトから、add-user.batを実行して、管理ユーザーを作ってあげましょう。
D:\JBoss\jboss-as-7.1.1.Final\bin>set JAVA_HOME=D:\Java\jdk1.7.0_21
D:\JBoss\jboss-as-7.1.1.Final\bin>add-user.bat

What type of user do you wish to add?
 a) Management User (mgmt-users.properties)
 b) Application User (application-users.properties)
(a):

Enter the details of the new user to add.
Realm (ManagementRealm) :
Username (myNewUser) : jbossadmin
Password :
Re-enter Password :
About to add user 'jbossadmin' for realm 'ManagementRealm'
Is this correct yes/no? yes
Added user 'jbossadmin' to file 'D:\JBoss\jboss-as-7.1.1.Final\standalone\configuration\mgmt-users.properties'
Added user 'jbossadmin' to file 'D:\JBoss\jboss-as-7.1.1.Final\domain\configuration\mgmt-users.properties'
Press any key to continue . . .
注: JDKは、"D:\Java\jdk1.7.0_21" に、JBossは、"D:\JBoss\jboss-as-7.1.1.Final" にインストールされている前提です

おまけ(その2):

過去ログで紹介した起動用バッチのように、例えば 下のような Start_JBossAS7.bat などを準備するのも、手かと。。。  JDKは、"D:\Java\jdk1.7.0_21" に、JBossは、"D:\JBoss\jboss-as-7.1.1.Final" にインストールされている前提です。

===例: Start_JBossAS7.bat ======


set JAVA_HOME=D:\Java\jdk1.7.0_21
call D:\JBoss\jboss-as-7.1.1.Final\bin\standalone.bat -b 0.0.0.0 -bmanagement=0.0.0.0

==============================




さーて、APデプロイして、Web連携や、クラスタリング、などをトライしてみますかね。




2013年6月18日火曜日

ESXi で netstat 相当のコマンド (esxcli)


# esxcli network connection list

esxcli で相手先のアドレスと使用ポートと遷移状態が確認できる




2013年6月10日月曜日

ApacheとJBOSSの連携 - その2 - Apache/JBossの設定


前回、「ApacheとJBOSSの連携 - その1 mod_jk.so の入手方法」でmod_jk.soの準備ができたら、ApacheとJBossのセットアップです。

前提条件:



  • ApacheはD:\app\Apache2.2にインストール済み (Versionは2.2.22)
  • JBOSSはD:\app\jboss-5.1.0.GA-jdk6\jboss-5.1.0.GAにインストール済み (Versionは5.1.0GA-jdk6)
  • Apache, JBOSSは同じマシン上にインストールされている(Windows 2008)
  • ApacheとJBOSSはTomcat Connector (mod_jk.so)で連携
  • Apacheと連携させるWeb Application はJBossの管理アプリケーションであるweb-console, admin-console, jmx-console とする

目的:

ユーザーがWeb Application Serverに8080ポートでアクセスしている状態(いわゆる直アクセス)であるところを、Front End HTTPサーバーとしてApacheを立ててWell known Portである80番ポートでアクセスできるようにしてあげる。

図で表すと、こういう状態を
このようにします。


手順:


Apache側のセットアップ 


セットアップの概要はこんな感じ




1. conf/httpd.confを修正


ファイルの最下行に、次のInclude Statement 1行を追加

Include conf/mod_jk.conf

*Apacheに「mod_jkを使うよ、詳しくはconf/mod_jk.confを見てね」と言っている

2. conf/mod_jk.confを作成


メモ帳を開き、次の6行をコピペして、mod_jk.confファイルとして保存、confフォルダの下に置く

LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkMount /admin-console/* node1
JkMount /jmx-console/* node1
JkMount /web-console/* node1


ステップ1の[Include]の設定で、Apacheはこのファイルを見に来る。

まず、ここではApacheにロードしてもらいたいmod_jk.soモジュールの場所を伝え[LoadModule]、mod_jk.soモジュールに関するログを出力するファイルの場所を指定している[JkLogFile]。

ユーザーからのHTTPリクエストのURLに/admin-console/、/jmx-console/、/web-console/が入っている場合にnode1 (worker) にリクエストを転送するよう指示している[JkMount]。Apacheはリクエストをnode1に転送すれば良いことは理解できたがnode1は何処か? 転送先情報はまだ知らない。

node1の転送先情報は、[JkWorkersFile] で指定されたconf/workers.propertiesで定義されているので、次にconf/workers.propertiesのファイルを見に行く。

3. conf/workers.propertiesを作成


メモ帳を開き、次の5行をコピペして、workers.propertiesとして保存、confフォルダの下に置く

worker.list=node1
worker.node1.port=8009
worker.node1.host=server1
worker.node1.type=ajp13


ステップ2の[JkWorkersFile]の設定で、Apacheは転送先情報を知るためこのファイルを見に来る。

workers.propertiesファイルでは、node1という名前のWorkerはここで定義されていて[worker.list]、node1のHost名(またはIP)、ポート番号とタイプが定義されている[worker.node1.port], [worker.node1.host], [worker.node1.type]。


4. mod_jk.soをApacheサイトからDownloadしてmodulesフォルダに置く


mod_jk.soのDownload方法は前回の ApacheとJBOSSの連携 - その1 mod_jk.so の入手方法 を参照。



JBOSS側のセットアップ


JBOSS起動用バッチ(run.bat) にbオプションでJBOSSがListenするアドレスを指定(ホスト名もしくはIP)しておく。 (今回は、run.bat -b 0.0.0.0 と設定している、0.0.0.0は、server1上のすべてのNetwork Interface (NIC) のアドレスでJBossはリスエストを受け付けるようになる)

オプション付きでJBossを起動する方法として、過去紹介したように起動用バッチを準備したり、下の例のようにrun.batのショートカットを作成して、プロパティで-bオプションをつけてやる方法がある。




Apache/JBOSSを起動と動作確認


以上の設定が終わったら、Apache/JBOSSを起動する。 下記URLがちゃんと表示されたら設定完了(server1の部分は実際のサーバーホスト名に変更してください)。

http://server1/admin-console/
http://server1/jmx-console/
http://server1/web-console/


最後に:


今回はHTTP(Apache)とWeb Application Server(JBoss)が同じマシンにある場合の設定方法を紹介したが、下図のようにserver1, server2と別々のマシンに別れている場合は、workers.propertiesのnode1.hostを変えてやれば良い。









2013年6月7日金曜日

ApacheとJBOSSの連携 - その1 - mod_jk.so の入手方法

今回は、ApacheとJBOSSの連携 その1 として、手始めに(そして、ちょっと丁寧に)
mod_jk.so の入手方法をまとめてみる。

前提条件

  • ApacheはD:\app\Apache2.2にインストール済み (Versionは2.2.22)
  • JBOSSはD:\app\jboss-5.1.0.GA-jdk6\jboss-5.1.0.GAにインストール済み (Versionは5.1.0GA-jdk6)
  • Apache, JBOSSは同じマシン上にインストールされている(Windows 2008)
  • ApacheとJBOSSはTomcat Connector (mod_jk.so)で連携

mod_jk.so の入手方法


 1. Apache - nearby FTP mirror siteにアクセス
   http://www.apache.org/ のDownloadリンクからアクセス
   またはURL ( http://www.apache.org/dyn/closer.cgi) から直接アクセス

 2. 最寄りのミラーサイトのリストから、いずかのサイトにアクセス

 3. ミラーサイトにアクセスできたら下記の順でディレクトリを辿る
   tomcat --> tomcat-connectors --> jk --> binaries --> windows

 4. 最新版のtomcat-connectorsから使用する環境に対応したものをDownloadする
  しかし、通常下のように7つのバージョンがあり、どのバージョンが選ぶべきかは
  ファイル名の意味を理解する必要がある

   (a) tomcat-connectors-1.2.37-windows-i386-httpd-2.0.x.zip
   (b) tomcat-connectors-1.2.37-windows-i386-httpd-2.2.x.zip
   (c) tomcat-connectors-1.2.37-windows-i386-httpd-2.4.x.zip
   (d) tomcat-connectors-1.2.37-windows-i386-iis.zip
   (e) tomcat-connectors-1.2.37-windows-i386-iplanet.zip
   (f) tomcat-connectors-1.2.37-windows-x86_64-httpd-2.4.x.zip
   (g) tomcat-connectors-1.2.37-windows-x86_64-iis.zip

   この場合:
  • 1.2.37はtomcat-connectorsのバージョン(大抵、最新の方が良い)
  • i386は32-bit Windows OSで、x86_64は64-bit Windows OS用 (XP, 7, 2003, 2008などは不問)
  • httpdはApache、iisはIIS、iplanetはNetscapeとの連携用であることを意味している
  • httpdはさらにApacheのバージョン毎 (2.0.x, 2.2.xと2.4.x) にBinaryが提供されている

   以上を踏まえると今回は「Windows 32-bit版Apache2.2.22」を使うので

     (b) tomcat-connectors-1.2.37-windows-i386-httpd-2.2.x.zip

   をDownloadするのが正解となる。


 5. tomcat-connectorsがDownloadできたらUnzipして、mod_jk.soをゲット。
  ApacheのModulesディレクトリに置いて準備完了


次回(ApacheとJBOSSの連携 - その2 - Apache/JBossの設定)に続く。。。

2013年3月28日木曜日

org.w3c.dom.Document の XML parse で Exception あるある


Double-Byteの文字が入っているXMLファイルをParseする際に良くある失敗

Invalid byte 1 of 1-byte UTF-8 sequence.


XMLにDouble-Byteが入っているなら、対応するEncodingを指定してあげましょう
上の例であれば、読み込み対象のXMLファイルのEncodingがUTF-8になっているはずなのでこれをShift-JISに変えます。

<?xml version="1.0" encoding="UTF-8"?> 
 -->
<?xml version="1.0" encoding="Shift-JIS"?>

そもそもDouble-Byteが入っているのにEncodingがUTF-8であるXMLファイルは、それ自体XMLファイルとしてFormatが成立していない訳なんですが、自分の場合は、強引にXMLファイルを作成するケースが多いので、なんども同じ過ちを繰り返してしまう。。。

あるよね~ (え?ないですか?)

2013年3月19日火曜日

Oracle Enterprise Manager (OracleDBConsole) がアクセスできない!?

背景:

ある日、突然 EM (Oracle Enterprise Manager) のWeb Consoleが使えなくなった

Internet Explorer ではこのページは表示できません


Windows Service "OracleDBConsole" は開始になってるし、%ORACLE_HOME%\sysman\log\emdb.nohupなどを確認しても問題なく動いているし。。。
でも、 https://hostname:1158/emにアクセスしようとすると、やっぱり

Internet Explorer ではこのページは表示できません


なんで?


やったこと: 

いちおうセオリーに則って。。。

1.Windows ServiceからEM ("OracleDBConsole") の再起動 --> 復旧せず

2.EMの再生成 --> 復旧せず
  •  emca -deconfig dbcontrol db -repos drop
  •  emca -config dbcontrol db -repos create
create 途中で、「'job_queue_processes' must be greater than or equal to 1.」と怒られたので、alter system set job_queue_processes=1 scope=both; でjob_queue_processesを1にしてみる、そういえばこの前この値を変更したわぁ、きっとこれが原因に違いないと思ったが、結局 create後も現象は復旧せず

3. そもそもEM自体は問題なく動いてたわけだし、1. 2.ともに解決策になるわけもないことを確認する。「Internet Explorer ではこのページは表示できません」という現象を考察し直す。 サーバーサイドエラー(500系)ではないので、ブラウザ側の設定の問題かも知れないと思う(今更ですが。。。)

4. 試しにFireFoxでアクセスしてみる -->動いた!(ていうか、そもそも動いてたー!)

5. そういえばIEを8に上げていたんだった

6.IE設定の問題かと思うけど、FireFoxを使うからいいや、ということで、とりあえずおしまい。ここまでで 3時間を無駄にした


まとめ:

IEだとページがロードできなかったので、FireFoxを使うことにした。
IEのSSLやTLSあたりの設定が原因かと思うが、今回は特定はできず。
追って確認する、します。 

原因解明:

原因が解明、Windows更新プログラムだったかー

暫定回避策を更新しました

2013年3月11日月曜日

@setlocal EnableDelayedExpansionの使い方

@setlocal EnableDelayedExpansionの使い方について


はじめに:

EnableDelayedExpansionは遅延環境変数を使用可能にするオプションです。
この設定が欲しくなるケースは恐らくその多くの場合、「For loop内で、loopが1巡する毎に異なる値を環境変数に設定したい時」だと思います。

以下説明は、「setlocal /?」と「cmd /?」のヘルプからの引用+自分なりに解釈した、環境変数遅延環境変数の違いです(たぶん合ってる、間違っていたらすみません。。。)

  • 環境変数は区切り文字として % を使います (例:%var%)
  • 遅延環境変数は区切り文字として ! を使います (例:!var!)
  • 環境変数はforループ中に値を変更することができません。forループが完了してからループ中最後に代入された値が入ります(途中で代入された値は無視されます)。 同様にLoopに入る前にすでに環境変数に値が入っている場合はLoop中は常にその値が維持されます、そしてLoopが完了した時点でLoop中最後に代入された値が反映されます。
  • 遅延環境変数はforループ中にsetで値を代入することができます。(<-- これが、いいですねー)

と、いきなり言われても結局どう使えるの?
ということで、遅延環境変数の使用例です



使用例:

ある複数行のテキストファイルがあり、For分で一行ずつ環境変数に読み込んでEchoでその環境変数を標準出力する。

手順:

  1. C:\temp\forというフォルダを作成
  2. EnableDE.bat(*1)をC:\temp\forに作成
  3. readFile.txt(*2)というファイルを準備(内容はなんでもいいんです)
  4. CMDを開いてC:\temp\forに移動(cdする)
  5. EnableDE.batを実行
5の実行結果、下のような結果が出てくれば成功です(!count!には行番号、!readline!は各行の文字列になります)

C:\Temp\for>EnableDE.bat
Line:1 This is a sample file to be read
Line:2 by "for" statement in test.bat.
Line:3 Each line to be set as a value
Line:4 of the environment varialble,
Line:5 "!readline!" and shown
Line:6 by echo !readline!.
Line:7 This requires
Line:8 "@setlocal EnableDelayedExpansion"
Line:9 enables setting each line to
Line:10 !readline! variable
Line:11 *EVEN* that's set sometime in "for" loop
Line:12 As default, otherwise, setting
Line:13 several values in a "for" loop
Line:14 wasn't allowed.




(*1)EnableDE.bat

=========================================
@echo off
@setlocal EnableDelayedExpansion
set count=
for /f "delims=" %%s in (C:\temp\for\readFile.txt) do (
 set /a COUNT+=1
 set readline=%%s
 echo Line^:!count! !readline!
)


(*2)readFile.txt

=========================================
 This is a sample file to be read
 by "for" statement in test.bat.

 Each line to be set as a value
 of the environment varialble,
 "^!readline^!" and shown
 by echo ^!readline^!.

 This requires
 "@setlocal EnableDelayedExpansion"
 enables setting each line to
 ^!readline^! variable
 *EVEN* that's set sometime in "for" loop
 As default, otherwise, setting
 several values in a "for" loop
 wasn't allowed.

ちなみに:

一方で、環境変数を使った場合はForループ内で値は変更されないことが分かります
気になる方は、DisabledDE.batをC:\temp\forで実行してみください

(*3)DisabledDE.bat

=========================================
 @echo off
set count=
for /f "delims=" %%s in (C:\temp\for\readFile.txt) do (
 set /a COUNT+=1
 set readline=%%s
 echo Line^:%count% %readline%
)