临沂住房和城乡建设局网站,ftp上传文件到网站,外贸公司网站空间,ic设计公司排名此摘录摘自《 从Tomcat到WildFly 》一书#xff0c;您将在其中学习如何将现有的Tomcat体系结构移植到WildFly#xff0c;包括服务器配置和在其顶部运行的应用程序。 WildFly是完全兼容的Java Enterprise Edition 7容器#xff0c;与Tomcat相比#xff0c;它具有更多的可用… 此摘录摘自《 从Tomcat到WildFly 》一书您将在其中学习如何将现有的Tomcat体系结构移植到WildFly包括服务器配置和在其顶部运行的应用程序。 WildFly是完全兼容的Java Enterprise Edition 7容器与Tomcat相比它具有更多的可用服务和选项集。 这本书还将使您了解迁移期间可能发生的最常见的陷阱和弊端。 目录 1.简介 2.将JDBC驱动程序作为模块安装 3.在应用程序服务器上注册JDBC驱动程序 4.配置使用JDBC驱动程序的数据源 5.配置输出 6.将数据源参数移植到WildFly 6.1。 最小和最大池大小 6.2。 处理空闲连接 6.3。 在获取连接时设置超时 6.4。 处理连接泄漏 6.5。 配置语句缓存 1.简介 问题 我在Tomcat上有一个数据源配置该配置用于从池中收集数据库连接。 我需要在WildFly上移植我的配置。 在Apache Tomcat上数据源配置可以包含在server.xml文件的global部分中。 例如这是流行的MySQL数据库的配置 Resource namejdbc/mysqlds authContainer typejavax.sql.DataSourcemaxActive100 maxIdle30 maxWait10000usernametomcat passwordtomcatdriverClassNamecom.mysql.jdbc.Driverurljdbc:mysql://localhost:3306/mydatabase/ 另外对于特定于应用程序的内容应在WEB-INF / web.xml上放置以下几行。 web-app xmlnshttp://java.sun.com/xml/ns/j2ee xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd version2.4descriptionTomcat DB/descriptionresource-refdescriptionDatabase Connection/descriptionres-ref-namejdbc/mysqlds/res-ref-nameres-typejavax.sql.DataSource/res-typeres-authContainer/res-auth/resource-ref
/web-app 为了能够加载MySQL JDBC驱动程序您需要在CATALINA_HOME / lib文件夹中包含JAR库 让我们看看如何在WildFly中配置数据源配置。 这可以通过多种方式完成但是所有可能的解决方案都涉及以下步骤 将JDBC驱动程序安装为模块 在应用程序服务器上注册JDBC驱动程序 配置使用JDBC驱动程序的数据源 我们将看到推荐的方法该方法需要使用命令行界面尽管我们将提到一些可用的替代方法。 2.将JDBC驱动程序作为模块安装 WildFly基于每个库本身都是模块的假设。 因此我们首先将JDBC驱动程序变成一个模块。 这可以通过在JBOSS_HOME / modules目录下创建文件路径结构来完成。 例如为了安装MySQL JDBC驱动程序请创建如下的目录结构 JBOSS_HOME / modules / com / mysql / main 。 将JDBC驱动程序JAR复制到主子目录中。 在主子目录中创建一个包含以下定义的module.xml文件只需根据您的情况修改JDBC驱动程序名称 ?xml version1.0 encodingUTF-8?
module xmlnsurn:jboss:module:1.0 namecom.mysqlresourcesresource-root pathmysql-connector-java-5.1.24-bin.jar//resourcesdependenciesmodule namejavax.api/module namejavax.transaction.api//dependencies/module 也可以使用命令行界面通过单个命令来完成上述过程该命令将创建文件系统结构将JDBC驱动程序复制到主文件夹中并根据提供给CLI的选项来配置module.xml 。 假设MySQL JDBC驱动程序在/ home / wildfly文件夹中可用请按以下步骤操作 module add --namecom.mysql --resources/home/wildfly/mysql-connector-java-5.1.24-bin.jar --dependenciesjavax.api,javax.transaction.api3.在应用程序服务器上注册JDBC驱动程序 现在您的MySQL可以作为应用服务器上的模块使用我们将其注册为JDBC驱动程序。 使用CLI时这是一步操作 /subsystemdatasources/jdbc-drivermysql:add(driver-namemysql,driver-module-namecom.mysql) 现在您可以检查您的MySQL驱动程序是否已通过可用的JDBC驱动程序注册。 这是您可以实现的方法 [standalonelocalhost:9990 /] /subsystemdatasources:installed-drivers-list
{. . . . . . . . . . .driver-name mysql,deployment-name undefined,driver-module-name com.mysql,module-slot main,driver-datasource-class-name ,driver-xa-datasource-class-name ,driver-class-name com.mysql.jdbc.Driver,driver-major-version 5,driver-minor-version 1,jdbc-compliant false }]
}4.配置使用JDBC驱动程序的数据源 最后一步实际上将创建一个供应用程序使用的数据源。 为此我们将使用CLI 数据源快捷方式命令该命令要求输入池名称JNDI绑定JDBC连接参数以及最后的安全设置用户名和密码作为输入 data-source add --jndi-namejava:/jdbc/mysqlds --nameMySQLPool --connection-urljdbc:mysql://localhost:3306/mydatabase --driver-namemysql --user-namejboss --passwordjboss 请注意数据源的JNDI名称必须使用前缀java/才能被接受为有效。 因此tomcat中使用的绑定“ jdbc / mysqlds”已更改为“ java/ jdbc / mysqlds”。 5.配置输出 如果已执行上述步骤则应在“数据源”部分中使用以下数据源配置 datasourcesdatasource jndi-namejava:/jdbc/mysqlds pool-nameMySQLPool enabledtrueconnection-urljdbc:mysql://localhost:3306/mydatabase/connection-urldrivermysql/driversecurityuser-namejboss/user-namepasswordjboss/password/security/datasourcedriversdriver namemysql modulecom.mysql//drivers/datasources6.将数据源参数移植到WildFly 在应用程序服务器上配置数据源是在WildFly上移植应用程序的第一个里程碑。 但是可能您正在使用某些特定的连接池设置这需要在应用程序服务器上进行移植。 其中一些参数在WildFly上具有相同的匹配项其他一些则基于不同的合并策略。 因此在将它们移植到应用程序服务器时您需要调整配置。 让我们看看如何将最常见的池选项移植到WildFly 最小和最大池大小 选择正确的池大小是应用程序性能的必要条件。 Tomcat的最小池大小由minIdle参数确定最大池大小通过maxActive配置。 另一方面池的初始大小是使用initialSize参数配置的。 这是一个示例配置 Resource namejdbc/mysqlds authContainer typejavax.sql.DataSourcemaxActive100 minIdle30 initialSize”15” usernametomcat passwordtomcatdriverClassNamecom.mysql.jdbc.Driverurljdbc:mysql://localhost:3306/mydatabase/ 移植到WildFly时参数分别命名为min-pool-size和max-pool-size并且可以使用任何管理工具进行设置。 更改默认数据源的方法如下 /subsystemdatasources/data-sourceExampleDS/:write-attribute(namemin-pool-size,value30)
/subsystemdatasources/data-sourceExampleDS/:write-attribute(namemax-pool-size,value100) 另一方面可以使用以下方法设置初始池大小 /subsystemdatasources/data-sourceExampleDS/:write-attribute(nameinitial-pool-size,value5) 另外请注意WildFly还有一个名为pool- prefill的属性该属性确定是否尝试将连接池预填充到最小连接数 /subsystemdatasources/data-sourceExampleDS/:write-attribute(namepool-prefill,valuetrue)处理空闲连接 已创建但应用程序未使用的连接被分类为空闲连接。 WildFly和Tomcat具有处理空闲连接的不同方法。 更详细地Tomcat使用minIdle和maxIdle参数分别确定应保留在池中的空闲连接的最小和最大。 我们已经讨论过minIdle参数可以将其变为WildFly min-pool-size 。 另一方面在WildFly上maxIdle参数没有相应的匹配项。 最接近的匹配是第i DLE-超时分钟 这之后未使用的连接被关闭分钟缺省15分钟的数量。 您实际上可以将这个参数更改为10分钟如下所示 /subsystemdatasources/data-sourceExampleDS/:write-attribute(nameidle-timeout-minutes,value10)在获取连接时设置超时 如果池中的所有连接都忙则您的应用程序显然必须等待连接被释放。 可以想象这种情况存在超时由Tomcat中的maxWait参数处理。 在以下示例中超时设置为30秒 Resource namejdbc/mysqlds authContainer typejavax.sql.DataSourcemaxWait30000 . . . . / WildFly有一个对应的参数名为blocking-timeout-wait-millis 在以下CLI命令中我们将其设置为1秒1000毫秒 /subsystemdatasources/data-sourceExampleDS/:write-attribute(nameblocking-timeout-wait-millis,value1000)处理连接泄漏 连接泄漏在Tomcat中被称为“ 废弃的连接 ”它是在创建Statement或PreparedStatement或CallableStatement时发生的并且您错过了关闭连接或语句的时间或更常见的是您不包括Connection 最后 关闭 。 您可以通过启用removeAbandoned参数来处理Tomcat中的废弃连接。 如果设置为true则如果连接的使用时间未超过removeAbandonedTimeout 默认为300秒则该连接将被视为可以删除。 Resource namejdbc/mysqlds authContainer typejavax.sql.DataSourceremoveAbandoned true removeAbandonedTimeout”300”. . . . / 在WildFly方面没有任何针对突然关闭合格已废弃的连接的调整。 另一方面有一些有用的参数可用于检测或跟踪问题。 如果您担心语句和PreparedStatements则可以使用track-statements参数该参数在连接返回到池时检查未关闭的语句并在关闭语句/返回到准备好的语句高速缓存时关闭结果集。 有效值为 false不跟踪语句和结果 true跟踪语句和结果集并在未关闭时发出警告 nowarn跟踪语句但不警告其未关闭 这是设置此参数以使用NOWARN的方法 /subsystemdatasources/data-sourceExampleDS/:write-attribute(nametrack-statements,valueNOWARN) 此外您可以启用缓存层的调试 这由WildFly由连接器子系统JCA的一部分“ 缓存的连接管理”来处理。 /subsystemjca/cached-connection-managercached-connection-manager/:write-attribute(namedebug,valuetrue) 您还应该启用error参数该参数将使您检测与缓存的连接管理器连接的任何错误 /subsystemjca/cached-connection-managercached-connection-manager/:write-attribute(nameerror,valuetrue) 启用日志记录后对于从池中获取的每个连接您将看到以下信息 DEBUG [org.jboss.jca.core.connectionmanager.pool.strategy.OnePool] (MSC service thread 1-4) {JNDI_NAME}: getConnection(null, null) [1/100] 另一方面当连接返回到池时您将阅读以下消息 DEBUG [org.jboss.jca.core.connectionmanager.pool.strategy.OnePool] (MSC service thread 1-4) {JNDI_NAME}: returnConnection(607e334, false) [1/99] 如果要调试应用程序发出的语句则可以轻松找出连接泄漏的位置。 最后如果您想了解有关JDBC级别的详细信息可以通过将名为spy的属性设置为true来记录JDBC语句 /subsystemdatasources/data-sourceMySQLPool/:write-attribute(namespy,valuetrue) 为了调试服务器日志中的JDBC语句您需要创建一个logger元素该元素可跟踪jboss.jdbc.spy包。 您可以按照以下步骤进行操作 /subsystemlogging/loggerjboss.jdbc.spy/:add(levelTRACE) 重新加载服务器配置并检查服务器日志这些日志默认包含在JBOSS_HOME / standalone / log / server.log 独立模式或JBOSS_HOME / domain / [服务器名称] /log/server.log 域模式中。 配置语句缓存 “ Prepared Statement”是数据库上的预编译对象其访问计划将被重用以比正常查询更快地执行更多查询。 当需要在不同请求中发出相同的语句时应用程序服务器本身也可以缓存准备好的语句。 Tomcat的jdbc-pool功能可以使用JDBC拦截器来管理Prepared Statement缓存该拦截器在创建池时被设置为JDBC属性。 例如 Resource namejdbc/mysqlds authContainer typejavax.sql.DataSourcejdbcInterceptorsStatementCache(preparedtrue,callablefalse,max50)
/Resource 在WildFly上运行时您可以通过编写prepare -statements-cache-size属性来设置PreparedStatement缓存大小如以下示例所示该属性将其大小设置为25条语句 /subsystemdatasources/data-sourceExampleDS/:write-attribute(nameprepared-statements-cache-size,value25) 此摘录摘自《 从Tomcat到WildFly 》一书您将在其中学习如何将现有的Tomcat体系结构移植到WildFly包括服务器配置和在其顶部运行的应用程序。 您还将了解迁移过程中可能发生的最常见的陷阱和弊端。 自1999年以来Apache Tomcat是Apache软件基金会作为开源项目开发的流行Web服务器和Servlet容器。今天它是在简单站点和大型网络中运行Web应用程序的最广泛使用的平台之一。 尽管如此Apache Tomcat上可用的库数量通常仅够用于仅需HTTP协议和有限数量服务的非常简单的体系结构。 这自然导致了通过新扩展或模块例如SpringHibernateJDO或Struts增加其功能的趋势。 尽管本书的目的不是要对这些体系结构产生负面影响但我们确实相信对其他解决方案的比较知识可以帮助您为项目选择最佳方案。 翻译自: https://www.javacodegeeks.com/2014/11/tomcat-wildfly-configuring-database-connectivity.html