2009年12月12日土曜日

Mercurial でファイルの大小文字で困ったときに、

Macなどの大小の区別はするがファイルとしては1つ扱いのOSだと、
途中でファイル名の大文字を小文字にかえる場合は、削除して再作成
でないと危険のようです。

Pushでへんなメッセージが出たのに気づかずにアップロードしてしまうと、
別の人がClone使用としたりすると、「ファイル名に大文字小文字の問題がある」
というメッセージが出てうまくPullできません。

そこで、大小文字を区別するOSか、Macなどでは大小文字を区別するファイルシステム
をマウントさせてそこにCloneして修復作業をします。

問題となるファイルが見えたので、削除します。

$ ls
00PREPARE.sql 12ENQUE_PRICE_EVENT_PROC.sql
01CREATE_SCHEMA.SQL 21PRICE_CHG_TRIGGER.sql
01CREATE_SCHEMA.sql 51INSERT_QUOTATION.sql
02CREATE_QUEUE.sql 81TESTSCRIPT.sql

$ rm *.SQL


次は、hg commit して push なのですが、commit すると、

$ hg commit
変更なし

となり、削除したファイルが???です。以下のようにすればいいと分かりました。


$ hg status
! src/main/resources/sql/_CREATE_ALL_.SQL

$ hg remove src/main/resources/sql/_CREATE_ALL_.SQL
$ hg commit
$ hg push http://xxxxxx

2009年12月4日金曜日

Websphere MQ JMSからのメッセージをMQSTRにする

通常のJMSのTextMessageで送ると、MQ側ではRFHという形式になってしまい。そのままでは受け取れない。その場合は、以下の資料にあるように、「targetClient=1」を指定するとよいのだが、この指定の場所が Desitination であることが厄介だ。

参考:[S2JMS]S2JMSを使ってみる~アウトバウンド通信編~CommentsAdd Star

MQのマニュアルを見ると、以下のようにすればいいとあった。
以下の例では、キュー・マネージャーHOST1.QM1 上のキューQ1 に接続し、すべ
てのメッセージを非持続性および優先順位5 として送信します。
ioQueue = session.createQueue("queue://HOST1.QM1/Q1?persistence=1&priority=5");


つまり、キューの宛先指定に単なる文字でなく、URI形式で以下のように書けばいいということだ。
queue:///TGT_QUEUE_NAME?targetClient=1


ホスト名を省略する場合は、///となることに注意。

これは、以下のマニュアルの381ページあたりにあった。

d8864272.pdf

Websphere MQ での名称文字列 大文字/小文字

ずーーーっと、大文字のみで区別なしだと思っていたのだが、
JMSからの接続でどうにもつながらず、以下のエラーがでまくっ
たために調べてみると、区別があることが分かった。

javax.jms.InvalidDestinationException: MQJMS2008: MQ キュー cmt_spo_nrml のオープンに失敗しました


参考文献は、MQ設計虎の巻: 第8回「トラブル・シューティング」

MQのオブジェクト(キュー、キューマネージャー、チャネル等)は大文字、小文字を識別します。
プログラムなどで、キュー名、キューマネージャー名を指定する場合は、大文字、小文字に注意してください。
特に、MQSCコマンドのDEFINEでキュー名を指定する場合、明示的に小文字で作成する場合には、' '(シングルクォーテーション)で囲む必要があります。
シングルクォテーションを使用せずに、小文字で指定すると、自動的に大文字に変換されて定義されます。
MQでは、便宜上、オブジェクト名を、大文字に統一することをお勧めします。


うーーん、何事にも先達はあらまほしき、、、

2009年12月2日水曜日

MQ6.0+JMS 初期設定 on Ubuntu 9.10

1) MQユーザにスイッチ
su - mqm

2) QueueManagerを作成
crtmqm QM1

3) スタート
strmqm QM1

4) リスタースタート
runmqlsr -t tcp -m QM1 -p 1515 &

5) JMS環境
cd /opt/mqm/java/bin
source setjmsenv

6) 設定変更(当初は LDAP なので、File に変更)
vi ./JMSAdmin.config
----------
INITIAL_CONTEXT_FACTORY=com.sun.jndi.fscontext.RefFSContextFactory
PROVIDER_URL=file:/opt/mqm/tmp
----------

7) JMS用のキューを作成
runmqsc QM1 < MQJMS_PSQ.mqsc

8) データ授受用のローカルキュー
runmqsc QM1
> DEF QL(C.SND.NRML)
> DEF QL(C.SND.CTRL)
> ......
> end

9) MQ/JMS ブローカを起動
strmqbrk -m QM1

10) JMSAdmin でConnectionFactoryなどを定義
./JMSAdmin

def qcf(QCF) qmanager(QM1) hostname(localhost) port(1515) channel(SYSTEM.DEF.SVRCONN) transport(CLIENT)
def xaqcf(XAQCF) qmanager(QM1) hostname(localhost) port(1515) channel(SYSTEM.DEF.SVRCONN) transport(CLIENT)
def q(c_s_nrml)) queue(xxxxxx) qmanager(QM1)

つぎや、GlassFishのRA(ResourceAdaptor)定義へ続く