プロジェクトについて: Java で CMS のような Web サイトを作成しようとしています。以前はそのような目的で PHP を使用していましたが、Java で記述された既存のサーバー側ソリューションと緊密に統合する必要があるため、Web サイトにも Java を使用することにしました。現在、開発を容易にするために、プロジェクトのいくつかの「階層」を作成しました。トップレベルの「サーバー」クラス(近い将来、コンテンツと機能で満たされる予定ですが、現在は空です)、次のサブシステム、拡張機能、およびこのいずれかの一部 - モジュールとブロック。それぞれにいくつかの制限と可能性があり、互いに利用できません...おそらく他の方法があるかもしれませんが、現在私はそれを知りません.
私の動的Webプロジェクトのvarsを常にメモリに保持できるという事実に応じて、ある種のキャッシュを作成しています。たとえば、このすべての要素を表す「ツリー」は、データベースからロードされてメモリに保持され、次のすべての要求 (たとえば、どの拡張機能がこのモジュールを子として持っているか - 権限を管理するため) はデータベースに問い合わせることなく行われます。
もちろん、この目的のために、データが変更され、データベースから更新する必要があることを要素に伝えるフラグが必要です。単一のグローバル フラグ (コンテキストなど) は良くありませんが、ほぼすべての状況で、単一の要素またはグループを更新する必要があります。単一要素のフラグは完了していますが...
実現について: 問題そのもの。クラスモジュールがあるとしましょう:
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(...) のサーブレット Main で、次のコードを実行しました:
if(request.getParameter("SetModify") && UsersManager.inGroup(currentUser,"Administrator")
Module.setChanged(true);
そして、「Module.setChanged(true)」が正常に実行されたことを確認しました...しかし、Articleクラスの「getChanged()」に関しては、falseになりました...
すべてのクラス間で静的になり、それを拡張する静的変数を作成する方法はありますか、それとも単に何かを理解していませんか? Case "Module.getChanged()" in class Articles もテスト済み - 結果は同じです...