[jboss-jira] [JBoss JIRA] (DROOLS-3869) ServiceDiscovery doesn't work with Fuse

Anton Giertli (Jira) issues at jboss.org
Wed Apr 10 05:32:00 EDT 2019


    [ https://issues.jboss.org/browse/DROOLS-3869?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13720295#comment-13720295 ] 

Anton Giertli commented on DROOLS-3869:
---------------------------------------

More details:

- Camel on EAP (Fuse 7.2.0 + EAP 7.1.x)
- RHDM 7.0.0 - 7.3.0 (I've tried all the versions)

Drools API is invoked in a Bean, which is part of the camel route. The bean includes following code:

~~~
KieServices ks = KieServices.Factory.get();
~~~

KieServices  are entry point to the Drools API. Unfortunately, this code, as is, returns null - which means any further API calls are not possible from this point on.

There are two workarounds to this issue:

#  Instantiate KieServices using 'new' keyword
# 
 KieServices ksDirect = new KieServicesImpl();

However, this breaks the contract since KieServices should really be a singleton.

# Change thread context classloader (TCCL):
~~~
        // Workaround due to classloading issues
        ClassLoader prevTCL = Thread.currentThread().getContextClassLoader();
        Thread.currentThread().setContextClassLoader(RuleRepository.class.getClassLoader());
        KieServices ks = KieServices.Factory.get();

        ReleaseId releaseId = ks.newReleaseId(groupId, artifactid, version);
        container = ks.newKieContainer(releaseId);
        scanner = ks.newKieScanner(container);
        Thread.currentThread().setContextClassLoader(prevTCL); // end of workaround
~~~

This works fine, but it's considered as a hack.

Reproducer is attached. Instructions are these:
~~~
- Install Fuse 7.2 on EAP - no further changes to installation are needed
https://access.redhat.com/documentation/en-us/red_hat_fuse/7.2/html/installing_on_jboss_eap/installing_red_hat_jboss_fuse_on_eap
- Start the instance
- Extract my app and execute 'mvn clean install' - this will automatically deploy it onto eap/wildfly
- GET http://127.0.0.1:8080/rest/reproducer/execute

You should see following response in the server.log:

18:30:26,409 INFO  [stdout] (default task-2) KS is null

Which means KieServices are null, hence I cannot proceed with operations such as loading the KJAR etc.

In reproducer, the app flow goes from:

RESTBuilder -> Hello.java -> sampleMethod
~~~






> ServiceDiscovery doesn't work with Fuse
> ---------------------------------------
>
>                 Key: DROOLS-3869
>                 URL: https://issues.jboss.org/browse/DROOLS-3869
>             Project: Drools
>          Issue Type: Bug
>          Components: core engine
>            Reporter: Mario Fusco
>            Assignee: Mario Fusco
>            Priority: Major
>         Attachments: reproducer.zip
>
>




--
This message was sent by Atlassian Jira
(v7.12.1#712002)


More information about the jboss-jira mailing list