我正在尝试创建一个web服务器,它提供web服务功能,使用GCM与android设备通信,使用数据库,可能还有一些后台工作要做。
我目前还不确定这样一个服务器的架构。我知道如何创建一个简单的web服务,但除了简单的"Hello World“示例之外,还没有找到其他教程或描述。据我所知,我可以用@WebService注解创建一个类,一旦部署到Tomcat,服务器将创建至少一个该类的实例,并将该类中的带注解的函数作为web服务提供。
现在我想知道如何最好地实现数据库连接。据我所知,服务器会为每个请求创建一个该类的实例,一旦连接关闭,这个实例就会被垃圾回收。由于web服务器提供的几乎所有功能都需要数据库,因此我认为为每个实例创建数据库连接并不是一个好主意,而是使用全局连接来查询数据库。到目前为止,我发现这可以通过将一个处理数据库连接的类作为@Resource或@Singleton注入到web服务类中来实现。但这是做这件事的正确方式吗?或者我太担心了,只需为每个请求创建一个新的数据库连接就可以了?
然后我想发送GCM消息(使用HTML google服务器的简单POST消息),所以我可能会创建一个控制器或管理器类来处理这些请求。这是否也会作为@Resource或@Singleton注入到web服务类中?
最后但并非最不重要的是,服务器可能需要周期性地做一些工作,这将是某种类型的后台线程,它独立于web服务正在接收的请求。在这里,我对如何做到这一点感到无所适从。据我所知,web服务没有main()方法,所以我不确定如何创建它。
有没有人可以给我一个简单的概述,告诉我如何设计这样的web服务器,或者可以给我介绍一下如何实现这一点的文档?到目前为止,我发现的都是简单的例子,没有涵盖像这样的高级内容。
发布于 2014-10-08 15:59:05
好的,你有3个问题/问题。
所有这些,都在同一个应用程序中。首先,我建议你分成两个应用程序,一个用于消费(Web服务),另一个用于批处理,包括推送通知(IMHO)。但让我们一步一步来。
Webservice:这取决于您选择的框架。我通常在Spring-MVC和Jersey之间做出选择
2.如何管理数据库连接当你查询数据库时,你通常不想疯狂地打开和关闭连接。您希望使用连接池。在连接池中,您将请求一个打开的连接,使用它,并在完成后释放它。通常,连接池是由应用程序服务器管理的。如果你想手动管理连接,你必须使用单例来集中获取和释放。
3.执行batch process您可能应该使用单例来管理batch process。此作业管理器将在其他线程上启动作业执行
不知道这是否回答了您的问题/顾虑。请让我知道。
发布于 2014-11-05 10:54:34
阿龙
我发现自己在一个类似的中。在浏览了两天多的网站后,我偶然发现了运行后台线程的解决方案,该线程在servlet初始化期间触发(init方法)。
也许你可以试一试,让我知道它是否对你有效。
以下是链接,其中包含一个可供尝试的示例- http://docstore.mik.ua/orelly/java-ent/servlet/ch03_05.htm
干杯!
https://stackoverflow.com/questions/26256183
复制