0

有人成功地将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(来自 Service Module Loader 的模块“deployment.master_dev_ca.war”):无法链接 com/crystaldecisions/thirdparty/com /ooc/OB/TenantCategoryPolicy(来自服务模块加载器的模块“deployment.master_dev_ca.war”):sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 处 sun.reflect.NativeConstructorAccessorImpl.newInstance 处的 org/omg/CORBA/portable/IDLEntity (NativeConstructorAccessorImpl.java:62) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:423) 在 org.jboss.modules.ModuleClassLoader.defineClass(模块类加载器.java:446) 在 org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:77) 在 org.jboss.modules.Module.loadModuleClass(Module. java:713) at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190) at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:412) at 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) at com.aventis.master.presentation.action.CrystalAction.loadReports(CrystalAction.java:1028) ... 52 更多com.crystaldecisions.sdk.framework.internal.SessionMgr.logon_aroundBody1$advice(SessionMgr.java:521) 处的 SessionMgr.logon_aroundBody0(SessionMgr.java:457) 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更多的com.crystaldecisions.sdk.framework.internal.SessionMgr.logon_aroundBody1$advice(SessionMgr.java:521) 处的 SessionMgr.logon_aroundBody0(SessionMgr.java:457) 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更多的loadReports(CrystalAction.java:1028) ... 52 更多loadReports(CrystalAction.java:1028) ... 52 更多

先谢谢了。

更新:仍然无法正常工作:( 我的模块设置,我将所有 .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>
4

1 回答 1

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)...
于 2018-02-08T13:12:20.820 回答