プロジェクトについて: 私はJavaのようなWebサイトをCMSに書き込もうとしています。以前はPHPをこのような目的で使用していましたが、現在はJava上で書かれた既存のサーバー側ソリューションとの緊密な統合が必要です。したがって、WebサイトでもJavaを使用することに決めました。現在、私は簡単な開発のために、プロジェクトの「階層」を作りました。トップレベルの「サーバー」クラス(近い将来、内容と機能で満たされますが、今は空です)、次のサブシステム、拡張機能、モジュールやブロックのいずれかの一部。それぞれにはいくつかの制限と可能性があり、互いに利用することはできません...多分他の方法がありますが、現在私はそれを知らないのです。拡張クラスへの静的メンバーの委任 - Java
私は、ダイナミックWebプロジェクトのバールを常にメモリに保持できるという事実に応じて、何らかのキャッシングを行っています。たとえば、データベースからロードされてメモリに保持されているすべての要素を表す「ツリー」、およびデータベースを要求せずに行われたすべての次の要求(たとえば、Extensionがこのモジュールを子として持つ - 権限の管理)。
もちろん、この目的のために、私は要素を伝えるいくつかのフラグを持つ必要があります。そのフラグのデータは変更され、データベースから更新する必要があります。単一のグローバルフラグ(たとえばコンテキスト)は悪いですが、ほぼすべての状況で、単一の要素またはグループをリフレッシュする必要があります。単一要素のフラグは実行されますが、...
実現について: 問題自体です。
public abstract class Module{
private final static boolean Changed;
public static boolean getChanged(){
return Changed;}
public static void setChanged(boolean newState){
Changed = newState;}
public abstract String getName();
public abstract String getTitle(HttpServletRequest request,
HttpServletResponse response, ServletContext context);}
そして、私はいくつかのモジュールを持っている:私はクラスモジュールを考えてみましょう
ここpublic final class Articles extends Module{
public class Article{...}
private Tree<Article> ArticleList;
public final ArrayList<Article> getArticlesInGroup(int groupID){
if(getChanged())
refreshFromDatabase();
...
}
}
、例えば、このフラグは、記事が動作変更される可能性があり、いくつかのグローバル設定を変更する場合のように使用します - たとえば、クエリブラウザや他のいくつかのクラスを介して実行されたデータベースに関するいくつかの操作は、アーティクルとグループのツリーを「キャッシング」します(タイトル、ID、ParentGroupまたはそれ以外のもの全体を保持しません)...
問題自体:doGetメソッド内のサーブレットメインで(...)私は、次のコードが実行されています
if(request.getParameter("SetModify") && UsersManager.inGroup(currentUser,"Administrator")
Module.setChanged(true);
をそして、私は、 "(真)Module.setChangedは" 正常に実行がチェック...しかし、それはgetChanged」になると() "のクラス記事では、私は間違いました...
静的変数を作成する方法はありますか?それはすべてのクラス間で静的であるか、それを拡張していますか、ケース「Module.getChanged()」として十分にテストクラスの記事に - 結果は同じです...
この「最終的な」私のSVNは現在利用できないため、ローカルの非同期コピーの貼り付けられたコードです。仕事でこれを修正しましたが、問題はまだ残っています。 –
ねえ...あなたが正しいです。今すぐ再テストして、すべて正常に動作します...仕事中にテスト中に他のバグが見つかったに違いありません。今推奨システムを調べるようになります。 –