在Google Play应用引擎中使用命名空间进行多租户

时间:2016-01-26 00:20:34

标签: java google-app-engine

我想使用多租户,为了做到这一点,我使用命名空间。我面临的问题是,每次设置命名空间时,它都会返回null。 我正在为我的应用程序上的每个URL调用此过滤器,例如在登录页面上。当我验证登录信息时,我应该让用户登录并设置命名空间。这是正确完成的,但在那之后...当我在另一个URL上返回到该方法时#34; NamespaceManaget.get()"返回null。

这是我的MultitenancyServlet的代码

public class MultiTenancyServlet implements Filter {

@Override
public void doFilter(ServletRequest req, ServletResponse resp,  FilterChain chain) throws IOException, ServletException {
    String client = req.getParameter("login");
    String nameSpace = NamespaceManager.get();

    if(nameSpace == null){
        NamespaceManager.set(client);
    }
    chain.doFilter(req, resp);
}

@Override
public void destroy() {
    // TODO Auto-generated method stub

}

@Override
public void init(FilterConfig arg0) throws ServletException {
    // TODO Auto-generated method stub

}
}

有没有人知道我为什么会遇到这个问题?

1 个答案:

答案 0 :(得分:1)

命名空间需要基于每个请求进行设置,因为您的应用程序实例应该没有状态。

Multi tenancy documentation中的示例代码确实显示了空检查,但这是为了检查在同一请求中执行的另一个过滤器是否已将命名空间设置为其他内容 - 而不是之前的请求设置了命名空间。