不同的应用服务器,在部署上会有差异,主要表现在:数据源jndi的前缀、jdk的版本、对中文的支持、servlet的版本等等,下面分别讲解:
常见应用服务器的前缀如下表所示:
服务器 |
Tomcat |
Websphere/Weblogic |
resin |
Jboss |
JNDIPrefix |
java:comp/env |
无 |
java:comp/env |
Java: |
一般来说,如果数据源的配置核对无误,仍连不上数据库,可以考虑前缀是否正确。
注意:
(1) 在报表中连接Jboss中JNDI数据源,有时会报如下错误:
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放入应用类路径下,重启服务即可。
不同的应用服务器,对中文的支持略有不同,例如Tomcat4和Tomcat5就有区别,此时如果参数是程序员自己接收并传递给tag标签的,要记得转码,尤其是报表模板文件名,否则容易出现莫名其妙的错误,如报表模板找不到等。
websphere,对中文的支持也比较差,打war包时不能有中文名的文件,web.xml和raqsoftConfig.xml文件中所有中文注释要删掉,且web.xml和raqsoftConfig.xml中的第一句关于文件字体的定义要写成UTF-8,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
一般由于servlet的版本导致的错误很少见,润乾报表支持的servlet版本是servlet2.3,低于此版本servlet就不支持。一般来说比较早期的应用服务器,其servlet版本比较低,可能会低于servlet2.3。
我们目前为止仅仅遇到过websphere4.0,其servlet版本比较低,但是也有解决办法,就是把websphere5.0里的相关jar包拷贝过去替换掉,即可解决问题,websphere4.0本身往高版本兼容。
在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)
此问题是由于JVM的JIT 引起的 。我们禁用掉webserver的JIT此问题即可解决。
常见的解决方法:
Windows 下的Websphere
1. 禁用websphere的JIT进入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的相关属性后,需要重起操作系统才会生效。