使用生成的端点和gae实现多租户

时间:2014-05-04 10:38:13

标签: java android google-app-engine google-cloud-datastore multi-tenant

我正在尝试使用应用程序引擎开发带有后端的Android应用程序。我已经生成了端点,现在我需要在我的应用程序中进行多租户。Here documentation about multitenancy

但是我已经生成了端点,而不是如上所示的servlet。如何实现端点的多租户?

2 个答案:

答案 0 :(得分:1)

App Engine支持几种支持命名空间的API,即数据存储,内存缓存,任务队列和搜索。关于如何计划在应用程序中使用命名空间,您的问题并不清楚。

我假设您要保存和/或检索特定命名空间中的数据,以便根据命名空间要求很好地隔离数据。我不认为您需要遵循示例中给出的Filter示例。

如果需要,可以使用启动servlet(在应用程序启动时加载的servlet)来设置特定的命名空间。随后,您需要确定命名空间值的限定条件。对于例如如果您的Cloud Endpoints通过User参数实现安全性,那么User Id可能是名称空间ID。或者,您可以从数据存储中检索其他相关/关联数据,以确定适合命名空间ID的其他值。

仅供参考 - 在幕后,Cloud Endpoints架构也是Servlets。

答案 1 :(得分:0)

我有一个基于GAE和jsp的网络应用程序。我使用Google的UserServiceFactory为每个用户设置了命名空间。

    import com.google.appengine.api.users.UserServiceFactory;
    import com.google.appengine.api.NamespaceManager;
...

        if (NamespaceManager.get() == null) {
              // Assuming there is a logged in user.
              String namespace UserServiceFactory.getUserService().getCurrentUser().getUserId();
              NamespaceManager.set(namespace);
            }
...

现在,我尝试更改为Google Cloud Endpoints,然后使用Endpoint API(Using Auth with Endpoints)的用户。代码看起来像这样,并且在我的测试环境中工作。

    import com.google.appengine.api.users.User;
    import com.google.appengine.api.NamespaceManager;
...

    @ApiMethod(name = "scores.insert")
    public Score insert(Score score, User user) throws OAuthRequestException, IOException {
      ...

            if (NamespaceManager.get() == null) {
                  // Assuming there is a logged in user.
                  String namespace = user.getUserId();
                  NamespaceManager.set(namespace);
                }
...

    }