2012-01-26 3 views
0

私はGWTウェブアプリケーションで作業していて、サーバ上にいくつかのクラスを生かしておく方法があるのだろうかと思っていました。ウェブサーバ上でライブクラスを維持する方法

重要な点は、サーバー上で実行され、私のために何かを管理する静的クラスを作成したいということです。現在ログインしているユーザーを言うことができます。

public class someclass{ 

private static someclass instance; 
private List<user> users; 
private someclass(){ 
users = new ArrayList<user>(); 
} 
public someclass getInstance() 
{ 
    if (instance == null) 
     instance = new someclass(); 
    return instance; 
} 
public addUser(user u) 
{ 
users.add(user); 
} 
} 

同期には問題がないことが必要であると仮定します。

最初のユーザーがログインし、ユーザーリストに追加されたとすることができます。 2番目のユーザーがログインすると、ユーザーリストは空になりますか?それとも古いユーザーでもありますか?

ありがとう...

答えて

2

これを行う方法はさまざまです。しかし、このシナリオに取り組む簡単な方法は、起動サーブレットを使用することです。 web.xmlで以下のように定義します。

<servlet> 
<servlet-name>TestServlet</servlet-name> 
<servlet-class>TestServlet</servlet-class> 
<load-on-startup>1</load-on-startup> 
</servlet> 

そのサーブレットの静的フィールドでstatを更新します。

+0

申し訳ありませんが、知識が不足していますが、もう少し具体的なものを教えてください。 私はこのためにサーブレットクラスを作成する必要があると仮定します。 私はこのクラスの関数をどのように呼びますか? サーバーからのHTTPリクエストを使用してサーブレットと通信する必要がありますか。これはちょっと面倒なようです – Gleeb

+0

いいえ、httpコールを使う必要はありません。他のクラスと同様に扱い、操作したい情報を提供するパブリックAPIを持つことができます。サーバー側では、すべてのコンポーネントがサーバーと同じJVM上にあります。 –

1

リングベアラの答えは最も互換性があります(非常に古いサーブレットコンテナでも機能します)が、現在のアプローチはアプリケーション用のコンテキストリスナーを登録することです。例として、私は可能なクォーツのタスクスケジューラを持つために私のweb.xmlにこれを使用する:

<listener> 
    <listener-class>org.quartz.ee.servlet.QuartzInitializerListener</listener-class> 
</listener> 

あなたのコンテキストリスナーはjavax.servlet.ServletContextListener interface.Theサーブレットコンテナがアプリケーションの起動を通知するvoid contextInitialized(javax.servlet.ServletContextEvent sce)を呼び出します実装する必要があります。シャットダウン時に、サーブレットコンテナはvoid contextDestroyed(javax.servlet.ServletContextEvent sce)を呼び出します。

サーブレットのアプローチは類似していますが、ロジックはサーブレットのライフサイクル操作に含まれます。

関連する問題