いやぁ、ハマったね。久しぶりにハマったねw
まず、以下の環境にて開発をしていますた。
- Windows7 64bit
- Eclipse (Pleiades JAVA)
- CentOS on VMware
- PostgreSQL on CentOS
開発したいのは、Exlipse 上のTomcatでAxis2を用いてWebServiceを展開し、バックエンドのDBはVMware上、ClientはWindows上のC# で作成したSmartClientから利用する形。C#の開発環境はExpress Edition 2010です。で、wsdlはAxis2が作成してくれるので、それを利用して、簡単にメソッド呼び出ししましょうと考えたわけです。
さて、ここで問題は、PostgreSQLはVMware上のCentOSで動いているということ。さらに、VMwareのネットワークはBridgeです。ということは、すでに別サーバで動いているということですね。
まず、第一のハマり。
Visual C# Express Edition 2010では、「サービスの参照」というのがあります。これが、今まではWebサービスと同義だと思っていたのですが、どうも違うらしく、別途「Webサービスの参照」というのがあります。これにしないと、Tomcat側がwsdlのリクエストで
http://localhost:8080/MySVS/services/test?wsdl/$metadata not found
みたいなエラーはいて、C#上で正しくCallできるメソッドを作成してくれません。
これが、第一のハマり。
次に第二のハマり。
JDNIを正しく設定して、やっとことさPostgreSQLにアクセスできると思ったら、
Cannot create PoolableConnectionFactory
って言われて、アクセスできません。pg_hda.confやpostgresql.confなどをいじってみましたが、まったく効かず。さらに、同じWindows上のPgAdminからはアクセスできるし、Eclipse上のERMasterからもJDBCでアクセスできる…。
まったくもって理解不能と途方に暮れていた朝方6時ごろ(すでに3時間くらい悩んでましたw)、やっと解決。
原因は、Windowsのファイヤーウォール。Eclipseが外部からのアクセスをもらうことができなくなっていた。それを無効にしてやると…見事解決。なんだかねぇ…。
ただ、なんで同じEclipse上のERMasterがアクセスできていたかはちょっとわからん。とりあえず、アクセスできてよかったので、まずは、これで終わりw
ではでは。