5

プロトコルとして ZeroMQ と BSON を使用して Clojure で開発された 2 つ以上の異なるサーバー アプリケーションがあるとします。共通の依存関係を共有しながら、単一の JVM インスタンスを使用してそれらをデプロイするにはどうすればよいですか?

スタンドアロン アプリケーションごとに JVM インスタンスを使用するのは、メモリの無駄遣いのようです。将来、いくつかの Clojure アプリケーションを開発する予定ですが、VPS メモリは安くはありません。

明示されていませんが、アプリケーション サーバー (Jetty、Glassfish) で実行されているアプリケーションは、状態を分離しながら同じ JVM を共有しているように見えます。ただし、コンテナーが必要であり、サーブレットも Enterprise JavaBeans も、カスタム プロトコルに簡単に適応できる実装を持っていません。

無意味な HTTP サーバーのオーバーヘッドがあるという考えは好きではありませんが、サーブレットを使用してダミーの service() メソッドを実装することを考えていました。EJB コンテナーに関しては、その実装もわかりません。

init() および destroy() メソッドのみを必要とするコンテナーがあればよいのですが、それを提供するアプリケーション サーバーが見つかりません。

回避策があるか、アプリケーションサーバーさえ必要ないのかもしれません。誰かが私を正しい方向に向けることができますか?

4

4 に答える 4

3

EJB コンテナーを使用しても問題ないように思えますが、それは、操作がより簡単または単純である場合に限られます。Immutantを見たことがありますか?これは基本的に、Clojure 用の JBossAS のラッパーであり、Red Hat の担当者 (JBossAS も所有しています) によって作成されました。

アプリケーション サーバーであることに加えて、彼らは JMS やその他の Java-EE 機能を Clojure にラップして、アプリ間でメッセージを送信するのが非常に簡単に見えるようにしています。

また、それらにはDaemonsJobsがあり、 と を使用した単純なサービスとして説明したものと同様のものを提供する場合がinit()ありdestroy()ます。

そうは言っても、私はそれを使用していないので、その素晴らしさ/ひどいことを保証することはできません.

于 2012-11-01T15:10:41.177 に答える
3

したがって、同じ依存関係を共有し、メッセージ バスでイベントに応答したり、イベントを生成したりする 2 つのアプリケーションがあるとします。

あなたの言っていることが理解できれば、クラスパス内のすべてのコードにアクセスして JVM を起動し、メイン メソッドからメッセージ バスとコードを初期化するだけで済みます。

コンテナーを使用する場合は、メッセージ バス用の JMS アダプターがあると仮定して、clojure コードとメッセージ バスの間にダミーのメッセージ駆動型 Bean を作成できます。netbeans/glassfish を使用すると、これはそれほど悪くないかもしれません。監視に関してはいくらか得られるかもしれませんが、他に何が得られるかはわかりません.

于 2012-10-31T13:41:44.710 に答える
0

DD が何かはわかりませんが、どの JAR も有効なバンドルです。clojure はタイプ セーフではないため、clojure の世界と OSGi/Java の世界を橋渡しする必要がありますが、OSGi API はそのような橋にとって夢物語です。

OSGi バンドルではコンテンツが自動的に提供されないわけではありません。OSGi では、バンドルはデフォルトでプライベートです。ただし、API を使用すると、好きな場所に穴を開けることができます。

于 2012-11-09T17:02:53.423 に答える