应用服务器的差异

阅读(6076) 标签: 服务器差异,

不同的应用服务器,在部署上会有差异,主要表现在:数据源jndi的前缀、jdk的版本、对中文的支持、servlet的版本等等,下面分别讲解:

jndi 的前缀

常见应用服务器的前缀如下表所示:

服务器

Tomcat

Websphere/Weblogic

resin

Jboss

JNDIPrefix

java:comp/env

java:comp/env

Java:

一般来说,如果数据源的配置核对无误,仍连不上数据库,可以考虑前缀是否正确。

注意

(1) 在报表中连接JbossJNDI数据源,有时会报如下错误:

12:51:03,230 警告  [javax.enterprise.resource.webcontainer.jsf.config] (MSC service thread 1-3) javax.naming.NamingException: Failed to create remoting connection [Root exception is java.lang.RuntimeException: Operation failed with status WAITING]: javax.naming.NamingException: Failed to create remoting connection [Root exception is java.lang.RuntimeException: Operation failed with status WAITING]

  at org.jboss.naming.remote.client.ClientUtil.namingException(ClientUtil.java:36) [jboss-client.jar:7.1.1.Final]

  at org.jboss.naming.remote.client.InitialContextFactory.getInitialContext(InitialContextFactory.java:121) [jboss-client.jar:7.1.1.Final]

  at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:684)

解决办法

对于Jboss7.1.1的版本需下载jbossall-client.jar,如Jboss版本不同需自行查找与之对应的这个jar。下载后将jar放入应用类路径下,重启服务即可。

中文的支持

不同的应用服务器,对中文的支持略有不同,例如Tomcat4Tomcat5就有区别,此时如果参数是程序员自己接收并传递给tag标签的,要记得转码,尤其是报表模板文件名,否则容易出现莫名其妙的错误,如报表模板找不到等。

 

websphere,对中文的支持也比较差,打war包时不能有中文名的文件,web.xmlraqsoftConfig.xml文件中所有中文注释要删掉,且web.xmlraqsoftConfig.xml中的第一句关于文件字体的定义要写成UTF-8,如下所示:

<?xml version="1.0" encoding="UTF-8"?>

servlet 的版本

一般由于servlet的版本导致的错误很少见,润乾报表支持的servlet版本是servlet2.3,低于此版本servlet就不支持。一般来说比较早期的应用服务器,其servlet版本比较低,可能会低于servlet2.3

 

我们目前为止仅仅遇到过websphere4.0,其servlet版本比较低,但是也有解决办法,就是把websphere5.0里的相关jar包拷贝过去替换掉,即可解决问题,websphere4.0本身往高版本兼容。

JIT 的问题

websphere中使用润乾报表,多次访问同一张报表有时会出现空指针的错误例如:

[2015-07-08 10:15:57] [ERROR]: java.lang.NullPointerException

[2015-07-08 10:15:57] [DEBUG]:开始生成html......

[2015-07-08 10:15:57] [ERROR]:error

java.lang.NullPointerException

at com.raqsoft.report.view.html.HtmlCell.getStyle(HtmlCell.java(Compiled Code))

at com.raqsoft.report.view.html.HtmlReport.generateHtml(HtmlReport.java(Compiled Code))

at com.raqsoft.report.view.html.HtmlReport.generateHtml(HtmlReport.java:200)

at com.raqsoft.report.tag.HtmlTag.doStartTag(Unknown Source:730)

at com.ibm._jsp._002._jspx_meth_report_html_0(_002.java:110)

此问题是由于JVMJIT 引起的 。我们禁用掉webserverJIT此问题即可解决。

常见的解决方法:

Windows 下的Websphere

1.  禁用websphereJIT进入WebSphere的管理控制台,打开“应用服务器”>server1“进程定义”.进入“Java虚拟机”,选中“禁用 JIT”,然后重新启动websphere。此方法简单,但禁用JIT后性能比较差,对于一些对性能要求比较高的不适用。

2.  设置JITC_COMPILEOPT选项跳过JIT与润乾报表有冲突的方法

进入was安装目录 \IBM\WebSphere\AppServer\bin\setupCmdLine.bat

SET JITC_COMPILEOPT=COMPILING;SKIP{com/raqsoft/report/view/html/HtmlCell}{getStyle}

添加到setupCmdLine.bat重启websphere即可。

Windows系统中设置JITC_COMPILEOPT选项时需注意的问题

1.  was安装目录 \IBM\WebSphere\AppServer\bin\setupCmdLine.sh中设置

2.  设置时不用加set;COMPILING后一定要用冒号,不能用分号。

JITC_COMPILEOPT=COMPILING:SKIP{com/raqsoft/report/view/html/HtmlCell}{getStyle}

注意:设置完JIT的相关属性后,需要重起操作系统才会生效。