这几天在做web工程的迁移,从jboss 5迁移到jboss 6.3.

在做迁移的过程中遇到了一些问题,在这里记录一下。

首先来看一下jboss5和jboss6.3的区别:

        

上面两幅目录截屏左边的是jboss5.1的,右边的是jboss6.3的,别的不多说,仅从目录便可以看出,jboss6.3使用的是模块化加载jar包的方式,并且也包含了jboss之后版本的domain和standalone两种启动方式。所以说jboss5和jboss6.3从结构上来讲其差别就是比较大的。此外,jboss6.3的配置是standalone.xml文件,避免了jboss5中混乱的配置结构。

接下来讲一下我在迁移的过程中遇到的一些问题,由于涉及到项目的保密性,所以代码部分会有所省略。

在该项目中,使用JDK1.6.

1、启动问题

在拿到jboss6.3的zip包后,第一件事便是解压,配置环境变量然后运行了,我这里使用的是standalone的启动方式,单击standalone.bat文件便可。

但是单击后出现下图所示:

     

注:-Xms:初始Heap大小,使用的最小内存 -Xmx:java heap最大值,使用的最大内存

从log中可以看出,使用的内存不够,无法创建虚拟机。

原因:jboss的版本是64位的,而我的工作环境的jdk1.6是32位的,其导致的直接结果便是无法调节内存

解决:将32位的jdk换成64位的(环境限定无法更改)

        将内存jboss启动时的内存调小(在log中显示其使用的最大和最小内存)

我使用的是第二种方法,在standalone.bat文件的附近还有一个standalone.conf.bat文件,使用记事本打开该文件,找到下图位置:

    

改变其Xms和Xmx的大小便可,我使用的是512.改完后启动成功。

  2、数据源的配置

在jboss5中,配置数据源的方式比较简单,在segment(如server下的default节点)下的lib文件夹中加入数据库驱动jar,然后在segment的deploy文件夹中添加name-ds.xml文件,jboss便可以自动配置数据源。

     而jboss6.3中,进行了模块化设计,所以与jboss的配置有所不同,配置方式可参考wildfly8+jpa EntityBean 简单入门

     在配置的过程中,原本jboss5中的-ds.xml文件中的数据源为datasource1.我一开始使用的方式为全部照抄。结果出现异常:

  1. at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_26]
  2. Caused by: javax.xml.stream.XMLStreamException: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[150,5]
  3. Message: "JBAS010471: Jndi name have to start with java:/ or java:jboss/"

     即所有的jndi都要以java:/或java:jboss/开头

     这也意味着,你的工程中的所有的数据源都将失效(┬_┬)

####注:仔细看了jboss5后,发现jboss5是可以通过jboss:datasourceName的形式访问的

3、工程中的包和jboss中的包冲突

在迁移的过程中了解到了本项目原本是用weblogic中迁移到jboss5的,现在准备迁移到jboss6.3中,在jboss5的时候需要额外的jar:weblogic

由于使用的是模块化,所以要在jboss的moudle中按规则加入jar包,然后在standalone.xml文件中配置,如下所示:

  1.     <subsystem xmlns="urn:jboss:domain:ee:1.1">
  2. <global-modules>
  3. <module name="XXX.weblogic" slot="main"/>
  4. </global-modules>
  5. <spec-descriptor-property-replacement>false</spec-descriptor-property-replacement>
  6. <jboss-descriptor-property-replacement>true</jboss-descriptor-property-replacement>
  7. <annotation-property-replacement>false</annotation-property-replacement>
  8. </subsystem>

    如果要在加jar包,则可以在global-modules节点中添加。

      以上步骤看似正确,实则给自己挖了一个大坑。运行后log中有如下提示:  

  1. 14:27:49,754 INFO [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/home]] (ServerService Thread Pool -- 58) JBWEB000264: Marking servlet DownloadServlet as unavailable
  2. 14:27:49,754 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/home]] (ServerService Thread Pool -- 58) JBWEB000289: Servlet DownloadServlet threw load() exception: java.lang.ClassCastException: XXX.XXX.XXX.core.servlet.DownloadServlet cannot be cast to javax.servlet.Servlet
  3. at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1154) [jbossweb-7.4.8.Final-redhat-4.jar:7.4.8.Final-redhat-4]
  4. at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1100) [jbossweb-7.4.8.Final-redhat-4.jar:7.4.8.Final-redhat-4]

     百度的结果为:这个异常很常见,应该是你导入的jsp的jar包和servlet的jar包重复导致的冲突

     表示走入死胡同,所有的都检查了,就是没有想到我之前导入的weblogic包。。。最后在大神的帮助下,找到了这个问题,分分钟解决

 

 4、配置文件问题

   原本在jboss5中,除了部署工程之外,还需要在jboss下segment中的conf文件夹中添加一份配置文件:conf.properties

而在jboss6中,segment中只有configuration文件夹,没有conf文件夹,所以我暂时将文件放在了configuration中。

     启动jboss6后,出现异常:

  1. 07:01:24,966 ERROR [WebAppListener] (ServerService Thread Pool -- 52) E/2016.03.28 at 07:01:24|java.io.FileNotFoundException: null\conf\config.properties (The system cannot find the path specified): xx.xx.xx.xx.ConfigurationException: java.io.FileNotFoundException: null\conf\config.properties (The system cannot find the path specified)

这段log,是由程序中的logging打印出来的,从这段log中可以看出是找不到配置文件,并且其中的地址还很神奇的出现了一个null,我首先尝试将配置文件放到我自己创建的在standalone中的一个conf文件夹中,但还是会报这个错误,所以看代码(简写):

  1. final String serviceInstance = System.getProperty("jboss.server.home.dir") + “/conf/conf.properties";

在log中的null就是应为 System.getProperty("jboss.server.home.dir") 导致,百度之后,发现"jboss.server.home.dir"JBOSS自带环境变量,其表示的方式为:  jboss.server.home.dir:D:\Tools2\EclipsePlugin\JBoss\jboss-5.1.0.GA\server\segment

解决方法为:在standalone.xml中,添加定义,我这里使用的是一种比较简单的方式:

    首先命令行cd到standalone.bat目录,然后输入:

  1. standalone.bat -Djboss.server.home.dir=D:\Tools2\EclipsePlugin\JBoss\jboss-eap-6.3\standalone

这样一来,在jboss启动的时候便设置好了变量,那么程序中就可以获取到变量的值了。

  5、数据库驱动问题

在上文中已经添加好了数据库连接池,但是在启动的时候,会出现一个异常:

  1. 09:55:06,936 INFO [] (ServerService Thread Pool -- 54) O/2016.03.28 at 09:55:06| ..[0]
  2. | JdbcConf.setConnProperties fukey_DbPool=java:jboss/datasources/dbpool connProperties=[{fukey_DbPool=java:jboss/datasources/dbpool}]
  3. 09:55:06,936 ERROR [stderr] (ServerService Thread Pool -- 54) javax.naming.NameNotFoundException: Error looking up jboss/datasources/dbpool, service service jboss.naming.context.java.jboss.datasources.dbpool is not started
    .......
    service jboss.jdbc-driver.jtds (missing) dependents: [service jboss.data-source.java:jboss/datasources/dbpool, service jboss.driver-demander.java:jboss/datasources/dbpool1, service jboss.driver-demander.java:jboss/datasources/dbpool2, service jboss.driver-demander.java:jboss/datasources/dbpool3, JBAS014799: ... and 17 more ]

    这里的log分为两部分,上一部分描述的是在启动国过程中调用jndi时发现,数据源没有启动;下一部分讲的是没有找到驱动包。

在该工程中,使用的数据库驱动是jtds包,连接的是sqlserver,数据源的配置我是按照文档中的示例改写的,所以一直以为是对的,下面是在standalone.xml中添加的驱动:

  1. <drivers>
  2.   <driver nam e="h2" module="com.h2database.h2">
  3.     <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
  4.   </driver>
  5.   <driver nam e="jtds" module="net.sourceforge">
  6.     <xa-datasource-class>net.sourceforge.jtds.jdbc.Driver</xa-datasource-class>
  7.   </driver>
  8. </drivers>

上面的就是,没有改过的,第一个驱动是jboss自带的h2,第二个是我自己写的jtds,由于我之前做过jboss8配置mysql的数据源,也是使用驱动做的配置,并且连接是成功的,所以下意识的认为这也是可以的,后来在一篇国外的博客中发现,在驱动的配置中,除了<xa-datasource-class>这个标签之外,还有<driver-class>标签,专门用于Driver类型的一个标签,这个标签我也查了一下jboss6的开发文档,有写,但只是在一个表格中提了一下,没有示例容易忽略

将其改为:

  1. <drivers>
  2.   <driver nam e="h2" module="com.h2database.h2">
  3.     <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
  4.   </driver>
  5.   <driver nam e="jtds" module="net.sourceforge">
  6.     <driver-class>net.sourceforge.jtds.jdbc.Driver</driver-class>
  7.   </driver>
  8. </drivers>

便可以连接成功。

***未解决:如何将4中的变量复制写入standalone.bat文件或是run.bat

  以上就是我在做迁移的时候遇到的几个比较深刻的问题。

由于要配置jboss6.3,这里给一个jboss6的技术文档

web工程迁移---jboss5迁移到jboss6的更多相关文章

  1. web工程迁移---weblogic8迁移到jboss5遇到的异常

    原有的web工程是在weblogic8上运行的,但现在的要求是要运行到jboss5中,为如后迁移到更高版本的jboss做准备 由于我对weblogic没有过研究,所以之前的步骤都是有别人进行的,在进行 ...

  2. 将Web站点由IIS6迁移至IIS7

    最近开始着手逐步将所有的Web站点由Win2003+IIS6迁移至64位Win2008+IIS7,基本还算顺利.这里就把相关内容整理总结一下.首先自然是要安装基本运行环境,包括iis,.net fra ...

  3. 将集群WEB节点静态数据迁移到共享存储器(LNMP环境)

    系统版本:Centos 6.5 机器及IP规划如下: 192.168.0.117  MySQL 192.168.0.118  nginx+php 192.168.0.123  nfs ①在NFS机器上 ...

  4. 词频统计Web工程

    本次将原本控制台工程迁移到了web工程上.. 需求: 1.把程序迁移到web平台,通过用户上传TXT的方式接收文件: 2.在页面上给出链接 (如果有封皮.作者.字数.页数等信息更佳)或表格,展示经典英 ...

  5. Saiku数据库迁移H2迁移到Mysql(二十二)

    Saiku数据库迁移H2迁移到Mysql Saiku默认使用H2数据库来存储saiku的用户与角色信息,我们可以根据角色来做saiku的权限控制,然后将角色分配给用户 ,该用户就会有对应的约束了! 由 ...

  6. 使用Eclipse创建Maven Web工程

    方法/步骤 1 使用Eclipse创建Maven Web工程 2 找到Maven Project,点击Next 3 勾选上Create a simple project (不使用骨架),Next 4 ...

  7. web工程常用路径的获取方法

    此文章是基于 搭建SpringMVC+Spring+Hibernate平台 一. 利用 Spring 取得web工程根路径 1. web.xml 中添加如下: <context-param> ...

  8. 项目自动化建构工具gradle 入门5——在intellij中做一个gradle的web工程

    之前的几个小节,都是纯手工建文件夹,纯手工拷贝war包,或者纯手工解压个zip看看结果,,,,这还是我写了玩的helloWorld.若是玩大工程.几十个人的团队协同开发时,这么玩,,,,暴躁的程序员估 ...

  9. 在Web工程中引入Jquery插件报错解决方案

    在学习Jquery插件的时候,遇到一个问题就是新建web工程后在WebRoot下引入Jquery插件的时候报错,不知道为什么好纠结,但是项目能正常运行,后来找到解决方案,在这里给大家分享一下. 解决方 ...

随机推荐

  1. fPLL结构及动态配置

    输入参考时钟 从上图可以看到参考时钟输入的几种类型.   注意:fPLL的校正是由CLKUSR来驱动的,这个时钟必须要保持稳定. 参考时钟利用器     N计数器 N计数器会把参考时钟利用器输出进行分 ...

  2. JAVA所属公司与非盈利组织

    版权     现在是Oracle公司的   Apache     负责Java发展的,重要的非盈利组织,主要产品包括Struts.Tomcat    

  3. (最长上升子序列 并记录过程)FatMouse's Speed -- hdu -- 1160

    http://acm.hdu.edu.cn/showproblem.php?pid=1160 FatMouse's Speed Time Limit: 2000/1000 MS (Java/Other ...

  4. 修改linux swap空间的swappiness,降低对硬盘的缓存

    linux 会使用硬盘的一部分做为SWAP分区,用来进行进程调度--进程是正在运行的程序--把当前不用的进程调成‘等待(standby)‘,甚至‘睡眠(sleep)’,一旦要用,再调成‘活动(acti ...

  5. hdu 2642

    这题应该就是标准的二维树状数组,应该没什么难度 处理一下x,y等于0的情况就过了 #include <iostream> #include <cstdio> #include ...

  6. 通过mybatis向数据库中插入日期数据

    遇到的问题: 通过mybatis向数据库中插入日期格式数据,发现只有年月日, 没有小时分钟和秒 当你想在实体类中使用java.util.Date类型,而且还想在数据库中保存时分秒时, 解决办法: 你可 ...

  7. Java学习---- 数组的引用传递

    1. public class ArrayRefDemo01{ public static void main(String args[]){ int temp[] = {1,3,5} ; // 利用 ...

  8. 用 select 语句实现递归的方法

    with Test_Recursion(Id,ParentId)AS(select Id,ParentId  from [V_KPI_DetailsActivities] where ParentId ...

  9. Ocelot——初识基于.Net Core的API网关

    前言 前不久看到一篇<.NET Core 在腾讯财付通的企业级应用开发实践>,给现在研究.Net Core及想往微服务方向发展的人来了一剂强心针.于是我也就立刻去下Ocelot的源码及去阅 ...

  10. ELK冷热数据分离

      通常情况下,我们使用ELK日志分析平台最常用的数据时间为1周或一个月(因业务场景不同,可能存在差别),时间比较长的数据没有特殊情况可能我们就没有必要再进行查询了,但是因业务需求或者作为凭证,这些日 ...