在后续请求中重用对象到动态Google App Engine后端

时间:2012-01-07 11:33:56

标签: java google-app-engine servlets

在我的GAE应用程序上,我有一个执行XSLT转换的servlet。我曾经把它当作前卫,但有时需要花费太多时间才能完成。所以我现在在后端运行它。

这就是我所做的: 1 /创建一个文件' backends.xml'定义一个名为' xslt'的动态公共后端。 2 / prepend' xslt'调用servlet时到域:

http://xslt.[appname].appspot.com/getCoordinates?[params]

这有效!

该应用的典型行为是对此“getCoordinates”的一系列调用。 servlet将被制作。每个请求都会触发' doGet'这个' getCoordinates'的方法servlet,用于初始化Saxon处理器,xsltCompiler,xsltExecutable和xsltTransformer,但所有这些对象都可以在后续请求中重用!

我的问题: 我应该如何编程将此初始化代码分离为后端初始化请求的处理程序,以便&#39; _ah / start&#39;? < / p>

如果我只是创建另一个servlet&#39; startXslt&#39;它回答了对&#39; _ah / start&#39;的请求。并初始化此servlet中的所有通用对象&#39; doGet&#39;方法,我将如何使用“getCoordinates”中的对象。 servlet&#39; doGet&#39;方法

(我对java servlet编程不太熟悉,所以我认为这可能更像是关于java servlet编程的一般性问题,而不是GAE特定的,或者是它?)

2 个答案:

答案 0 :(得分:0)

是的,这是一般性问题,实际上有数百种方法可以做到这一点。顺便说一句,大多数项目都是基于某种框架,而且取决于它。如果您从简单的原始servlet开始 - 我强烈建议您查看其他选项。对于GAE,有Gaelyk。或者Spring MVC作为最普遍的(是吗?)一般使用框架。

顺便说一句,如果您现在需要解决方案,我可以推荐以下其中一项:

  • init in init()方法(将在app启动时调用)
  • 将其存储在class static field,并在static {}块中初始化(在类初始化时调用,在实例之间共享)
  • 为这个变形金刚制作一个singleton(你可以在第一次通话时初始化它)

答案 1 :(得分:0)

使用后端是一个好主意,因为您可以控制在寻址后端时只使用单个实例并重新使用。

这样,所有servlet都将在同一个JVM实例中执行,因此你可以通过使用一个Singleton模式来获得一个共享对象,如另一个答案中的splix所示。

据我了解,您的问题涉及如何挂钩后端初始化以初始化您自己的对象。如果是这种情况,您可以实施ServletContextListener并将代码放在contextInitialized(ServletContextEvent)方法上。

每次创建新实例时都会调用此方法,无论是在前端还是在后端。