使用数据库,GCM和后台线程实现Java Web Server

时间:2014-10-08 11:47:43

标签: java multithreading web-services

我正在尝试创建一个提供Web服务功能的Web服务器,使用GCM与Android设备通信,使用数据库,可能还有一些后台工作要做。

我目前不确定这种服务器的架构。 我知道如何创建一个简单的Web服务,但没有找到超出简单的“Hello World”示例的教程或描述。据我所知,我可以使用@WebService注释创建一个类,并且一旦部署到e.G. Tomcat服务器将至少创建一个此类的实例,并在此类中提供作为Web服务的无限功能。

现在我想知道如何最好地实现数据库连接。据我所知,服务器将为每个请求创建此类的实例,一旦连接关闭,将被垃圾收集。由于Web服务器几乎每个函数都需要数据库,我认为为每个实例创建数据库连接并不是一个好主意,而是使用全局连接来查询数据库。 从我发现到目前为止,这可以通过将一个处理数据库连接的类注入@Resource或@Singleton到Web服务类中来实现。 但这是正确的方法吗?或者我担心太多,只为每个请求创建一个新的数据库连接是好的吗?

然后我想发送GCM消息(使用HTML google服务器的简单POST消息),所以我可能会创建一个控制器或管理器类来处理这些请求。这也会作为@Resource或@Singleton注入Web服务类吗?

最后但并非最不重要的是,服务器可能必须定期进行一些工作,这将是某种后台线程,这与Web服务收到的请求无关。在这里,我对如何做到这一点感到茫然。 Web服务没有我知道的main()方法,所以我不确定如何创建它。

任何人都可以给我一个关于如何设计这样一个Web服务器的guick概述,或者可以指向我描述如何实现这一目标的文档? 到目前为止我发现的只是简单的例子,不包括这样的高级内容。

2 个答案:

答案 0 :(得分:0)

好的,所以你有3个问题/问题。

  1. 如何创建Web服务
  2. 如何管理数据库连接
  3. 执行批处理
  4. 所有这些,在同一个应用程序中。首先,我建议你分成两个应用程序,一个用于消费(Web服务),另一个用于批处理,包括推送通知(恕我直言)。但是,让我们一步一步。

    <强> 1。 Web服务:它取决于您选择的框架。我通常在Spring-MVC或Jersey

    之间做出选择

    <强> 2。如何管理数据库连接当您查询数据库时,您通常不想疯狂地打开和关闭连接。您想使用连接池。在连接池中,您将要求打开连接,将使用它,并在完成后释放它。通常,应用程序服务器管理连接池。如果要手动管理连接,则必须使用单例来集中获取和释放。

    第3。执行批处理您可能应该使用单例来管理批处理。此作业管理器将在其他线程上启动作业执行

    不知道这是否能解答您的疑问/问题..请告诉我。

答案 1 :(得分:0)

柳,

我发现自己处于类似的 scenario 。经过网络超过2天后,我偶然发现了运行后台线程的解决方案,该解决方案在初始化servlet(init方法)时触发。

也许你可以试一试,让我知道它是否适合你。

这是一个可以尝试的示例链接 - http://docstore.mik.ua/orelly/java-ent/servlet/ch03_05.htm

干杯!