电子表格FineReport教程:[7]Weblogic服务器
1、操作系统
Windows、Linux、Unix操作系统。
Linux、Unix下的Weblogic管理控制台和Windows下的界面是一样的,即实现步骤是一样的,所以下面我们以Windows系统下的实现做介绍。
2、实现步骤
以下示例环境为Windows7+Weblogic10+jdk 1.7,其他版本步骤基本相同,可能每个版本功能位置不同,希望大家能够谅解,仔细找找所在的位置。
3、复制目录
拷贝FineReport安装目录下的WebReport文件夹至服务器(Weblogic所在的服务器)任意目录,如服务器的C:\ WebReport。
4、Weblogic部署FineReport应用
启动服务器,选择左边的部署菜单,点击右侧的安装按钮进行部署,如下图:
5、调整至FineReport部署位置,即C:\WebReport,选定WebReport,点击“下一步”:
6、选择默认的定位方式不变(将此部署安装为应用程序),“下一步”:
使用默认设置直接点击“完成”(也可根据需求点击“下一步”逐步进行设置):
注:在部署weblogic过程中,无需更改编码方式,FineReport在定义数据连接时已经对编码进行了处理。
7、点击左侧的“激活更改”按钮进行提交:
8、看到“激活所有更改。不需要重新启动”信息时,表示我们已经部署完毕了。选择刚部署的应用>启动:
9、检测是否部署成功
打开浏览器,在地址栏输入http://localhost:7001/WebReport/ReportServer,能成功看到部署成功页面,则表明FineReport应用部署Weblogic成功:
1、 weblogic12.1.1部署问题
按照weblogic服务器部署的步骤对weblogic12.1.1进行部署,会出现部署不成功的现象。
2、 解决方案
更改或删除%WebReport%/WEB-INF/lib目录下的db2jcc.jar文件即可部署成功。
3、weblogic部署类冲突
部署好weblogic之后,启动项目,报错如下:
Root cause of ServletException.
java.util.ServiceConfigurationError: javax.xml.ws.spi.Provider: Provider weblogi
c.wsee.jaxws.spi.WLSProvider could not be instantiated: java.lang.ClassCastExcep
tion
at java.util.ServiceLoader.fail(ServiceLoader.java:207)
at java.util.ServiceLoader.access$100(ServiceLoader.java:164)
at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:353)
at java.util.ServiceLoader$1.next(ServiceLoader.java:421)
at javax.xml.ws.spi.Provider.getProviderUsingServiceLoader(Provider.java
:146)
Truncated. see log file for complete stacktrace
Caused By: java.lang.ClassCastException
at java.lang.Class.cast(Class.java:2990)
at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:345)
at java.util.ServiceLoader$1.next(ServiceLoader.java:421)
at javax.xml.ws.spi.Provider.getProviderUsingServiceLoader(Provider.java
:146)
at javax.xml.ws.spi.Provider.provider(Provider.java:106)
Truncated. see log file for complete stacktrace
>
4、报错原因
由于进行系统集成时引起的类冲突。
5、解决方案
由于fr-third-7.0.jar包中的xml引起的冲突,删掉third包中的javax/xml/namespace/QName即可。
6、Weblogic部署到Linux下报错
问题描述
weblogic11g部署到linux服务器下,服务器jdk版本为jdk1.6,报错Could not initialize class sun.java2d.Disposer
7、解决方案
给虚拟机指定参数
-Dsun.java2d.noddraw=true
1、部署好weblogic之后,由于服务器下运行的程序过多的时候,由于内存默认值太小,内存可能会溢出,造成假死的状况,那么就需要修改weblogic的内存访问机制,扩大默认内存。如何修改呢?您可能还想为了方便使用,需要更改服务器的端口号,而不是使用服务器的默认端口号,那么这个又如何修改呢?下面详细介绍weblogic服务器下内存的配置和端口号修改的方法。
2、打开控制台
启动服务器,打开weblogic管理控制台。
3、修改端口号
进入管理控制台之后,在域结构里选择环境>服务器,进入examplesServer管理,然后在监听端口处修改端口号,比如说weblogic的默认端口号是7001,可以在此处将7001进行修改。如下图:
修改端口号之后要记得激活修改才能生效。
4、修改commEnv.cmd文件的内存配置
安装好weblogic之后,在安装目录bea\wlserver_10.0\common\bin下找到commEnv.cmd文件,用编辑的方式打开,修改如下图所示的部分内存代码。
5、将上图中标识出来的内存配置的大小修改成您想要的大小即可,如下图:
注:在这个配置文件里有两个JVM内存的设置,分别是weblogic内置的一个虚拟机和本机的几个虚拟机,要看weblogic用的是哪个的,才知道修改哪个有效,默认是使用的sun的JVM。建议全部修改保持一致性。
6、修改setDomainEnv.cmd文件的代码
在安装目录bea\user_projects\domains\XXX_domain\bin下找到setDomainEnv.cmd文件,代码修改如下:
set MEM_ARGS=-Xms512m -Xmx1024m
set MEM_PERM_SIZE=-XX:PermSize=128m
set MEM_MAX_PERM_SIZE=-XX:MaxPermSize=256m
7、查看效果
经过上面的两个步骤的修改,weblogic的内存配置已经修改过来了,启动weblogic的时候就可以看到您的内存情况。
weblogic可以设置-Xms(最小使用内存) -Xmx(最大使用内存),-XX:MaxPermSize。最大使用内存:对于UNIX而言,一般不应超过物理内存的75%; 对于Windows, 一般不应超过物理内存的50%; -XX:MaxPermSize 一般应为ms(最大使用内存)的一半。
1、描述
通过weblogic部署我方报表应用,在使用过程中可能会出现一些相关于类冲突的报错信息,这一类问题该如何解决呢?
2、报错信息
报错1
java.lang.NoClassDefFoundError: com/sun/xml/stream/XMLReaderImpl
报错类:%weblogic_home%/bea/modules目录下的glassfish.jaxws.sjsxp_2.0.1.jar。
3、报错2
Weblogic8.1部署WebReport工程时的报错:
Error 500--Internal Server Error
java.lang.NoSuchMethodError: javax.xml.namespace.QName.getPrefix()Ljava/lang/String;
at com.sun.xml.stream.events.XMLEventAllocatorImpl.fillAttributes(XMLEventAllocatorImpl.java:186)
at com.sun.xml.stream.events.XMLEventAllocatorImpl.getXMLEvent(XMLEventAllocatorImpl.java:78)
at com.sun.xml.stream.events.XMLEventAllocatorImpl.allocate(XMLEventAllocatorImpl.java:54)
at com.sun.xml.stream.XMLEventReaderImpl.nextEvent(XMLEventReaderImpl.java:87)
at com.fr.base.xml.XMLableReader.readXMLObject(XMLableReader.java:237)
at com.fr.report.io.core.IOHelper.generateTemplate(IOHelper.java:276)
at com.fr.report.io.TemplateImporter.generate(TemplateImporter.java:16)
at com.fr.web.core.SessionIDInfor$EmbeddedTpl.gen(SessionIDInfor.java:1568)
at com.fr.web.core.SessionDealWith.generateSessionID(SessionDealWith.java:214)
at com.fr.web.core.ReportletDealWith.dealWithReportlet(ReportletDealWith.java:35)
at com.fr.web.core.ReportDispatcher.checkAppServerConfig(ReportDispatcher.java:1183)
at com.fr.web.core.ReportDispatcher.dealWithRequest(ReportDispatcher.java:285)
at com.fr.web.ReportServlet.doGet(ReportServlet.java:169)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1053)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:387)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:305)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6310)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3622)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2569)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
报错类:jaxrpc.jar。
4、报错3
weblogic9部署WebReport工程时的报错:
[Fatal Error] :-1:-1: Premature end of file.
Aug 16, 2011 2:49:55 PM com.fr.base.FRContext getScheduleManager
WARNING: XML??????
com.fr.web.ReportletException: XML??????
at com.fr.base.core.BaseCoreUtils.parseXML(Unknown Source)
at com.fr.base.core.BaseCoreUtils.parseXML(Unknown Source)
at com.fr.base.XMLFileManager.readInputStreamXML(Unknown Source)
at com.fr.base.FRContext.getScheduleManager(Unknown Source)
at com.fr.web.ReportServlet.init(Unknown Source)
at weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(St
ubSecurityHelper.java:278)
5、报错4
weblogic10.0.3或weblogic10.3.1部署WebReport工程时的报错:
java.lang.ClassCastException: com.sun.xml.stream.ZephyrParserFactory cannot be cast to javax.xml.stream.XMLInputFactory
报错类:fr-third-xx.jar
6、报错原因
这一类报错是由于类重用导致即类冲突,因为FineReport使用了一些第三方的插件跟weblogic里面的插件相同,但是插件版本不同(不同版本间方法的个数与实现可能不同),相同的插件只会加载一个版本,而weblogic会优先加载weblogic自身的类,如果加载了weblogic中使用的版本,当报表端使用到该第三方插件时就可能会因为找不到某些类而报如上的错误。
7、解决方案
解决的主要思想就是修改加载顺序,使之优先加载FineReport中的类,即使正确的jar包先于weblogic.jar加载,在%/WebReport%/WEB-INF文件夹下新建weblogic.xml配置文件,让服务器优先调用报表工程下的jar包,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN" "http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd">
<weblogic-web-app>
<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
</weblogic-web-app>
1、 问题描述
报表部署至weblogic 10.3服务器,打开报表的时候报错,信息类似如下:
<Error> <HTTP> <BEA-101020> <[weblogic.servlet.internal.WebAppServletContext@1324b17 - appName: 'WebReport', name: 'WebReport',
context-path: '/WebReport', spec-version: '2.5'] Servlet failed with Exception
java.lang.IllegalArgumentException: Bad date header: 'Tue, 27 Mar 2012 06:38:14
GMT'
at weblogic.servlet.internal.ServletRequestImpl.getDateHeader(ServletReq
uestImpl.java:983)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run
(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecuri
tyHelper.java:125)
Truncated. see log file for complete stacktrace
>
2、解决方案
在weblogic bin/setDomainEnv.cmd中找到只有set JAVA_OPTIONS=%JAVA_OPTIONS%这一句的一行,然后在改行下面添加一句:
set JAVA_OPTIONS=%JAVA_OPTIONS% -Duser.country=US -Duser.language=en即可。
1、问题描述
当以war包部署发布报表工程时,会出现以下几个问题:首先,进行远程设计时,无法读取远程工作目录,也不无法远程平台修改文件;其次,当部署2个或者2个以上war包时,自动生成finedb会在同一目录下,会导致两个war包不能同时使用,报lck错误;最后,无法修改数据连接,重启服务器之后,以前修改的数据连接失效,并且,resource文件夹下面的xnl文件将会变的不可编辑。
2、 解决思路
第一次部署时, 对于war包内资源文件,如xx.xml,findb等,解压到临时目录, 之后系统读取写入资源文件都在临时目录中进行,不再对war包中的文件进行操作,并且在管理系统,系统监控,系统状态中加一个tab“配置文件检测”表明临时文件目录位置。
临时目录位置为:用户名/.FineReport70/工程名,其中工程名默认为WebReport。由于临时目录位置是通过java调用不同系统提供的api来生成的目录,故目录位置不可更改。
未部署war包时的配置文件路径如下,部署方式显示为非压缩部署:
3、单个war包部署—WebReport.war
将报表工程压缩为WebReport.war,部署至weblogic下面。
效果查看
打开管理平台,在管理系统>系统监控>系统状态,配置文件检测下可以查看到war包部署之后的效果,部署方式为压缩部署,配置文件路径即临时目录文件路径为:C:\Documents and Settings\Administrator\.FineReport71/WebReport,如下:
4、多个war包部署
在单个war包部署的基础上,再部署一个war包WebReport1.war。
注:由于部署了多个war包,则会用到多个临时目录文件,那么就必须去别名,否则就会由于只有一个默认目录名称而导致冲突。
更该临时目录名称
用户在每个war包对应的/WEB-INF/resources下添加warpath.xml文件,在文件中写入当前war包部署后将要存放配置文件临时目录名称。warpath.xml文件可以在打war包前添加,也可以打好war包后用winrar放进去。
如下图,我们在warpath.xml中输入下面内容,则工程WebReport1部署完成之后,临时目录名称则为WebReport1.
5、效果查看
打开工程WebReport1的报表管理平台,在报表管理平台>服务器配置>监控下面可以看到部署方式为压缩部署,配置文件路径中的临时目录名称为WebReport1,如下图: