配置Connection Pool和一个DataSource
3.1 基本配置
domain和server已经配置好了,我们需要配置一个Connection Pool和一个DataSource,所以我们建立一个新的任务--doconfig。
<target name="doconfig" depends="init">
<wlconfig url="t3://${server.host}:${server.port}" username="${server.username}" password="${server.password}">
<query domain="${domain.name}" type="Server" name="${server.name}" property="fullservername"/>
</wlconfig>
<wlconfig url="t3://${server.host}:${server.port}" username="${server.username}" password="${server.password}">
<create type="JDBCConnectionPool" name="${database.poolname}">
<set attribute="CapacityIncrement" value="1"/>
<set attribute="DriverName" value="${database.driver.name}"/>
<set attribute="InitialCapacity" value="1"/>
<set attribute="MaxCapacity" value="10"/>
<set attribute="Password" value="${database.password}"/>
<set attribute="Properties" value="user=root"/>
<set attribute="RefreshMinutes" value="0"/>
<set attribute="ShrinkPeriodMinutes" value="15"/>
<set attribute="ShrinkingEnabled" value="true"/>
<set attribute="TestConnectionsOnRelease" value="false"/>
<set attribute="TestConnectionsOnReserve" value="false"/>
<set attribute="URL" value="${database.driver.url}"/>
<set attribute="Targets" value="${fullservername}"/>
</create>
<create type="JDBCTxDataSource" name="${datasource.name}">
<set attribute="JNDIName" value="${datasource.jndiname}"/>
<set attribute="PoolName" value="${database.poolname}"/>
<set attribute="Targets" value="${fullservername}"/>
</create>
</wlconfig>
<echo message="${fullservername}"/>
</target>
对应的build.properties如下
database.poolname=pool
database.driver.name=com.mysql.jdbc.Driver
database.driver.url=jdbc:mysql://localhost:3306/opencms
database.username=root
database.password=
datasource.jndiname=leondatasource
datasource.name=leondatasource
通过运行Ant doconfig的后,就可以在程序中根据datasource.jndiname来访问datasource了。
但我们要注意一些问题,运行ant doconfig的时候,我们必须保证我们目标的Server已经启动,就是运行myserver下的startantdomain.cmd启动的server。对于wlconfig命令的参数,url没有什么问题,将配置读过来就行了(用户与密码可以不写,后面说明),wlconfig任务不支持classpathref参数,所以我们不得不在开始的时候使用setWLSEnv.cmd。
我们这里要使用mysql的JDBC类库,我们可以在环境变量加入这么一条:
CLASSPATH=D:tooljavamysqlmysql-connector-java-3.0.12-production-bin.jar
也可以将类似的语句加到setWLSEnv.cmd,但这样还需要修改生成的启动脚本加入对应的CLASSPATH。这给我们的工作带来了些麻烦,希望以后BEA能够改进wlconfig任务。我们也要建立好database.driver.url注明的数据库,因为配置Connection Pool需要检测数据库的连通性。
wlconfig有许多子任务,有create,delete,set,get,query,可以访问或是修改Domain的信息。
这里还有个小技巧就是为什么要使用query子任务,这是因为下面两个create子任务的参数Targets需要一个完全的server名字。我们使用:
<echo message="${fullservername}"/>
打印信息如下:
antdomain:Name=antserver,Type=Server
只有使用这个参数,我们才能确保我们的Connection Pool和一个DataSource能够绑定到我们的server上。
当运行结束后,如果没有错误,说明已经成功了,这时候到console下察看就会看到生成的Connection Pool和一个DataSource。
3.2 让配置可以重复执行
不过上面这部分也有些问题,因为只能执行一次,在执行第二次时就会出现错误,所以我们必须删除旧的,然后重新配置。这时需要使用Ant的逻辑判断能力。
更改后的build.xml相应部分如下:
<target name="doconfig" depends="init">
<wlconfig url="t3://${server.host}:${server.port}" username="${server.username}" password="${server.password}">
<query domain="${domain.name}" type="Server" name="${server.name}" property="fullservername"/>
<query domain="${domain.name}" type="JDBCConnectionPool" name="${database.poolname}" property="pool"/>
<query domain="${domain.name}" type="JDBCTxDataSource" name="${datasource.name}" property="datasource"/>
</wlconfig>
<antcall target="cleardatasource"/>
<antcall target="clearpool"/>
<wlconfig url="t3://${server.host}:${server.port}" username="${server.username}" password="${server.password}">
<create type="JDBCConnectionPool" name="${database.poolname}">
<set attribute="CapacityIncrement" value="1"/>
<set attribute="DriverName" value="${database.driver.name}"/>
<set attribute="InitialCapacity" value="1"/>
<set attribute="MaxCapacity" value="10"/>
<set attribute="Password" value="${database.password}"/>
<set attribute="Properties" value="user=root"/>
<set attribute="RefreshMinutes" value="0"/>
<set attribute="ShrinkPeriodMinutes" value="15"/>
<set attribute="ShrinkingEnabled" value="true"/>
<set attribute="TestConnectionsOnRelease" value="false"/>
<set attribute="TestConnectionsOnReserve" value="false"/>
<set attribute="URL" value="${database.driver.url}"/>
<set attribute="Targets" value="${fullservername}"/>
</create>
<create type="JDBCTxDataSource" name="${datasource.name}">
<set attribute="JNDIName" value="${datasource.jndiname}"/>
<set attribute="PoolName" value="${database.poolname}"/>
<set attribute="Targets" value="${fullservername}"/>
</create>
</wlconfig>
<echo message="${fullservername}"/>
</target>
<target name="clearpool" if="pool">
<wlconfig url="t3://${server.host}:${server.port}" username="${server.username}" password="${server.password}">
<delete mbean="${pool}"/>
</wlconfig>
</target>
<target name="cleardatasource" if="datasource">
<wlconfig url="t3://${server.host}:${server.port}" username="${server.username}" password="${server.password}">
<delete mbean="${datasource}"/>
</wlconfig>
</target>
我们增加了两个target,两个query和两个antcall。
我们首先使用query监测是否这两个对象已经建立,如果已经建立,则我们的pool或是datasource就可以被赋上值,否则这两项就会为空值,然后我们运行antcall来运行cleardatasource和clearpool任务,而这两个任务要执行,都有各自的条件,就是if后面的部分,只有条件被赋值也就是存在着两个对象时才执行清除工作。
CRM理念、软件、实施,一个都不能少
0
相关文章