Я пробовал очень простое правило проверить, работает ли слюни, я связал его с спящим режимом, но обнаружил ошибку «java.lang.ArrayIndexOutOfBoundsException: -1» это основной: пакет род деятельности;Drools Error with readKnowledgebase
import java.util.Iterator;
import java.util.List;
import metier.environnements.Reseau;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderError;
import org.drools.builder.KnowledgeBuilderErrors;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.io.ResourceFactory;
import org.drools.logger.KnowledgeRuntimeLogger;
import org.drools.logger.KnowledgeRuntimeLoggerFactory;
import org.drools.runtime.StatefulKnowledgeSession;
import org.hibernate.Query;
import org.hibernate.Session;
import util.HibernateUtil;
/* This is a sample class to launch a rule. */
public class testingRules {
public static void main(String[] args) {
Session session =HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
Query query=session.createQuery("from Reseau");
List l =query.list();
Iterator reseaux = query .iterate();
while (reseaux.hasNext()) {
Reseau reseau = (Reseau) reseaux.next();
// Set the process start arguments.
StatefulKnowledgeSession sks = getSKS();
sks.insert(reseau);
sks.fireAllRules();
}
session.getTransaction().commit();
}
/**
* Creates a basic {@link StatefulKnowledgeSession} which contains the <code>BPMN2</code> process definition of our sample process.
*
* @return
*/
private static StatefulKnowledgeSession getSKS() {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(
ResourceFactory
.newClassPathResource("Reseau.drl"),
ResourceType.DRL);
KnowledgeBase kbase = kbuilder.newKnowledgeBase();
return kbase.newStatefulKnowledgeSession();
}
}
и .drl файл:
package metier.environnements
import metier.taches.ActiviteProfessionnelle;
import metier.taches.Utilisateur;
rule "Réseaux_disponibles" // donne les réseaux disponibles dans la localisation de l'utilisateur
ruleflow-group "networks"
when
reseau : Reseau (reseau.getCle() == "mot")
then
System.out.println ("Réseaux disponibles");
end
ошибка, которое появляется:
java.lang.ArrayIndexOutOfBoundsException: -1
at org.eclipse.jdt.internal.compiler.parser.Parser.consumeCastExpressionWithNameArray(Parser.java:1984)
at org.eclipse.jdt.internal.compiler.parser.Parser.consumeRule(Parser.java:5992)
at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9272)
at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9500)
at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9457)
at org.eclipse.jdt.internal.compiler.parser.Parser.dietParse(Parser.java:8102)
at org.eclipse.jdt.internal.compiler.Compiler.internalBeginToCompile(Compiler.java:696)
at org.eclipse.jdt.internal.compiler.Compiler.beginToCompile(Compiler.java:376)
at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:420)
at org.drools.commons.jci.compilers.EclipseJavaCompiler.compile(EclipseJavaCompiler.java:389)
at org.drools.commons.jci.compilers.AbstractJavaCompiler.compile(AbstractJavaCompiler.java:49)
at org.drools.rule.builder.dialect.java.JavaDialect.compileAll(JavaDialect.java:371)
at org.drools.compiler.DialectCompiletimeRegistry.compileAll(DialectCompiletimeRegistry.java:46)
at org.drools.compiler.PackageRegistry.compileAll(PackageRegistry.java:102)
at org.drools.compiler.PackageBuilder.compileAll(PackageBuilder.java:1006)
at org.drools.compiler.PackageBuilder.compileAllRules(PackageBuilder.java:842)
at org.drools.compiler.PackageBuilder.addPackage(PackageBuilder.java:831)
at org.drools.compiler.PackageBuilder.addPackageFromDrl(PackageBuilder.java:467)
at org.drools.compiler.PackageBuilder.addKnowledgeResource(PackageBuilder.java:673)
at org.drools.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:45)
at org.drools.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:34)
at metier.testingRules.getSKS(testingRules.java:66)
at metier.testingRules.main(testingRules.java:48)
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at org.eclipse.jdt.internal.compiler.parser.Parser.consumeCastExpressionWithNameArray(Parser.java:1984)
at org.eclipse.jdt.internal.compiler.parser.Parser.consumeRule(Parser.java:5992)
at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9272)
at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9500)
at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:9457)
at org.eclipse.jdt.internal.compiler.parser.Parser.dietParse(Parser.java:8102)
at org.eclipse.jdt.internal.compiler.Compiler.internalBeginToCompile(Compiler.java:696)
at org.eclipse.jdt.internal.compiler.Compiler.beginToCompile(Compiler.java:376)
at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:420)
at org.drools.commons.jci.compilers.EclipseJavaCompiler.compile(EclipseJavaCompiler.java:389)
at org.drools.commons.jci.compilers.AbstractJavaCompiler.compile(AbstractJavaCompiler.java:49)
at org.drools.rule.builder.dialect.java.JavaDialect.compileAll(JavaDialect.java:371)
at org.drools.compiler.DialectCompiletimeRegistry.compileAll(DialectCompiletimeRegistry.java:46)
at org.drools.compiler.PackageRegistry.compileAll(PackageRegistry.java:102)
at org.drools.compiler.PackageBuilder.compileAll(PackageBuilder.java:1006)
at org.drools.compiler.PackageBuilder.compileAllRules(PackageBuilder.java:842)
at org.drools.compiler.PackageBuilder.addPackage(PackageBuilder.java:831)
at org.drools.compiler.PackageBuilder.addPackageFromDrl(PackageBuilder.java:467)
at org.drools.compiler.PackageBuilder.addKnowledgeResource(PackageBuilder.java:673)
at org.drools.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:45)
at org.drools.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:34)
at metier.testingRules.getSKS(testingRules.java:66)
at metier.testingRules.main(testingRules.java:48)
Есть ли у вас какие-либо идеи, где она приходит от и как я могу это исправить? я действительно ценю это
the class Reseau definition is :
package metier.environnements;
public class Reseau {
private Long idReseau;
private String nom;
private String cle;//mot de passe
private String etat ; // disponible ou non
private String vitesseTransfert; //speed
private String type ; // 3G , LTE , Wifi ...
private Localisation localisation;
// Les getters and setters.
public Long getIdReseau() {
return idReseau;
}
public void setIdReseau(Long idReseau) {
this.idReseau = idReseau;
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public String getCle() {
return cle;
}
public void setCle(String cle) {
this.cle = cle;
}
public String getEtat() {
return etat;
}
public void setEtat(String etat) {
this.etat = etat;
}
public String getVitesseTransfert() {
return vitesseTransfert;
}
public void setVitesseTransfert(String vitesseTransfert) {
this.vitesseTransfert = vitesseTransfert;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Localisation getLocalisation() {
return localisation;
}
public void setLocalisation(Localisation localisation) {
this.localisation = localisation;
}
// Constructeur par defaut
public Reseau() {
super();
// TODO Auto-generated constructor stub
}
// Le constructeur avec les champs , le id sera genere automatiquement
public Reseau(String nom, String cle, String etat, String vitesseTransfert,
String type, Localisation localisation) {
super();
this.nom = nom;
this.cle = cle;
this.etat = etat;
this.vitesseTransfert = vitesseTransfert;
this.type = type;
this.localisation = localisation;
}
Я использую Drools 5.4.0, я добавил определение класса Reseau в сообщение. Благодарим вас за помощь. – balance
Я не могу воспроизвести это, даже с 5.4.0. Но я не собираюсь из Eclipse. Попробуйте в оболочке, используя этот путь к классам: 'root =/extra/drools-distribution-5.4.0.Final/binaries;' tag = 5.4.0.Final; '' export CLASSPATH =.: $ Root/drools-core- $ {метка} .jar: $ корень/знания апи - $ {метка} .jar: $ корень/знания внутреннего апи - $ {метка} .jar: $ корневой/Drools-составитель - $ {метка} .jar : $ корень/ANTLR-2.7.7.jar: $ корневой/ANTLR-3.3.jar: $ корневой/ANTLR-среда-3.3.jar: $ корневой/СЕС-3.5.1.jar: $ корневой/mvel2-2.1. 0.drools16.jar: /extra/quartz-1.8.3/quartz-1.8.3.jar: $ ROOT/Drools-decisiontables - $ {метка} .jar: $ ROOT/Drools-шаблоны - $ {метка} .jar : $ root/jxl-2.6.10.jar' – laune
Я обновил до Drools 6.2, как вы рекомендовали, но проблема сохранилась, поэтому я открыл новый проект Drools и скопировал все, ошибка больше не появляется, но есть ничего не отображается. PS: когда я выполняю правило, не используя спящий режим, он работает, и когда я не использую Drools и просто печатаю объекты из Hibernate, он работает тоже, но ничего не отображается, когда я совмещаю оба. В чем проблема? ? Я действительно не могу понять, что – balance