在GlassFish中创建JDBC连接池和资源的方式

JDBC Connection Pool & Resource can be created in multiple ways.

 

  • 管理控制台
  • 批处理命令行
  • 使用sun-resources.xml
  • 使用AMX(应用程序管理扩展)API在程序中创建

    1) Admin Console

    Admin console provides user intuitive interface to create a connection pool & resource for database access.
    a) Copy the jdbc driver that will be used for database connectivity, to GLASSFISH_INSTALL/domains/<domainname>/lib/ext or
    add the jdbc-driver path to "classpath-prefix" and restart application server.

    b) Using Admin console, Common Tasks > create jdbc connection pool

    common-tasks

    c) Provide a name for the connection pool, select the resource type, select the database vendor and press Next

    new jdbc connection pool

    d) Console will list the the default pool settings and also the properties of datasource class provided by the vendor.


    pool-properties

    e) Fill the values for datasource properties, eg: servername, user, password, URL, databasename etc., and press Finish
       
    f) Pool will be created

    pool created

    g) To check whether the values provided for datasource for database connectivity are valid and works fine, press Ping.
    Ping will use these properties and try to establish a connection.

    ping jdbc connection pool

    This connection pool need to be associated with a jdbc-resource.

    h) To create a jdbc-resource that will be used by the application :
    Resources > Jdbc Resources

    new jdbc resource
    i) Press New

    j) provide the jndi name for the resource and the pool with which the resource need to be associated.

    new jdbc resource


    k) Press OK, jdbc-resource will be created.

    resource-created

    2) Using CLI

    jdbc-connection-pool can be created as

    AS_INSTALL_ROOT/bin/asadmin create-jdbc-connection-pool --datasourceclassname oracle.jdbc.pool.OracleDataSource --restype javax.sql.DataSource --property user=dbuser:password=dbpassword:url="jdbc/:oracle/:thin/:@localhost/:1521/:ORCL" oracle-pool
    Command create-jdbc-connection-pool executed successfully.

    jdbc-resource can be created as
    AS_INSTALL_ROOT/bin/asadmin create-jdbc-resource --connectionpoolid oracle-pool jdbc/oracle-resource
    Command create-jdbc-resource executed successfully.

    To test whether the connection settings are correct, ping connection pool
    AS_INSTALL_ROOT/bin/asadmin ping-connection-pool oracle-pool
    Command ping-connection-pool executed successfully.

    Properties of connection pool can be read/changed as follows.
    AS_INSTALL_ROOT/bin/asadmin list *oracle-pool*
    domain.resources.jdbc-connection-pool.oracle-pool

    List the properties of connection pool
    AS_INSTALL_ROOT/bin/asadmin get domain.resources.jdbc-connection-pool.oracle-pool.*
    domain.resources.jdbc-connection-pool.oracle-pool.allow-non-component-callers = false
    domain.resources.jdbc-connection-pool.oracle-pool.associate-with-thread = false
    domain.resources.jdbc-connection-pool.oracle-pool.connection-creation-retry-attempts = 0
    domain.resources.jdbc-connection-pool.oracle-pool.connection-creation-retry-interval-in-seconds = 10
    domain.resources.jdbc-connection-pool.oracle-pool.connection-leak-reclaim = false
    domain.resources.jdbc-connection-pool.oracle-pool.connection-leak-timeout-in-seconds = 0
    domain.resources.jdbc-connection-pool.oracle-pool.connection-validation-method = auto-commit
    domain.resources.jdbc-connection-pool.oracle-pool.datasource-classname = oracle.jdbc.pool.OracleDataSource
    domain.resources.jdbc-connection-pool.oracle-pool.description =
    domain.resources.jdbc-connection-pool.oracle-pool.fail-all-connections = false
    domain.resources.jdbc-connection-pool.oracle-pool.idle-timeout-in-seconds = 300
    domain.resources.jdbc-connection-pool.oracle-pool.is-connection-validation-required = false
    domain.resources.jdbc-connection-pool.oracle-pool.is-isolation-level-guaranteed = true
    domain.resources.jdbc-connection-pool.oracle-pool.lazy-connection-association = false
    domain.resources.jdbc-connection-pool.oracle-pool.lazy-connection-enlistment = false
    domain.resources.jdbc-connection-pool.oracle-pool.match-connections = false
    domain.resources.jdbc-connection-pool.oracle-pool.max-connection-usage-count = 0
    domain.resources.jdbc-connection-pool.oracle-pool.max-pool-size = 32
    domain.resources.jdbc-connection-pool.oracle-pool.max-wait-time-in-millis = 60000
    domain.resources.jdbc-connection-pool.oracle-pool.name = oracle-pool
    domain.resources.jdbc-connection-pool.oracle-pool.non-transactional-connections = false
    domain.resources.jdbc-connection-pool.oracle-pool.pool-resize-quantity = 2
    domain.resources.jdbc-connection-pool.oracle-pool.property.password = dbpassword
    domain.resources.jdbc-connection-pool.oracle-pool.property.url = jdbc:oracle:thin:@localhost:1521:ORCL
    domain.resources.jdbc-connection-pool.oracle-pool.property.user = dbuser
    domain.resources.jdbc-connection-pool.oracle-pool.res-type = javax.sql.DataSource
    domain.resources.jdbc-connection-pool.oracle-pool.statement-timeout-in-seconds = -1
    domain.resources.jdbc-connection-pool.oracle-pool.steady-pool-size = 8
    domain.resources.jdbc-connection-pool.oracle-pool.transaction-isolation-level =
    domain.resources.jdbc-connection-pool.oracle-pool.validate-atmost-once-period-in-seconds = 0
    domain.resources.jdbc-connection-pool.oracle-pool.validation-table-name =
    domain.resources.jdbc-connection-pool.oracle-pool.wrap-jdbc-objects = false

    Changing a property
    AS_INSTALL_ROOT/bin/asadmin set domain.resources.jdbc-connection-pool.oracle-pool.steady-pool-size=20
    domain.resources.jdbc-connection-pool.oracle-pool.steady-pool-size = 20


    AS_INSTALL_ROOT/bin/asadmin get domain.resources.jdbc-connection-pool.oracle-pool.steady-pool-size   
    domain.resources.jdbc-connection-pool.oracle-pool.steady-pool-size = 20


    3) Using sun-resources.xml templates

    sun-resources.xml can be used to create jdbc-connection-pool & resources.
    Templates for various databases will be available in GLASSFISH_INSTALL/lib/install/templates/resources/jdbc
    Copy and modify the templates with appropriate values.

    eg:
    copy "oracle_type4_datasource.xml"  as oracle-resource.xml and modify the URL, user, password values.
    GLASSFISH_INSTALL/bin/asadmin add-resources GLASSFISH_INSTALL/lib/install/templates/resources/jdbc/oracle-resource.xml
     =========================
    Added Resource Type: jdbc-connection-pool
     =========================
    Added Resource Type: jdbc-resource
    Command add-resources executed successfully.


    4) Creating Connection Pool & Resource programmatically

    Using AMX (Application Server Management Extenstions) resource/pool can be created. Following snippet
    will create a connection pool, resource and resource-ref for the "server" instance.
    [needs appserv-ext.jar in classpath]
    import java.util.Map;
    import java.util.HashMap;

    import com.sun.appserv.management.client.AppserverConnectionSource;
    import com.sun.appserv.management.DomainRoot;
    import com.sun.appserv.management.config.*;


    public class ResourceCreator {
        public static final String hostName = "localhost";
        public static final int JMX_PORT = 8686;
        public static final String user = "admin";
        public static final String password = "adminadmin";

        public static void main(String[] args) throws Exception {
            AppserverConnectionSource appserver =
                    new AppserverConnectionSource(AppserverConnectionSource.PROTOCOL_RMI, hostName, JMX_PORT, user, password, null);

            String connPoolName = "mysql-con-pool";
            String resourceName = "jdbc/mysql-resource";

            DomainRoot domainRoot = appserver.getDomainRoot();

            //check whether the con.pool already exists, else, create one
            Map<String, JDBCConnectionPoolConfig> conPoolMap = domainRoot.getDomainConfig().getJDBCConnectionPoolConfigMap();
            if (conPoolMap.containsKey(connPoolName)) {
                System.out.println("JDBC Connection pool : " + connPoolName + " already exists");
            } else {
                Map<String, String> map = new HashMap<String, String>();
                map.put("property.user", "jagadish");
                map.put("ResType", "javax.sql.ConnectionPoolDataSource");
                map.put("property.password", "jagadish");
                map.put("property.databaseName", "jagadish");
                map.put("property.url", "jdbc:mysql://localhost:3306/jagadish");

                domainRoot.getDomainConfig().createJDBCConnectionPoolConfig(connPoolName, "com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource", map);
                System.out.println("JDBC Connection pool : " + connPoolName + " created ! ");
            }

            //check whether the jdbc resource already exists, else, create one
            Map<String, JDBCResourceConfig> resMap = domainRoot.getDomainConfig().getJDBCResourceConfigMap();
            if (resMap.containsKey(resourceName)) {
                System.out.println("JDBC Resource : " + resourceName + " already exists");
            } else {
                domainRoot.getDomainConfig().createJDBCResourceConfig(resourceName, connPoolName, null);
                System.out.println("JDBC Resource : " + resourceName + " created !");
            }

            //create a resource-ref for the instance "server"
            Map<String, StandaloneServerConfig> map1 = domainRoot.getDomainConfig().getStandaloneServerConfigMap();
            {
                StandaloneServerConfig sc = map1.get("server");
                Map<String, ResourceRefConfig> rm = sc.getResourceRefConfigMap();

                if (rm.containsKey(resourceName)) {
                    System.out.println(resourceName + " already referenced for the server instance");
                } else {
                    sc.createResourceRefConfig(resourceName, true);
                    System.out.println(resourceName + " reference created for the server instance");
                }
            }
        }
    }

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GlassFish 应用服务器,ManagedResource 和 ManagedObject 都是管理资源的机制。下面我将以 JDBC 连接池为例,来举例说明 ManagedResource 和 ManagedObject 的使用。 在 GlassFish JDBC 连接池是一种资源,可以通过 ManagedResource 和 ManagedObject 来进行管理。在这个例子JDBC 连接池是 ManagedResource,而数据源是 ManagedObject。 具体来说,一个 JDBC 连接池可以有多个数据源,每个数据源都有一个名称、一个连接 URL、一个用户名、一个密码等属性。在 GlassFish ,这些属性可以通过 ManagedObject 进行管理。 例如,我们可以通过以下命令在 GlassFish 创建一个名为 myPoolJDBC 连接池: ``` asadmin create-jdbc-connection-pool --restype javax.sql.DataSource --datasourceclassname com.mysql.jdbc.jdbc2.optional.MysqlDataSource --property user=root:password=123456:url=jdbc:mysql://localhost:3306/test myPool ``` 在这个命令,我们指定了连接池资源类型、数据源类名、属性等信息。其,--property 参数指定了数据源的属性,这些属性将作为 ManagedObject 进行管理。 一旦创建JDBC 连接池,我们就可以使用 JMX 来管理其的数据源。例如,我们可以使用 JConsole 连接到 GlassFish 的 MBean 服务器,然后找到 myPool 的 MBean,从而访问其的 ManagedObject。 在 JConsole ,我们可以找到 myPool 的 MBean,然后展开它,可以看到其包含了多个 ManagedObject,每个 ManagedObject 都代表一个数据源。我们可以通过这些 ManagedObject 来查看和修改数据源的属性,例如修改用户名和密码等。 总之,ManagedResource 和 ManagedObject 是 GlassFish 管理资源的两个不同层次,ManagedResource 是更高层次的资源管理机制,而 ManagedObject 是 ManagedResource 的一部分,用于实现具体的属性管理。在 GlassFish JDBC 连接池就是一个很好的例子,演示了 ManagedResource 和 ManagedObject 的使用方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值