`
iwinit
  • 浏览: 455107 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

[Jboss数据源一]初始化

阅读更多

先来看看jboss数据源的整体类图。

 

1.入口类LocalTxDataSource,负责对外参数设置和初始化框架

2.获取数据库连接的入口类WrapperDataSource,其实现了DataSource接口

3.ManagedConnectionFactory接口用来获取真实连接和创建WrapperDataSource

4.LocalManagedConnectionFactory负责从driver获取连接,driver层面的参数都在这里维护

5.JBossManagedConnectionPool维护着连接池必须的参数,管理着连接池的状态

6.ManagedConnectionPool提供了获取和归还连接的功能

 

接下来看一下jboss数据源的初始化过程,主要关注一个问题:数据源连接池如何从配置的参数启动?

入口代理类为LocalTxDataSource,一般使用方式如下

 

LocalTxDataSource localTxDataSource = new LocalTxDataSource();
localTxDataSource.setName(dataSourceDO.getDsName());
localTxDataSource.setBackgroundValidation(dataSourceDO.isBackgroundValidation());
localTxDataSource.setBackGroundValidationMinutes(dataSourceDO
    .getBackgroundValidationMinutes());
localTxDataSource.setBlockingTimeoutMillis(dataSourceDO.getBlockingTimeoutMillis());
localTxDataSource.setCheckValidConnectionSQL(dataSourceDO.getCheckValidConnectionSQL());
localTxDataSource.setConnectionProperties(dataSourceDO.getConnectionProperties());
localTxDataSource.setConnectionURL(dataSourceDO.getConnectionURL());
localTxDataSource.setDriverClass(dataSourceDO.getDriverClass());
localTxDataSource.setExceptionSorterClassName(dataSourceDO.getExceptionSorterClassName());
localTxDataSource.setIdleTimeoutMinutes(dataSourceDO.getIdleTimeoutMinutes());
localTxDataSource.setMaxSize(dataSourceDO.getMaxPoolSize());
localTxDataSource.setMinSize(dataSourceDO.getMinPoolSize());
localTxDataSource.setNewConnectionSQL(dataSourceDO.getNewConnectionSQL());
localTxDataSource.setNoTxSeparatePools(dataSourceDO.isNoTxSeparatePools());
localTxDataSource.setPassword(dataSourceDO.getPassWord());
localTxDataSource.setEncPassword(dataSourceDO.getEncPassword());
localTxDataSource.setPrefill(dataSourceDO.isPrefill());
localTxDataSource.setPreparedStatementCacheSize(dataSourceDO
    .getPreparedStatementCacheSize());
localTxDataSource.setQueryTimeout(dataSourceDO.getQueryTimeout());
localTxDataSource.setSharePreparedStatements(dataSourceDO.isSharePreparedStatements());
localTxDataSource.setTrackStatements(dataSourceDO.getTrackStatements());
localTxDataSource.setTransactionIsolation(dataSourceDO.getTransactionIsolation());
localTxDataSource.setTxQueryTimeout(dataSourceDO.isTxQueryTimeout());
localTxDataSource.setUseFastFail(dataSourceDO.isUseFastFail());
localTxDataSource.setUserName(dataSourceDO.getUserName());
localTxDataSource.setValidateOnMatch(dataSourceDO.isValidateOnMatch());
localTxDataSource.setValidConnectionCheckerClassName(dataSourceDO
    .getValidConnectionCheckerClassName());
localTxDataSource.setCriteria(dataSourceDO.getCriteria());
localTxDataSource.init(zdatasource);

 初始化过程如下:

    public void init(ZDataSource zdatasource) throws Exception {
        initPool();
        initConnectionManager();
        pool.start();
        initDataSource(zdatasource);
        this.zdatasource = zdatasource;
    }

 其最核心的start方法

    public void start() throws Exception {
        pool.startService();
        connectionManager.setPoolingStrategy(pool.getPoolingStrategy());
        connectionManager.startService();
        if (logger.isDebugEnabled()) {
            logger.debug("Connection pool " + name + " is started");
        }
    }

 启动pool,根据criteria配置生成不同的Pool类型,默认OnePool

    public void startService() throws Exception {
        if ("ByContainerAndApplication".equals(criteria))
            poolingStrategy = new PoolBySubjectAndCri(mcf, name, poolParams, noTxSeparatePools, log);
        else if ("ByContainer".equals(criteria))
            poolingStrategy = new PoolBySubject(mcf, name, poolParams, noTxSeparatePools, log);
        else if ("ByApplication".equals(criteria))
            poolingStrategy = new PoolByCri(mcf, name, poolParams, noTxSeparatePools, log);
        else
            // "ByNothing".equals(criteria)
            poolingStrategy = new OnePool(mcf, name, poolParams, noTxSeparatePools, log);
    }

 启动ConnectionManager,顺便做下预热

 public void startService() {
        poolingStrategy.setConnectionListenerFactory(this);

        if (poolingStrategy instanceof PreFillPoolSupport) {
            PreFillPoolSupport prefill = (PreFillPoolSupport) poolingStrategy;
            if (prefill.shouldPreFill()) {
                prefill.prefill();
            }
        }
    }

 最后初始化datasource

 private void initDataSource(ZDataSource zdatasource) throws ResourceException {
        datasource = (DataSource) mcf.createConnectionFactory(new ConnectionManagerDelegate(),
            this.name, zdatasource);
    }
public Object createConnectionFactory(ConnectionManager cm, String dataSourceName,
                                          ZDataSource zdatasource) throws ResourceException {
        return new WrapperDataSource(this, cm, dataSourceName, zdatasource);
    }

 

 

 

  • 大小: 249.6 KB
分享到:
评论

相关推荐

    jboss问题总结

    3. **数据源与连接池配置**:JBoss在启动时不自动初始化连接池和数据源,而是在首次尝试连接时根据配置文件进行初始化。配置文件通常位于`server\default\deploy`目录下,例如`oracle-ds.xml`。在该文件中,你需要...

    数据源配置所用的JAR

    4. **初始化数据源**:启动应用服务器时,会自动加载和初始化数据源。 5. **使用数据源**:在代码中通过`DataSource`接口获取连接,进行数据库操作。 理解并正确配置这些JAR文件对于构建高性能、高可用性的Java应用...

    JBoss启动 JBoss启动

    - 数据源和连接池设置:配置数据库连接,如JNDI绑定、最大连接数等。 - EJB容器准备:为EJB提供运行环境,注册ejb-jar.xml中的组件。 - 启动监听器:开启HTTP、HTTPS、JMS等网络端口监听。 - 部署应用:扫描`...

    Struts1中配置数据源

    5. **编写自定义PlugIn类**:创建`MyDataSourePlugin.java`,在这个类中初始化并注入数据源: ```java public class MyDataSourePlugin extends DatasourcePlugIn { @Override public void init() throws ...

    JBOSS启动顺序、JBOSS占用的端口

    3. **服务初始化**:JBoss根据配置文件加载并初始化各种服务,如EJB容器、Web服务器( Undertow 或 Tomcat )、JMS消息队列、持久化服务(Hibernate)等。 4. **模块加载**:JBoss模块系统会加载应用所需的类库和...

    JBoss7.1.1配置指南及管理员手册PDF版

    - **子系统配置**:管理员需要掌握如何配置JBoss7的各个子系统,例如数据源的配置。 ### 结论 JBoss7.1.1配置指南及管理员手册是一份详尽的参考资料,面向希望深入配置和管理JBoss应用服务器的IT专业人员。通过这...

    jboss 安装应用

    2. 数据源配置:在 `standalone.xml` 中配置数据库连接池,如MySQL、Oracle等。 3. 应用安全设置:配置应用的角色和认证方式,如JaAS、LDAP集成。 九、启动与停止JBoss - 启动:`$JBOSS_HOME/bin/standalone.sh` -...

    如何在spring中等价配置得到原本由jndi配置实现的数据源

    通常,在Web应用程序中,数据源常常通过Java Naming and Directory Interface (JNDI)进行管理,这允许多个应用共享同一个数据源,例如在应用服务器如Tomcat、JBoss或WebLogic中。然而,有时我们可能希望在非Web环境...

    JBOSS介绍

    其简易的安装流程,仅需解压并设置几个环境变量,便能快速部署,极大地简化了服务器的初始化过程,提高了开发效率。 **4. 动态部署与更新** JBoss支持“热部署”,即在运行时不中断服务的情况下,通过简单地复制...

    JBOSS培训资源.ppt

    这些元素定义了应用程序如何与数据库或其他外部资源进行交互,通常包括数据源、JMS 队列和主题等。配置包括了如 `res-ref-name`、`res-type`、`res-auth` 和 `res-sharing-scope` 等属性,用于定义资源引用的名称、...

    jboss原理-4(injection and ioc).docx

    在`bootstrap`子项目中,我们将看到如何使用XML配置文件初始化Microcontainer,并声明需要管理的bean及其依赖。例如,我们可能有一个`MyService`类,它依赖于`DataSource`。在-beans.xml文件中,我们可以定义这两个...

    JPA配置装载 Jboss Envers Jasperreport ireport 项目

    通常通过`Persistence.createEntityManagerFactory()`方法,结合`persistence.xml`配置文件来初始化。 3. **实体管理器(EntityManager)**: 它是与数据库交互的主要接口,负责CRUD操作。如`em.persist()`用于保存...

    jboss rules 用户指南(中文)

    `data-sources`元素是`struts-config.xml`中的一个重要组成部分,主要用于定义Web应用程序将要使用的一个或多个数据源。数据源在Java中通常是指数据库连接池,它们能够高效地管理和重用数据库连接,从而提高应用程序...

    JBoss7配置指南及管理员手册.doc

    - **初始化设置**:基本的安全配置步骤。 - **快速配置**:简化的安全设置流程。 - **详细配置**: - **管理接口**:定义访问管理控制台所需的凭证。 - **安全域**:细粒度的安全策略定义。 - **Outbound ...

    JBoss Admin Development Guide3.26

    - **启动过程**:描述了启动JBoss服务器时JMX是如何被初始化的。 - **JBoss MBean服务**:具体讨论了JBoss中使用的MBean服务,如SAR部署器MBean和服务生命周期接口。 通过上述内容的介绍,我们可以看出,《JBoss ...

    Linux_redhat4_jboss4_oracle

    此外,连接JBoss到Oracle数据库,包括配置数据源(JNDI名)和使用JDBC驱动,也是这一过程的重要环节。 在【安装_参考资料】文件中,可能包含有详细步骤、配置示例、错误排查指南和最佳实践等内容。用户可以从中获取...

    jboss 测试EJB 的例子

    2. **EJB生命周期**:EJB有创建、初始化、活跃、钝化和销毁等生命周期阶段,每个阶段都有相应的回调方法,开发者可以重写这些方法以实现特定功能。 3. **EJB容器管理**:JBoss作为EJB容器,负责EJB的实例化、事务...

Global site tag (gtag.js) - Google Analytics