都道府県穴埋めゲーム

RMIサーバ(RMIレジストリ起動)、クライアントが異セグメント上にある場合の
通信実現方法についての質問です。

実行環境において、使用ポートに制限がかけられており、
Socketによる直接通信では、エラーが発生してしまいます。
※ポートを全解放すると通信可能。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
java.rmi.ConnectIOException: Exception creating connection to: <RMIサーバIP>
; nested exception is:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
そこで、Socketによる直接通信から、HTTPプロトコルに組み入れ、RMIサーバのポートへ直接接続
する方法を試みたところ(sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket()
をオーバライドするサブクラスを作成)、今度は以下のエラーが発生してしまいました。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
java.rmi.UnmarshalException: Error unmarshaling return header; nested exception is:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
サーバ上のアクセスログ、エラーログは以下の通りです。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
※アクセスログ
<クライアントIP> - - [16/Dec/2007:20:25:30 +0900] "POST /cgi-bin/java-rmi.cgi?forward=3005 HTTP/1.1" 404 226

※エラーログ
[Sun Dec 16 20:25:30 2007] [error] [client クライアントIP]
(2)No such file or directory: script not found or unable to stat: c:/interstage/f3fmihs/cgi-bin/java-rmi.cgi
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
以上のログから、"java-rmi.cgi"スクリプトをサーバのc:/interstage/f3fmihs/cgi-binに展開すれば、通信できるのでは
ないかと考えています。
SDKが提供しているものだとは思いますが、取得方法がわかりません。
取得方法について、ご教示お願い致します。

※環境は以下の通りです。
サーバOS:Windows Server 2003(R2)
Webサーバ:Interstage Application Server SE SL

クライアント:WindowsXP

A 回答 (1件)

こんにちは。


ネット上で情報を漁った限りでは、Solaris用はあるけどWin版はない、などの情報があったりしますし、そもそも古い情報が多くて現状が分かりませんね。対応案ですが、

1.商用製品(Interstage)を使用しているのだから、ベンダー(富士通)に問い合わせる。
 特に、「SDK提供」だと仮定した場合、Interstageに同梱されているのは富士通SDKのはずだったと思うので、なおさらそうすべきです。

2.CGIではなくServletで実装する
ここ
http://java.sun.com/j2se/1.4.2/docs/guide/rmi/fa …
にこのような記述がありました:

『Is it possible to replace the java-rmi.cgi script that comes with the JDK distribution with a servlet?

We've provided an example that demonstrates how to implement the java-rmi.cgi script using a servlet. The example also explains how to run a remote object inside a servlet VM. 』

リンクされたZIPファイル内にはサンプルコード一式が含まれていました。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!