JBoss学习和应用

2010年11月15日  blxt项目相关


 

最近项目要求把tomcat中开发的项目研究发布到一个更加强大的web服务器,我做了一些调查,选择了与tomcat的一条路线的jboss.原因主要是jboss的开源和免费,当然据说tomcat到jboss更加容易上手。这个过程对jboss有了一些了解和认识,当然现在只是发布和运行成功了。对于jboss还有很多东西也还是不明白,毕竟现在只是一个纯的web项目,没得j2ee的ejb,分布式的东西。现在就自己的学习和实践结果总结一下。

一、jboss服务器的安装:

在官网上下载,有很多版本。这里选择的是JBoss-5.1.0.GA(jdk1.6版本)。只需要解压就可以了,需要配置jdk,jboss的环境变量,网上有很多资源,这里不详细说了。

Jboss通常占用的端口是1098,1099,4444,4445,8080,8009,8083,8093这几个,

默认端口是8080:

在windows系统中:

 1098、1099、4444、4445、8083端口在/jboss/server/default/conf/jboss-service.xml中

 8080端口在/jboss-5.1.0.GA/server/default/deploy/jbossweb.sar中。

Xml代码

  1. <!-- A HTTP/1.1 Connector on port 8080 -->  
  2.     <Connector port="8080" address="${jboss.bind.address}"  
  3.        maxThreads="250" strategy="ms" maxHttpHeaderSize="8192"  
  4.        emptySessionPath="true"  
  5.        enableLookups="false" redirectPort="8443" acceptCount="100"  
  6.        connectionTimeout="20000" disableUploadTimeout="true"/>  
   <!-- A HTTP/1.1 Connector on port 8080 -->
       <Connector port="8080" address="${jboss.bind.address}"
          maxThreads="250" strategy="ms" maxHttpHeaderSize="8192"
          emptySessionPath="true"
          enableLookups="false" redirectPort="8443" acceptCount="100"
          connectionTimeout="20000" disableUploadTimeout="true"/>

把里面的8080改为80。JBOSS启动之后就可以用http://localhost/访问。

访问的ip(address):

JBOSS 4.2以上版本服务启动如果不加任何参数的话,只监听127.0.0.1,就是说只能用127.0.0.1或者localhost访问,用本机的对外地址 访问不了,同一网络内别的机子没法访问。除非你用参数-b ip地址 来绑定监听的地址才可以。
这和以前版本的JBOSS不一样,以前版本的不加任何参数是监听本机所有的IP地址,现在必须使用参数-b 0.0.0.0才可以监听全部地址。

======================================
1.
附,以下是具体解决方法:
在jboss-4.2.2.GA/bin目录下,新建start.bat文件,录入如下内容:
run.bat -b 0.0.0.0
保存即可。使用你新制作的start.bat文件启动服务之后就可以IP访问了。
======================================
2.
找到JBOSS_HOME的/server/default/deploy/jboss-web.deployer/server.xml文件,

找到

Xml代码

  1. <!-- A HTTP/1.1 Connector on address 8080 -->  
  2.        <Connector port="8080" address="${jboss.bind.address}"  
  3.           maxThreads="250" strategy="ms" maxHttpHeaderSize="8192"  
  4.           emptySessionPath="true"  
  5.           enableLookups="false" redirectPort="8443" acceptCount="100"  
  6.           connectionTimeout="20000" disableUploadTimeout="true"/>  
<!-- A HTTP/1.1 Connector on address 8080 -->
       <Connector port="8080" address="${jboss.bind.address}"
          maxThreads="250" strategy="ms" maxHttpHeaderSize="8192"
          emptySessionPath="true"
          enableLookups="false" redirectPort="8443" acceptCount="100"
          connectionTimeout="20000" disableUploadTimeout="true"/>


将其中的${jboss.bind.address}改为0.0.0.0

 

在myEclipse中的配置,如tomcat,在myEclipe/server中配置jboss 5x项目,jdk要配置上相应版本。

二、项目的环境:

服务器:
tomcat 6.0
JBoss-5.1.0.GA(jdk1.6版本):
删除D:/jboss-5.1.0.GA-jdk6/jboss-5.1.0.GA/server/default/deploy/blxt.war/WEB-INF/lib下面的:
xml-apis-1.0.b2.jar;xercesImpl-2.6.2.jar;xmlparserv2.jar;
javax.servlet.ServletException: OncePerRequestFilter just supports HTTP requests:
解决了,删除应用的lib下的几个jar包:servlet-api.jar相关的包 (geronimo-servlet_2.5_spec-1.2.jar jsp-api.jar)
clob类型长度大于最大值(一系列数据库问题):换用oracle驱动(Oracle_10g_10.1.0.2_JDBC_ojdbc14.jar),删除commonlib.jar(lib下的,不是client下面的)
发布的时候,将start.bat 放在/JBoss-5.1.0.GA/bin 目录下面。
java环境:
jdk6.0
数据库环境:
oracle 10g

 

三、实践相关

(1)直接用myEclipe6.0发布项目:

     (这里代码没有什么变化,还是spring管理bean的生成和事务、连接池)

     由于是在tomcat开发之后部署的时候迁移到jboss中的,所以会遇到很多问题。开始用myEclipst直接部署项目,就遇到了许多包的问题,通过网上查资料和自己的分析思考基本都得到解决。可以参看上面的项目环境,当然这有一定的局限性。思想是最重要的,遇到问题先要分析,可以上网去找,然后再分析。其中有oracle驱动的问题让我郁闷了很久,由于用到了大文本(clob),要用oracle新的驱动包,在tomcat中加了这个满足要求的包,但是到了jboss中又出现大文本的问题,又换了n多包都不行。这个时候看到了网上用jndi的配置,就转到了这个方向(参考下面的jndi)。结果了,折了一大圈又回来。spring的事务对jndi的支持不够(项目中用到了spring管理bean的生成和事务),如果强行换成那样,代码就要做很多修改,而我想的就是尽量不修改代码。快要崩溃了,结果偶然发现了,去掉那个oracle驱动也能运行。呵呵,沿着这个终于找到了,apache的commonlib.jar带有oracle的驱动包,在tomcat的中选择的是我加入的包,但是在jboss中就变成随机的了。把commonlib.jar干掉了,ok!当时很激动啊,这两天被折磨的哟。

(2)用jboss的jndi,初始化spring的dataSource.

     由于oracle包的问题走到了这里,以前没有了解过jndi的东西,这里自己的研究也学了不少东西。jboss的可以配置多个数据源,这就为分布式和ejb提供了基础,当然也包括分布式事务(jta).

jboss的jndi配置:

配置步骤开始:将部署到TOMCAT中的工程文件夹(blxt)名称改为blxt.war;将部署到TOMCAT中的工程文件夹(blxt)名称改为blxt.war;

 配置步骤1 . 由于jboss会自动查找server/default/deploy目录下的 **-ds.xml文件.并读取其中内容.来得到相应的DataSource,我的文件具体内容如下: 

oracle-ds.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!-- ===================================================================== -->
<!--                                                                       -->
<!--  JBoss Server Configuration                                           -->
<!--                                                                       -->
<!-- ===================================================================== -->

<!-- See http://www.jboss.org/community/wiki/Multiple1PC for information about local-tx-datasource -->
<!-- $Id: oracle-ds.xml 88948 2009-05-15 14:09:08Z jesper.pedersen $ -->
<!-- ==================================================================== -->
<!--  Datasource config for Oracle originally from Steven Coy             -->
<!-- ==================================================================== -->
<datasources>
 <local-tx-datasource>
  <jndi-name>blxtORCLDS</jndi-name>
  <use-java-context>false</use-java-context>
  <connection-url>jdbc:oracle:thin:@192.168.10.130:1521:oradb</connection-url>
  <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
  <user-name>blxt</user-name>
  <password>blxt</password>
  <min-pool-size>50</min-pool-size>
  <max-pool-size>200</max-pool-size>
  <blocking-timeout-millis>5000</blocking-timeout-millis>
  <idle-timeout-minutes>2</idle-timeout-minutes>
  <metadata>
   <type-mapping>Oracle10g</type-mapping>
  </metadata>
 </local-tx-datasource>
 <!-- 无用,可以配置多种多个 -->
 <local-tx-datasource>
  <jndi-name>Z</jndi-name>
  <use-java-context>false</use-java-context>
  <connection-url>jdbc:oracle:thin:@10.1.1.1:1521:z</connection-url>
  <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
  <user-name>z</user-name>
  <password>z</password>
  <min-pool-size>50</min-pool-size>
  <max-pool-size>200</max-pool-size>
  <blocking-timeout-millis>5000</blocking-timeout-millis>
  <idle-timeout-minutes>2</idle-timeout-minutes>
  <metadata>
   <type-mapping>Oracle9i</type-mapping>
  </metadata>
 </local-tx-datasource>
</datasources>

配置步骤2 . 在工程/server/default/blxt.war中web.xml文件所在位置增加jboss-web.xml文件,内容如下:

jboss-web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
    <resource-ref>
        <res-ref-name>blxtORCLDS</res-ref-name>
        <jndi-name>blxtORCLDS</jndi-name>
    </resource-ref>
 <!-- 未用的 -->
 <resource-ref>
        <res-ref-name>orclZ</res-ref-name>
        <jndi-name>Z</jndi-name>
    </resource-ref>
</jboss-web>
配置步骤3 . web.xml下面配置:

blxt的web-info:web.xml文件中添加:

<!-- jboss部署需要 -->
 <resource-ref id="blxtORCLDS">
   <res-ref-name>blxtORCLDS</res-ref-name>
   <res-type>javax.sql.DataSource</res-type>
   <res-auth>Container</res-auth>
  </resource-ref>

配置步骤4 . 在spring中得到数据源:

<!-- jboss用  -->
 <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
   <property name="jndiName">
   <value>blxtORCLDS</value>
   </property>
  </bean>

到此配置完成,但是由于spring对jndi事务的支持不足,还有这种配置多用于分布式事务,这种方式在这里(纯的、代码已经确定的项目)显得不合理。

这里暂时选择了第一种发布方式。事务和连接池都交给项目管理,在spring中配置。

暂时总结如上,当然以后的学习过程也就是我的完善过程。……

 

2010年11月15日  blxt项目相关


 ……

 

 

 

参考主要文章:

jboss与tomcat使用经验:http://www.77169.com/classical/HTML/39445.html

Jboss与tomcat区别:http://tech.sina.com.cn/h/2008-09-19/1208811039.shtml

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值