如何在JavaEE

时间:2016-02-09 16:19:23

标签: java-ee connection-pooling application-server

我正在使用JavaEE框架构建一个Web应用程序。我正在寻找如何通过配置文件(如属性文件或xml文件等)动态地将连接池加载到数据库。

我正在寻找这种方式,因为我的网络应用程序需要池连接,但我事先并不知道哪个应用程序的服务器将用于启动我的Web应用程序。这就是为什么我需要找到一种标准方法来为所有类型的JavaEE服务器加载连接池。

我不知道它是否可能......但如果你能帮助我,那对我的项目来说会非常好。

提前谢谢。

2 个答案:

答案 0 :(得分:1)

标准方式是上面描述的@BalusC。连接池的配置是一个'操作'关注,而不是应用程序的关注。这是因为像JDBC连接这样的资源虽然可能只与一个应用程序相关,但可能会从内存和稳定性角度影响整个应用程序服务器。拥有应用程序服务器提供的已知良好实现更有效,然后将责任放在每个应用程序上以使其正确。它还迫使负责服务器的人员认识到这些资源。应用程序应该只执行查找。话虽如此,确切的步骤依赖于应用服务器,所以如果您需要具体信息,请告诉我们您正在使用的应用服务器。

如果您使用的是JavaEE(5+)API,执行此查找的标准方法是使用@PersistenceContext,它将注入一个实体管理器,该实体管理器在与您的应用程序捆绑在一起的persistence.xml文件中配置。通过JNDI公开的连接池与命名的持久化上下文之间的映射在此文件中执行。可以在https://docs.oracle.com/javaee/7/tutorial/persistence-intro003.htm

找到一些文档

通常我们所做的是有一个脚本,它使用应用服务器的管理API(RESTful或cmd行)来配置这个和其他属性(如max memory等)。开发人员可以运行此脚本。另一种选择是将配置的应用程序服务器分发为docker容器。每个开发者。然后将简单地旋转此容器并将应用程序部署到它。这种方法有几个优点,即它可以以一致的方式模仿整个生产环境。

答案 1 :(得分:0)

所有JavaEE服务器实现(甚至是Tomcat)都提供了一种配置一个或多个数据库连接池的方法,只是为了让您不必在应用程序级别担心它。

您可以通过注入javax.sql.DataSource

来访问数据库连接
 @Resource
 private DataSource ds;

 void someMethod() {
     try(Connection conn = ds.getConnection()) {
         Statement st = conn.createStatement();
         // etc
     } 
 }

或执行JNDI查找:

 void someMethod() {
     try(Context context = new InitialContext();
         DataSource ds = (DataSource)context.lookup("some/name/configured/in/the/server");
         Connection conn = ds.getConnection()) {

         Statement st = conn.createStatement();
         // etc
     } 
 }

现代JavaEE实现为" some / name / configured / in / the / server"提供了一种使用标准名称的方法。同样。如果您使用的是较旧的平台,则需要使用平台相关的部署描述符将配置的数据源名称映射到应用程序中使用的硬连线名称 - 但这是另一个主题。