【问题标题】:Crystal Report 2016 with Wildfly 11带有 Wildfly 11 的 Crystal Report 2016
【发布时间】:2018-02-02 18:28:42
【问题描述】:

有人成功地将 Crystal Report 2016 BO/BIWildfly 11 集成了吗?

我有可以使用的 tomcat 版本,但使用 Wildfly 11 时它在这一点上失败了。

ISessionMgr sessionMgr = CrystalEnterprise.getSessionMgr();

我得到的例外是,(我有所有必需的 jar,因为相同的代码适用于 tomcat)。我确信这与 Wildfly v11 有关。

有人吗?

原因:java.lang.NoClassDefFoundError:链接失败 com/crystaldecisions/thirdparty/com/ooc/OB/TenantCategoryPolicy_impl (来自服务模块加载器的模块“deployment.master_dev_ca.war”): 链接失败 com/crystaldecisions/thirdparty/com/ooc/OB/TenantCategoryPolicy (来自服务模块加载器的模块“deployment.master_dev_ca.war”): org/omg/CORBA/portable/IDLEntity 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:423) 在 org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:446) 在 org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:274) 在 org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:77) 在 org.jboss.modules.Module.loadModuleClass(Module.java:713) 在 org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190) 在 org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:412) 在 org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:400) 在 org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:116) 在 com.crystaldecisions.thirdparty.com.ooc.OBCORBA.ORB_impl.initializeDefaultPolicies(ORB_impl.java:369) 在 com.crystaldecisions.thirdparty.com.ooc.OBCORBA.ORB_impl.initialize(ORB_impl.java:196) 在 com.crystaldecisions.thirdparty.com.ooc.OBCORBA.ORB_impl.setParameters(ORB_impl.java:812) 在 com.crystaldecisions.thirdparty.com.ooc.OBCORBA.ORB_impl.init(ORB_impl.java:1313) 在 com.crystaldecisions.enterprise.ocaframework.idl.helper.ORBHelper.init(ORBHelper.java:57) 在 com.crystaldecisions.enterprise.ocaframework.ServiceMgr.(ServiceMgr.java:402) 在 com.crystaldecisions.enterprise.ocaframework.ServiceMgrFactory.getServiceMgr(ServiceMgrFactory.java:66) 在 com.crystaldecisions.sdk.occa.security.internal.LogonService.ensureServiceStub(LogonService.java:646) 在 com.crystaldecisions.sdk.occa.security.internal.LogonService.doUserLogon(LogonService.java:829) 在 com.crystaldecisions.sdk.occa.security.internal.LogonService.doUserLogon(LogonService.java:806) 在 com.crystaldecisions.sdk.occa.security.internal.LogonService.userLogon(LogonService.java:211) 在 com.crystaldecisions.sdk.occa.security.internal.SecurityMgr.userLogon(SecurityMgr.java:166) 在 com.crystaldecisions.sdk.framework.internal.SessionMgr.logon_aroundBody0(SessionMgr.java:457) 在 com.crystaldecisions.sdk.framework.internal.SessionMgr.logon_aroundBody1$advice(SessionMgr.java:521) 在 com.crystaldecisions.sdk.framework.internal.SessionMgr.logon(SessionMgr.java:1) 在 com.aventis.master.presentation.action.CrystalAction.doReport(CrystalAction.java:287) 在 com.aventis.master.presentation.action.CrystalAction.loadReports(CrystalAction.java:1028) ... 52 更多

提前致谢, D.

更新:仍然无法正常工作:( 我的模块设置, 我把所有的 .jar 文件放在 \wildfly_installation_dir\modules\systems\layers\base\bo\crystalreports\main\

aspectjrt.jar
bcm.jar
ceaspect.jar
cecore.jar
celib.jar
cereports.jar
certjFIPS.jar
cesdk.jar
cesession.jar
com.azalea.ufl.barcode.1.0.jar
commons-collections-3.2.2.jar
commons-configuration-1.2.jar
commons-lang-2.1.jar
commons-lang-2.3.jar
commons-logging.jar
corbaidl.jar
cryptojFIPS.jar
CrystalReportsRuntime.jar
CrystalReportsSDK.jar
cvom.jar
DatabaseConnectors.jar
ebus405.jar
icu4j.jar
jcmFIPS.jar
JDBInterface.jar
keycodeDecoder.jar
log4j.jar
logging.jar
QueryBuilder.jar
sap.com~tc~sec~csi.jar
serializer.jar
SL_plugins.jar
ssljFIPS.jar
TraceLog.jar
webreporting-jsf.jar
webreporting.jar
xpp3.jar

jboss-deployment-structure.xml

<jboss-deployment-structure>
   <deployment>
      <dependencies>
          <module name="bo.crystalreport" export="true"/>
      </dependencies>

     <exclusions>
         <module name="org.apache.cxf" />
         <module name="org.apache.cxf.impl" /> 
         <module name="org.apache.cxf.services-sts" /> 
         <module name="org.apache.cxf.ws-security" /> 
...

我的 module.xml 看起来像这样。

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.3" name="bo.crystalreport">
   <resources>
      <resource-root path="aspectjrt.jar"/>
      <resource-root path="bcm.jar"/>
      <resource-root path="ceaspect.jar"/>
      <resource-root path="cecore.jar"/>
      <resource-root path="celib.jar"/>
      <resource-root path="cereports.jar"/>
      <resource-root path="certjFIPS.jar"/>
      <resource-root path="cesdk.jar"/>
      <resource-root path="cesession.jar"/>
      <resource-root path="com.azalea.ufl.barcode.1.0.jar"/>
      <resource-root path="commons-collections-3.2.2.jar"/>
      <resource-root path="commons-configuration-1.2.jar"/>
      <resource-root path="commons-lang-2.1.jar"/>
      <resource-root path="commons-lang-2.3.jar"/>
      <resource-root path="commons-logging.jar"/>
      <resource-root path="corbaidl.jar"/>
      <resource-root path="cryptojFIPS.jar"/>
      <resource-root path="CrystalReportsRuntime.jar"/>
      <resource-root path="CrystalReportsSDK.jar"/>
      <resource-root path="cvom.jar"/>
      <resource-root path="DatabaseConnectors.jar"/>
      <resource-root path="ebus405.jar"/>
      <resource-root path="icu4j.jar"/>
      <resource-root path="jcmFIPS.jar"/>
      <resource-root path="JDBInterface.jar"/>
      <resource-root path="keycodeDecoder.jar"/>
      <resource-root path="log4j.jar"/>
      <resource-root path="logging.jar"/>
      <resource-root path="QueryBuilder.jar"/>
      <resource-root path="sap.com~tc~sec~csi.jar"/>
      <resource-root path="serializer.jar"/>
      <resource-root path="SL_plugins.jar"/>
      <resource-root path="ssljFIPS.jar"/>
      <resource-root path="TraceLog.jar"/>
      <resource-root path="webreporting-jsf.jar"/>
      <resource-root path="webreporting.jar"/>
      <resource-root path="xpp3.jar"/>
   </resources>
   <dependencies>
      <module name="org.omg.api"/>    
      <module name="javax.faces.api"/>
   </dependencies>
</module>

【问题讨论】:

  • 您是在部署中包含它还是将其设置为模块?
  • 我尝试了所有 3 个选项模块,WEB-INF\lib 和 Maven,它们都失败了。我相信这是与 org.apache.cxf 冲突的类加载问题,而 Crystal Report 在 eBus405.jar 中嵌入了 com/crystaldecisions/thirdparty/com/ooc/OB/ 包,这与 cxf 的 apache 实现冲突。我不知道这些包,我必须查看它们的源代码以了解它是如何链接的。
  • 你认为他们有什么冲突?你的 module.xml 看起来像什么?
  • 好的,所以我添加了 module.xml 并通过包含 cxf 但获得 java 通用安全服务异常来设法解决 TenantCategoryPolicy 问题。有些事情我一定做得不对。

标签: crystal-reports wildfly-11


【解决方案1】:

设法解决了这个问题,希望这对以后的其他人有帮助。

第 1 步 \$JBOSS_HOME\modules\systems\layers\base\,像上面一样创建一个目录 bo\crystalreports\main\ 并复制所有 .jar 文件和模块。

第 2 步 添加 module.xml 作为依赖项的一部分。 (不用人脸就不用)

   <dependencies>
      <module name="org.omg.api"/>    
      <module name="javax.api"/>    
      <module name="javax.faces.api"/>
   </dependencies>

第 3 步 将此添加到您的 web.xml

    <context-param>
        <param-name>crystal_image_uri</param-name>
        <param-value>/crystalreportviewers</param-value>
    </context-param>
    <context-param>
       <param-name>crystal_image_use_relative</param-name>
       <param-value>webapp</param-value>
    </context-param>

   <servlet>
      <servlet-name>CrystalReportViewerServlet</servlet-name>
      <servlet-class>com.crystaldecisions.report.web.viewer.CrystalReportViewerServlet</servlet-class>
   </servlet>

   <servlet-mapping>
      <servlet-name>CrystalReportViewerServlet</servlet-name>
      <url-pattern>/CrystalReportViewerHandler</url-pattern>
   </servlet-mapping>

您的 java 代码可能如下所示。

public void someMethod(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException 
   {       
       ReportClientDocument rcd = null;
       try 
       {
          ISessionMgr sessionMgr = CrystalEnterprise.getSessionMgr();
          enterpriseSession = sessionMgr.logon("ceadmin", "password", "cehost:6400", "secEnterprise");
          IInfoStore iStore = (IInfoStore) enterpriseSession.getService("InfoStore");
          // if your report name is .rpt, append .rpt at the end of reportNameParam  
          String reportNameParam = "helloworld";
          IInfoObjects reports = iStore.query("Select SI_ID, SI_NAME From CI_INFOOBJECTS Where SI_NAME = '" + reportNameParam + "'" + " And SI_INSTANCE = 0");
          IInfoObject report = (IInfoObject)reports.get(0);     
          IReportAppFactory reportAppFactory = (IReportAppFactory) enterpriseSession.getService("RASReportFactory");
          rcd = reportAppFactory.openDocument(report, OpenReportOptions._openAsReadOnly, java.util.Locale.US);

          // send to viewer
       CrystalReportViewer viewer = new CrystalReportViewer();
       viewer.setReportSource(rcd.getReportSource());
       viewer.processHttpRequest(request, response, context, out);
       viewer.dispose();      }
      catch (SDKException e)
      {
         // catch ex
      }
      finally (... // if needed)...

【讨论】:

  • 自定义模块有效,但在我的情况下,模块中的 jar 也非常少,而且我不需要 web.xml aspectjrt-1.9.4.jar bcm-4.2 中的 servlet 映射。 jar ceaspect-4.2.jar cecore-4.2.jar celib-4.2.jar cesession-4.2.jar corbaidl-4.2.jar cryptojce-4.2.jar cryptojFIPS-4.2.jar ebus405-4.2.jar jcmFIPS-4.2.jar logging-4.2。 jar tracelog-4.2.jar org.omg.api javax.api
猜你喜欢
  • 2014-08-14
  • 1970-01-01
  • 1970-01-01
  • 2011-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-28
  • 2013-04-26
相关资源
最近更新 更多