-2

JSON で応答される HTTP 要求を使用して、MMO を作成しようとしています。

Java EE への移植がそれほど難しくないことを願って、私はすべてを Java EE スタイルで書いていました。しかし、いくつかのsinletonの静的インスタンス変数が適切に作成されていないことがわかりました.classloaderは、サーブレットからSingletonClass.getInstance()を呼び出すときにそれらの束を作成しました.

私は完全に必死で、@Singleton の説明を追加すると役立つと思いました。しかし、物事はそう簡単ではありませんでした。@EJB ClassName var を使用してクラスを追加しているときに、クラスが機能しません。コンテキストルックアップも機能しません。

私は Eclipse で開発を試みていました。どうしたらいいのかわからず、今は本当に必死です。

必要なのは、ゲームイベントを処理し、ログに記録されたユーザーデータ (ユーザーデータ、モンスターなどを保持する非 EJB オブジェクトに分散される) を保持するために、アプリケーションがロードされている間常に機能するいくつかのクラスだけです。ログに記録されたユーザーと、JSON を使用して HTTP POST 要求に応答する機能。ORM も必要ありません。すべてのクエリを自分で作成しましたが、それでも...動作するはずのものがうまくいきません。

面倒で参考にならないように聞こえることは承知していますが、どうすればよいかわかりません。どこに問題があるのでしょうか。たぶん、web.xml に入力するか、別のポートを使用するか、月に飛ぶ必要がありますか? それともプログラミング言語を変更するだけですか?これを読むのに時間を費やして申し訳ありません。

アップデート。アプリケーションスキームの一部。パッケージ「サーバー」からの最初の 2 つ。

    @Startup
    @Singleton 
    public class DbWrapper

すべてのデータベース接続を処理します。DbConnectionPool は、java.sql.Conneciton のプールを処理する非シングルトン クラスです。

    @Startup
    @Singleton
    @DependsOn("DbWrapper")
    public class World

ログインしたユーザーの HashMap を保持する、すべてのゲーム内イベントを処理するさらに別のクラスです。ユーザーとモンスターのクラスは、パッケージ「エンティティ」からのものです (ユーザーはモンスターのリストを保持します)。

パッケージ「サーブレット」は、使用しようとする @WebServlet("/pathname") アノテーションが付けられた HttpServlet の子孫を保持します。

    @EJB World world

例えば。しかし、world.getUser(id_user) などは単純に機能しません。

JDBC に関しては、GlassFish ドメインの /lib に postgres jar が含まれています。

JSON については、 https ://github.com/douglascrockford/JSON-java にある org.json を使用します。

4

2 に答える 2

0

シングルトンはめったに使用しないでください(使用しないのが最善です)。代わりに、アプリケーション スコープの Bean を使用します (@Singleton Bean は通常どおり動作するはずですが、静的変数ではなくインスタンス変数を使用する必要があります)。

Java EE 6 では CDI も使用できるため、EJB が提供する追加機能 (自動トランザクション境界設定、セキュリティなど) が必要ない場合、またはこれらの機能を自分で追加してもかまわない場合は、EJB を使用する必要はありません。

さらに、SE アプリケーションで CDI を使用できます。ただし、CDI Bean のスコープ (@Application、@Request など) を定義する必要があることに注意してください。そうしないと、アクセスごとに Bean がコピーされるデフォルトのスコープ (@Dependant) が使用されます。

于 2012-04-23T15:04:15.050 に答える
0

いくつかのシングルトンの静的インスタンス変数が適切に作成されていないことがわかりました。クラスローダーは、SingletonClass.getInstance()サーブレットから呼び出したときにそれらの束を作成しました。

まず、これらのシングルトン クラスの 1 つのコードを示してください。この問題の原因は、実装に誤りがある可能性があります。

サーブレット フレームワークで (適切に実装された) シングルトン クラスの複数のインスタンスのように見えるものを取得できることは事実です。しかし、実際には、それらは見た目とは異なります。実際に起こっていることは、複数のクラスローダからクラスをロードしたことです。これは、それぞれがクラスをロードする複数の Web アプリケーションがあるか、Web アプリケーションを再デプロイしていて以前のデプロイが適切にクリアされていないためです。

それで、これについて何ができますか/できますか?

  • 依存性注入フレームワークを使用して Web アプリケーションを構成できるため、シングルトン クラスが不要になります。

  • シングルトンを引き続き使用できますが、複数のインスタンスを取得している理由を追跡し、その問題を修正してください。

于 2012-04-23T15:12:16.210 に答える