GlassFish 4.1 中的连接池

Connection Pooling in GlassFish 4.1

在旧的 Web 应用程序中,我使用了 tomcat 服务器。为了配置 Web 应用程序的连接池,我修改了应用程序的 context.xml 文件。我没有对服务器文件做任何事情。这样我就可以在同一台服务器上为不同的应用程序设置不同的池。我现在正在开发一个新的 Web 应用程序,但这次使用的是 glassfish 4.1 服务器。根据我执行的 Internet 搜索,我似乎必须自己修改服务器文件才能为连接池设置服务器。有没有办法只在 Web 应用程序中修改文件并让服务器读取该文件,就像 context.xml 文件对 tomcat 的工作方式一样?谢谢。

您不必修改任何服务器文件。您可以从管理控制台创建连接池,您可以访问 http://localhost:4848

然后导航到资源 > JDBC> JDBC 连接池以创建新的连接池。

您也可以使用 Ping 按钮测试连接。

要在应用程序中使用连接,您需要执行如下 JNDI 查找

InitialContext ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("datasource jndi name");
Connection connection = ds.getConnection();

更新 您正在寻找的是应用程序范围的资源。对于特定于您的应用程序的资源,您需要创建 WEB-INF/glassfish-resources.xml 文件,该文件将在 war 部署时创建资源,并在取消部署时删除它们。

glassfish-resources.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE resources PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Resource   Definitions//EN" "http://glassfish.org/dtds/glassfish-resources_1_5.dtd">
<resources>
  <jdbc-connection-pool name="java:app/appConnectionPool" res-type="javax.sql.ConnectionPoolDataSource"
   datasource-classname="com.mysql.jdbc.jdbc2.optional.MysqlDataSource">
    <property name="ServerName" value="localhost"/>
    <property name="Port" value="3306" />
    <property name="DatabaseName" value="demojpa" />
    <property name="User" value="demojpa" />
    <property name="Password" value="password"/>
    <property name="Url" value="jdbc:mysql://localhost:3306/demojpa"/>
    <!-- property name="driverClass" value="com.mysql.jdbc.Driver"/ not required -->
</jdbc-connection-pool>
<jdbc-resource enabled="true" jndi-name="java:app/jdbc/appDataSource" object-type="user" 
pool-name="java:app/appConnectionPool"/>
</resources>

使用"java:app/jdbc/appDataSource" jndi 名称查找数据源。已为此在 Glassfish application scoped resources

创建了一个博客 post