我目前正在开发一个部署到GlassFish上的企业应用程序。我正在尝试从部署到EJB3.1的GlassFish中找出与cassandra后端通信的正确方式。我更喜欢用Pelops和Cassandra说话。
免责声明:我刚接触Java以及企业应用服务器和EJB背后的概念;本项目的目的之一就是学习这些主题。这超出了这个问题的范围,因为我真的只是在寻找最佳实践的正确方向,或者我应该到哪里去寻找最佳实践;到目前为止,google在这个主题上并不是很有帮助/始终如一。
更具体地说,我是否应该考虑为cassandra编写一个JCA连接器?使用通过Pelops与cassandra对话的单例EJB?在我的EJB中直接使用pelops?(虽然我认为你不应该在ejb中创建套接字连接)完全是另一回事?
发布于 2011-10-18 18:09:34
EJB规范禁止EJB打开服务器套接字,但不禁止打开套接字。但是,它也禁止EJB创建线程。Pelops (或Hector)是否创建线程来处理它的池化?
抛开法律文字不谈,因为这两个库都是池化的,对我来说,它们肯定是属于资源适配器层的东西。我会担心EJB,它的生命周期由容器控制,并且可能相当短,它依赖于像连接池这样的资源,它的生命周期在某种程度上是独立的,应该更长。
也就是说,大多数EJB的实现都是相当宽松的,所以无论直接从EJB使用Pelops/Hector在架构上是正确的还是错误的,它都很可能会工作。
如果我有足够的时间,我会编写一个资源适配器来包装这些库中的一个。然而,为了追求微不足道的实际回报,这将是一项相当大的资源投资。
发布于 2011-10-18 16:27:33
我们正在开发一个类似的应用程序,我现在工作的地方,即使我们没有实现EJB,我们部署了一个后端到Glassfish 3.1,在内部我们已经创建了一个可以与Cassandra对话的小型库。
目前,连接和使用Cassandra最常用的库是Hector:
https://github.com/rantav/hector
它是非常积极发展的。我从未见过在EJB中使用它,但我用过它,它非常可靠。但是,不要使用Pelops的开发方式。
我们在这里开发的是一个非常定制的应用程序,这就是为什么我们一开始就没有使用Hector的原因。
只要在EJB中使用客户端套接字,就应该是安全的,对EJB的限制是针对应该由应用服务器处理的服务器套接字。但是如果你有其他需求,你应该编写你的JCA。
https://stackoverflow.com/questions/7420332
复制相似问题