Implémenter un connecteur Drools pour Bonita 6

Bonjour à tous,

je cherche de la doc pour développer un connecteur Drools pour Bonita 6 (exigence du client).

J’ai essayé de reprendre les exemples suivants :
http://documentation.bonitasoft.com/5x/bos-56/connectivity/connectors-bonita-open-solution/drools
http://community.bonitasoft.com/groups/usage-operation-6x/drools-connector-newer-releases-bos-6x
http://svn.bonitasoft.org/bonita-connectors/branches/bonita-connectors-5.2.4/drools/src/test/java/org/bonitasoft/connectors/drools/examples/agerules/

Mais sans succès.
Après la commande :

final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();

J’ai l’erreur :

java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: Unable to instantiate service for Class ‘org.drools.builder.KnowledgeBuilderFactoryService’

J’ai bien inclu les jar suivants :
kie-api-6.0.1.Final
drools-decisiontables-6.0.1.Final
drools-api-5.1.1
drools-compiler-6.0.1.Final
drools-core-6.0.1.Final
jbpm-bpmn2-5.5.0

Que manque-t-il à mon connecteur pour fonctionner normalement ?

Merci

1 Like

Salut,

Je sais que nous sommes en train de travailler sur un connecteur Drools. Ce que nous avons du code source est disponible ici:
https://github.com/bonitasoft/bonita-connector-drools

Peut-être devrais tu jeter un coup d’oeil. Si tu as envie par la suite de faire un Pull Request, je sais qu’il sera très apprécié :wink:

Salut,
Je vois que tu utilise des classes 5.1 (drools api) et 6.0 ensemble, ça pourrait etre le problème .
J’ai crée un connecteur custom avec les libraries 5.3 et a bien marché.
Le code est le suivant:

public class StatelessKnowledgeSessionImpl extends AbstractStatelessKnowledgeSessionImpl {
Logger LOGGER=Logger.getLogger(this.getClass().getName());

@Override
protected void executeBusinessLogic() throws ConnectorException{
	
	List listOfFacts = this.getListOfFacts();
	String drlFilePath = this.getDrlFilePath();
	
	final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();

	// this will parse and compile in one step
	kbuilder.add(ResourceFactory.newFileResource(drlFilePath), ResourceType.DRL);

	// Check the builder for errors
	if (kbuilder.hasErrors()) {
		LOGGER.severe(kbuilder.getErrors().toString());
		throw new RuntimeException("Unable to compile \"" + drlFilePath + "\".");
	}

	// get the compiled packages (which are serializable)
	final Collection<KnowledgePackage> pkgs = kbuilder.getKnowledgePackages();

	// add the packages to a knowledgebase (deploy the knowledge packages).
	final KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
	kbase.addKnowledgePackages(pkgs);

	KnowledgeRuntimeLogger logger = null;

	StatelessKnowledgeSession ksession = kbase.newStatelessKnowledgeSession();

	ksession.addEventListener(new DebugAgendaEventListener());
	ksession.addEventListener(new DebugWorkingMemoryEventListener());

	// setup the audit logging
	logger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "drools");

	//ksession.execute( listOfFacts );
	ksession.execute( CommandFactory.newInsertElements( listOfFacts ) );
	
	setRevisedListOfFacts(listOfFacts);

	logger.close();

 }

Ok merci je vais essayer de regarder ça.
L’import sur Bonita est censé être possible ?
Menu Développement > Connecteurs > Import puis on sélectionne le zip du connecteur ?

Ok merci je vais essayer de regarder ça. L’import sur Bonita est censé être possible ? Menu Développement > Connecteurs > Import puis on sélectionne le zip du connecteur ? - See more at: http://community.bonitasoft.com//answers/implementer-un-connecteur-drools-pour-bonita-6#sthash.p87p0yfH.dpuf

pas sûr, c’est encore en phase de dev. C’est plus à utiliser comme ressource pour ce que tu développes

Merci ttoine & enrico,
j’ai une question concernant les fichiers maintenant (.drl ou .xsl peu importe); y a -t-il un dossier spécifique où les mettre pour pouvoir utiliser ?
(Je n’ai pas de src/java/resources dans mon connecteur)

Je pense que tu peux mettre le fichier où tu veux. Je suis presque sure de ça :slight_smile: