TCP / IPソケット上の着信要求をリッスンするJava EEでアプリケーションを作成する方法?

StackOverflow https://stackoverflow.com/questions/1486452

  •  18-09-2019
  •  | 
  •  

質問

私は、インバウンドTCP接続をリッスンし、それらを提供していますGlassFishの2.1 AppServerの、内部で実行されているビジネス・ロジックを持っている必要があります。私は、タスクのこの種のは本当にアプリケーションサーバー内に収まるされていないことを感じて - 。クライアントのために、少なくとも直接ではなく、多分私はなど、Webサービス・インターフェースを公開しなければならないが、私はできません。

クライアントは、TCP経由で私のアプリに接続して、プレーンテキストコマンドと応答を交換します。

私は、RMI呼び出しにクライアントのTCPを変換し、外部メディエータープログラムが必要ですか?またはJava EEは、ソケットに耳を傾け、それらに直接I / Oを行うためのネイティブサポートを持っているのでしょうか?

役に立ちましたか?

解決

JCA 1.5は、タスクのこの種の標準液であるが、それは、Java EEの最も簡単な一部ではない、とあなたが始めるために例のトンを見つけることができません。 あなたはGlassfishの具体的な解決策を気にしない場合は、と、ライフサイクルモジュールを見ている可能性がありJAFS を、「魚に埋め込むことができるFTPサーバは、おそらくあなたが始めるために多くのインスピレーションが含まれています。

他のヒント

また、BPELを使用して検討することもでき - OpenESBのソリューションはソケット経由で聴くためのBPELモジュールを持っている。

私は私の必要性ごとにやや似ソリューションを使用しています。これはここの周りの誰かを助けることができるかもしれません。

あなたは、起動やアプリケーションの負荷にサーバー上に新しいソケットポートを起動する必要があります。あなたにも、リスナーベースのソリューションを使用することができるのに対し、私は@scheduler注釈を使用します。

@Scheduled(fixedDelay = 1000 * 60 * 60 * 24 * 365)
public void startListenerPort() {
ServerSocket socket = new ServerSocket(9999);
// do some stuff here
}

ただ、あなたがソケット(ファイアウォールの設定)に割り当てたポート上のTCPトラフィックを許可していることを確認してください。

このように、あなたはあなたのアプリケーションサーバーは、通常のように異なるポートで実行していきますように、ポート9999上のTCPトラフィックを持つことができます。

JavaEEのは、生のソケット通信のための明示的なサポートはありませんが、原則として直接java.net.Socketを使用して、あなたを止めるものは何もありません。それが明示的にそのように設定されていない限り、セキュリティマネージャがソケットへのアクセスを制限するように構成されていますが、それは場合であってはならない場合はGlassfishのは、潜在的に、これをブロックすることがあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top