2012-05-02 47 views
2

关于项目: 我想在Java上编写类似CMS的网站。以前我使用PHP来达到这个目的,但现在我需要与现有的服务器端解决方案(用Java编写)紧密集成,因此也决定将Java用于网站。目前,为了更容易开发,我做了一些我的项目的“层次结构”:顶层“服务器”类(在最近的将来它将充满内容和功能,但现在它是空的),下一个子系统,扩展和任何这一部分 - 模块和块。他们每个人都有一些限制和可能性,彼此不可用...也许有其他方式,但目前我不知道它。委托静态成员扩展类 - Java

我正在做一些类型的缓存,依赖于这样的事实,即矿山动态Web项目的增值经销商可以在内存中保存的所有的时间。例如,表示所有这些元素的“树”,从数据库加载并保存在内存中,以及所有下一个请求(例如,哪些扩展将此模块作为子级 - 用于管理权限),而不询问数据库。

当然,对于这个目的,我需要有一些标志,这将告诉元素,其数据被改变,他们需要从数据库刷新。单个全局标志(例如在上下文中)是不好的,而在几乎所有情况下,我都需要刷新单个元素或组。单个元素的标志已完成,但...

关于实现: 问题本身。可以说我有类模块:

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(); 
     ... 
    } 
} 

这里,例如,使用此标志为改变一些全局偏好的情况下,这可能会改变文章的工作 - 例如,对数据库的一些操作,通过查询浏览器或其他一些操作执行 - 类“缓存”文章和组的树(它不保存整篇文章 - 只有Title,ID,ParentGroup或其他一些内容...

本身的问题:在servlet的主要在的doGet(...)我有一个代码执行:

if(request.getParameter("SetModify") && UsersManager.inGroup(currentUser,"Administrator") 
    Module.setChanged(true); 

而且,我查了一下, “Module.setChanged(真)” 成功执行......但是,当涉及到“getChanged ()”类的文章,我得到了假的... ...

是否存在任何方法来创建静态变量,这将是所有类中的静态,扩展它,或者我只是不明白的东西吗?案“Module.getChanged()”类文章进行测试,以及 - 结果是一样的...

回答

1

我很惊讶,你的代码编译,因为你使用了“最终”的关键字:

private final static boolean Changed; 

一般而言,您不应该能够修改声明为final的成员。所以制定者不应该被允许:

public static void setChanged(boolean newState){ 
    Changed = newState;} 

普罗蒂普:你可能想看看喜欢的Ehcache和春天有个更加羽翼丰满系统解耦从实际代码数据库访问的所有这种“优化”。

+0

对不起,这个“最终” - 我的SVN目前不可用,所以从本地,非同步副本粘贴代码。修正了这个问题,但是......当然,问题依然存在。 –

+0

该死的......你说得对。现在重新测试它,并且所有工作都正常......必须在工作中测试时捕获其他一些错误。现在来看看建议的系统。 –

1

刚刚从

private final static boolean Changed; 

删除 “最终”,代码应该正常工作。