0

Anyone successfully integrated Crystal Report 2016 BO/BI with Wildfly 11 ?

I have the tomcat version that works but with Wildfly 11 it fails at this point.

ISessionMgr sessionMgr = CrystalEnterprise.getSessionMgr();

The exception that I am getting is, (I have all the required jars, since the same code works with tomcat). I am sure this has to do with Wildfly v11.

Anyone ?

Caused by: java.lang.NoClassDefFoundError: Failed to link com/crystaldecisions/thirdparty/com/ooc/OB/TenantCategoryPolicy_impl (Module "deployment.master_dev_ca.war" from Service Module Loader): Failed to link com/crystaldecisions/thirdparty/com/ooc/OB/TenantCategoryPolicy (Module "deployment.master_dev_ca.war" from Service Module Loader): org/omg/CORBA/portable/IDLEntity at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:446) at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:274) at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:77) at 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) at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:116) at com.crystaldecisions.thirdparty.com.ooc.OBCORBA.ORB_impl.initializeDefaultPolicies(ORB_impl.java:369) at com.crystaldecisions.thirdparty.com.ooc.OBCORBA.ORB_impl.initialize(ORB_impl.java:196) at com.crystaldecisions.thirdparty.com.ooc.OBCORBA.ORB_impl.setParameters(ORB_impl.java:812) at com.crystaldecisions.thirdparty.com.ooc.OBCORBA.ORB_impl.init(ORB_impl.java:1313) at com.crystaldecisions.enterprise.ocaframework.idl.helper.ORBHelper.init(ORBHelper.java:57) at com.crystaldecisions.enterprise.ocaframework.ServiceMgr.(ServiceMgr.java:402) at com.crystaldecisions.enterprise.ocaframework.ServiceMgrFactory.getServiceMgr(ServiceMgrFactory.java:66) at com.crystaldecisions.sdk.occa.security.internal.LogonService.ensureServiceStub(LogonService.java:646) at com.crystaldecisions.sdk.occa.security.internal.LogonService.doUserLogon(LogonService.java:829) at com.crystaldecisions.sdk.occa.security.internal.LogonService.doUserLogon(LogonService.java:806) at com.crystaldecisions.sdk.occa.security.internal.LogonService.userLogon(LogonService.java:211) at com.crystaldecisions.sdk.occa.security.internal.SecurityMgr.userLogon(SecurityMgr.java:166) at com.crystaldecisions.sdk.framework.internal.SessionMgr.logon_aroundBody0(SessionMgr.java:457) at com.crystaldecisions.sdk.framework.internal.SessionMgr.logon_aroundBody1$advice(SessionMgr.java:521) at com.crystaldecisions.sdk.framework.internal.SessionMgr.logon(SessionMgr.java:1) at com.aventis.master.presentation.action.CrystalAction.doReport(CrystalAction.java:287) at com.aventis.master.presentation.action.CrystalAction.loadReports(CrystalAction.java:1028) ... 52 more

Thanks in advance, D.

Update : Still not working :( My module setup, I put all the .jar files in \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

and in 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" /> 
...

My module.xml looks like this.

<?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>
DEREK LEE
  • 531
  • 4
  • 10
  • Are you including it in your deployment or do you have it setup as a module? – James R. Perkins Feb 05 '18 at 01:54
  • I tried all 3 options modules, WEB-INF\lib and Maven, they all failed. I believe it's the class loading problem it's conflicting with org.apache.cxf, while Crystal Report has the embedded com/crystaldecisions/thirdparty/com/ooc/OB/ packages in eBus405.jar which conflicts with apache implementation of cxf. I have no idea of these packages, I have to look at their source code to see how it's linked. – DEREK LEE Feb 05 '18 at 13:30
  • What conflict do you think they're having? What does your module.xml look like as well? – James R. Perkins Feb 05 '18 at 16:59
  • Ok, so I added the module.xml and manage to resolve the TenantCategoryPolicy problem by including the cxf but getting the java generic security service exception. Something I must not doing it right. – DEREK LEE Feb 05 '18 at 17:57

1 Answers1

1

Managed to resolve this issue, hope this might help others in the future.

Step 1 \$JBOSS_HOME\modules\systems\layers\base\, create a directory bo\crystalreports\main\ like above and copy all .jar files and module.

Step 2 Add in module.xml as part of dependencies. (no need faces if you are not using it)

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

Step 3 Add this to your 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>

Your java code might look like this.

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)...
DEREK LEE
  • 531
  • 4
  • 10
  • Custom modules worked but in my case also, it was very less jar in modules and also i didnt need the servlet mapping in web.xml aspectjrt-1.9.4.jar bcm-4.2.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 – WhyJava Jan 27 '21 at 21:27