サーブレットを作成するときのAppEngineサービスの適切なスコープは何ですか:静的、インスタンス、またはローカルですか?そして、それぞれの意味は何ですか?再作成(または再取得)のオーバーヘッドを回避するために、可能な限り広い範囲でそれらを使用する必要があるようですが、これがデータの不適切な再利用を引き起こすかどうか、特に<threadsafe>true</threadsafe>
。
各スコープの例を以下に示します。 MemcacheService
以下の例で使用されますが、私の質問はすべてのサービスに当てはまります(ただし、使用されているサービスによって答えが異なるかどうかはわかりません)。私はよく、、、、、、を使用MemcacheService
します。DatastoreService
PersistenceManager
ChannelService
UserService
静的スコープ:
public class MyServlet extends HttpServlet {
private static MemcacheService memcacheService = MemcacheServiceFactory.getMemcacheService();
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) {
memcacheService.get("x");
}
}
インスタンスメンバー:
public class MyServlet extends HttpServlet {
private MemcacheService memcacheService = MemcacheServiceFactory.getMemcacheService();
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) {
memcacheService.get("x");
}
}
ローカルスコープ:
public class MyServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) {
MemcacheService memcacheService = MemcacheServiceFactory.getMemcacheService();
memcacheService.get("x");
}
}