科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道WebSphere Application Server6.0无人执守部署概要

WebSphere Application Server6.0无人执守部署概要

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

Java服务器端程序的部署问题一直让人比较头痛,特别是was6,安装一个复杂的ear包有很多配置工作需要做,不仅复杂而且散步在很多环节当中,即使是一线开发人员也很容易出错或者遗漏.

作者:chinaunix 来源:chinaunix 2007年10月5日

关键字: WEBSPHERE 应用 技术 中间件

  • 评论
  • 分享微博
  • 分享邮件
Java服务器端程序的部署问题一直让人比较头痛,特别是was6,安装一个复杂的ear包有很多配置工作需要做,不仅复杂而且散步在很多环节当中,即使是一线开发人员也很容易出错或者遗漏,交付给测试和部署人员则更是问题不断,即使连篇累牍的编写部署手册也很难取得一个比较好的效果。经过很多评估工作之后,我们决定采用was自带的命令行工具(websphere/appserver/profiles/appserver01/bin/wsadmin),编写jacl脚本,集成到ant中,利用ant强大的项目构建能力,简化测试、部署工作。下面的描述都是以我们自身项目为例,更加详细的内容请参考was6 information center(http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/index.jsp?topic=/com.ibm.websphere.express.doc/info/welcome_express.html)
做为一个典型的java企业应用,我们在部署阶段要做的事情有:
定义一个J2C认证
配置一个Oracle 10g数据源
配置一个WebSphere MQ队列连接工厂
配置多个WebSphere MQ Queue队列
配置多个侦听器端口
安装多个EAR包
以上每一个步骤都可以当作一个脚本的一部分来执行,但是为了讲述方便,我们将把不同的脚本分开描述、分开执行。脚本可以任意命名,但是因为我们使用jacl来编写的,所以我们还是遵循了*.jacl的规则,jacl脚本是一个很类似于tcl语言的东西。执行这些脚本有一个统一的方法:
%WAS install%\profiles\appserver01\bin wsadmin –f test.jacl
appserver01只是我们自己的server名称,请大家自行对照自己的was配置。test.jacl是脚本文件的名称。
首先建立J2C认证,脚本j2c.jacl:

代码
  1. #执行要配置的cell  
  2. set myCell zxhNode01Cell   
  3. set security [$AdminConfig getid /Cell:$myCell /Security:/]   
  4. $AdminConfig required JAASAuthData   
  5. #认证别名   
  6. set alias [list alias dcmp2]   
  7. #用户id   
  8. set userid [list userId dcmp2]   
  9. #密码   
  10. set password [list password dcmp2]   
  11. set jaasAttrs [list $alias $userid $password]   
  12. $AdminConfig create JAASAuthData $security $jaasAttrs   
  13. $AdminConfig save  
执行该脚本将创建一个别名、帐号、密码均为dcmp2的j2c认证,该认证会被后面的数据源使用。
现在建立Oracle 10g数据源,脚本dbpool.jacl:

代码
  1. #指定cell   
  2. set myCell zxhNode01Cell   
  3. #指定要配置的node   
  4. set myNode zxhNode01   
  5. set node [$AdminConfig getid /Cell:$myCell /Node:$myNode /]   
  6.   
  7. #创建jdbc provider   
  8. $AdminConfig attributes JDBCProvider   
  9. set implementationClassName [list implementationClassName oracle.jdbc.pool.OracleConnectionPoolDataSource]   
  10. #jdbc provider的名称   
  11. set name [list name Oracle10g]   
  12. set classpath [list classpath E:/DCMP2.0/lib/OracleDriver/ojdbc14_10.jar]   
  13. set jdbcAttrs [list $name $implementationClassName $classpath]   
  14. $AdminConfig create JDBCProvider $node $jdbcAttrs   
  15. $AdminConfig save   
  16.   
  17. #创建DataSource   
  18. set jdbc [$AdminConfig getid /Cell:$myCell /Node:$myNode/JDBCProvider:Oracle10g/]   
  19. $AdminConfig attributes DataSource   
  20. set jndi [list jndiName jdbc/dcmp2]   
  21. set name [list name dcmp2]   
  22. set dsAttrs [list $jndi $name]   
  23.   
  24. set newds [$AdminConfig create DataSource $jdbc $dsAttrs]   
  25. $AdminConfig save   
  26.   
  27. #指定数据库url   
  28. set url [list [list name URL] [list value jdbc:oracle:thin:@127.0.0.1:1521:workdb] [list type java.lang.String]]    
  29. #指定连接池的db helper类   
  30. set helper [list datasourceHelperClassname com.ibm.websphere.rsadapter.Oracle10gDataStoreHelper]    
  31. #认证别名   
  32. set xauthDataAlias_attr [list authDataAlias dcmp2]   
  33. set xnewprops [list $url]   
  34. set xresprops [list resourceProperties $xnewprops]   
  35. set xps_attr [list propertySet [list $xresprops]]   
  36. set xattrs [list $helper $xauthDataAlias_attr $xps_attr]   
  37.     
  38. $AdminConfig modify $newds $xattrs   
  39. $AdminConfig save   
  40.   
  41. #配置连接池   
  42. $AdminConfig attributes ConnectionPool   
  43. set maxConnections [list maxConnections 40]   
  44. set minConnections [list minConnections 10]   
  45. set unusedTimeout [list unusedTimeout 60]   
  46.   
  47. set poolAttrs [list $maxConnections $minConnections $unusedTimeout]   
  48.   
  49. $AdminConfig create ConnectionPool $newds $poolAttrs   
  50. $AdminConfig save  
该脚本执行了三个步骤,首先创建一个名为Oracle10g的jdbc provider,然后在该provider上创建了一个名为dcmp2的数据源,并且配置了一些oracle数据源独有的参数,包括数据库存储的helper类、数据库的url等。需要注意的是我们并没有指定连接数据库的帐号和密码,所以它会以J2C中指定的帐号信息去连接。当然,你也可以在这里单独配置,写到propertySet当中去就可以了。然后我们还修改了连接池的参数,包括最大连接数、最小连接数等。
然后我们要配置WebSphere MQ队列连接工厂,该连接工厂将指向一个已经配置好的Websphere MQ的队列管理器,它的名称是dcmp2,端口1415,通道名c1。附带说明一下Websphere MQ也有自己的命令行工具,可以用于创建队列管理器、本地队列等。脚本cf.jacl:

代码
  1. #指定cell   
  2. set myCell zxhNode01Cell   
  3. #指定要配置的node   
  4. set myNode zxhNode01   
  5.   
  6. set jmsp [$AdminConfig getid "/Cell:$myCell/Node:$myNode/JMSProvider:WebSphere MQ JMS Provider/"]   
  7. $AdminConfig attributes MQQueueConnectionFactory   
  8. set name [list name cf]   
  9. set jndi [list jndiName mq/cf]   
  10. set description [list description 描述信息]   
  11. set transportType [list transportType CLIENT]   
  12. set queueManager [list queueManager dcmp2]   
  13. set ccsid [list CCSID 1381]   
  14. set host [list host 192.168.0.10]   
  15. set port [list port 1415]   
  16. set channel [list channel c1]   
  17. set xa [list XAEnabled true]   
  18.   
  19. set mqqcfAttrs [list $name $jndi $description $transportType $queueManager $ccsid $host $port $channel $xa]   
  20. set template [lindex [$AdminConfig listTemplates MQQueueConnectionFactory] 0]   
  21. $AdminConfig createUsingTemplate MQQueueConnectionFactory $jmsp $mqqcfAttrs $template   
  22.   
  23. $AdminConfig save  
上述脚本建立了连接工厂,别且特别指定它要支持分布式事务(二阶段提交协议)。
现在可以在这个工厂内创建队列了,脚本queue.jacl:

代码
  1. #指定cell   
  2. set myCell zxhNode01Cell   
  3. #指定要配置的node   
  4. set myNode zxhNode01   
  5.   
  6. set jmsp [$AdminConfig getid "/Cell:$myCell/Node:$myNode/JMSProvider:WebSphere MQ JMS Provider/"]   
  7. $AdminConfig attributes MQQueue   
  8. set name [list name test]   
  9. set jndi [list jndiName mq/test]   
  10. set baseQueue [list baseQueueName test]   
  11. set target [list targetClient MQ]   
  12. set baseManager [list baseQueueManagerName dcmp2]   
  13.   
  14. set mqqAttrs [list $name $jndi $baseQueue $target $baseManager]   
  15. set template [lindex [$AdminConfig listTemplates MQQueue] 0]   
  16. $AdminConfig createUsingTemplate MQQueue $jmsp $mqqAttrs $template   
  17. $AdminConfig save  
该脚本创建了一个jndi名为mq/test的队列,并且指定了它映射的WMQ本地队列是test,也指定了它映射的WMQ的队列管理器名称,这是可选的,如果不写的话,它会采用队列连接工厂的设置。需要特别说明的是,我们指定了目标客户机是MQ(它的默认值是JMS),二者的区别在于,如果是JMS的话,那么队列上保存的将是Java对象,即使你发送的是TextMessage,保存的也是一个java String对象。如果是MQ的话,保存的就是纯文本。
假设我们的应用中会有一个消息bean监听mq/test队列,那么我们就需要建立对应的消息侦听器端口(listening port)。脚本listener.jacl:

代码
  1. #指定cell   
  2. set myCell zxhNode01Cell   
  3. #指定要配置的node   
  4. set myNode zxhNode01   
  5. set myServer server1   
  6.   
  7. set server [$AdminConfig getid /Cell:$myCell/Node:$myNode/Server:$myServer/]   
  8. set mls [$AdminConfig list MessageListenerService $server]   
  9.   
  10. set new [$AdminConfig create ListenerPort $mls {{name test}{destinationJNDIName mq/test}{connectionFactoryJNDIName mq/cf}}]   
  11. $AdminConfig create StateManageable $new {{initialState START}}   
  12. $AdminConfig save  
该脚本指定了侦听器端口的名称,它对应的队列的jndi名,它对应的连接工厂的jndi名。
资源建立完成,现在部署我们的应用程序,脚本deploy.jacl:

代码
  1. set myCell zxhNode02Cell   
  2. set myNode zxhNode02   
  3. set myServer server1   
  4.   
  5. $AdminApp install "E:/DCMP2.0/code/MyApp.ear"  
  6. $AdminConfig save   
  7.   
  8. set appManager [$AdminControl queryNames cell=$myCell,node=$myNode,type=ApplicationManager,process=$myServer,*]   
  9. $AdminControl invoke $appManager startApplication MyApp  
该脚本部署了我们自己的应用程序并且启动它,基本的部署工作至此完成。上述脚本在WAS 6.0 Net Deploy和WAS6.0 Express两个版本上测试通过。
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章