2016-06-16 2 views
0

zu holen Wie Sie sehen können, können alle Regeln in Projekt-Explorer aufgelistet, ich frage mich, geifert Werkbank, eine solche Erholung API für diese, aber ich ging durch Online-Dokument Dokument , es gibt keine solche API. Irgendwelche Vorschläge dazu? Danke im Voraus. https://docs.jboss.org/drools/release/latest/drools-docs/html/ch20.html#d0e22619Gibt es ein REST-API alle Regeln von Repository in geifert

Mit freundlichen Grüßen Yuhua

+0

Ich bin auf der Suche nach ähnlichen Funktionen. Ich wollte nur überprüfen, ob Sie irgendwelche Informationen dazu bekommen konnten. – DBS

Antwort

1

Soweit ich weiß, gibt es kein REST-API, das zu tun (public zumindest). Eine Option ist es jedoch, git zu verwenden, um diese Informationen von der Workbench zu erhalten.

Der Speicher der Workbench basiert auf Git. Jedes Repository in der Workbench ist eigentlich ein Git-Repository. Die Workbench ermöglicht es Ihnen, clone those repositories und tun, was Sie brauchen, mit ihnen wie mit jedem anderen git Repo da draußen.

Innerhalb jeder der git Repositories werden Sie keine oder mehrere Maven Projekte. Tatsächlich ist jedes der Projekte, die Sie in der Workbench sehen, ein echtes Maven-Projekt. Die verschiedenen Assets in Ihren Projekten (drl Regeln, Guided Rules, Entscheidungstabelle, etc.) werden unter dem resources Verzeichnis des entsprechenden Projekts verfügbar sein.

Hoffe, dass es hilft,

0

Als Esteban Aliverti erwähnt, gibt es keine bereit API zu verwenden, um dies zu erreichen. Wir können jedoch eine benutzerdefinierte Erweiterung für KIE Server schreiben, um alle bereitgestellten Regeln abzurufen.

Es wird in der detaillierten here erläutert.

Ich habe ähnlichen Anwendungsfall in meiner Anwendung und habe die folgenden Durchführungsbestimmungen für das Abrufen.

CusomtDroolsKieServerApplicationComponentsService

public class CusomtDroolsKieServerApplicationComponentsService implements KieServerApplicationComponentsService { 

private static final String OWNER_EXTENSION = "Drools"; 

public Collection<Object> getAppComponents(String extension, SupportedTransports type, Object... services) { 
    // skip calls from other than owning extension 
    if (!OWNER_EXTENSION.equals(extension)) { 
     return Collections.emptyList(); 
    } 

    RulesExecutionService rulesExecutionService = null; 
    KieServerRegistry context = null; 

    for (Object object : services) { 
     if (RulesExecutionService.class.isAssignableFrom(object.getClass())) { 
      rulesExecutionService = (RulesExecutionService) object; 
      continue; 
     } else if (KieServerRegistry.class.isAssignableFrom(object.getClass())) { 
      context = (KieServerRegistry) object; 
      continue; 
     } 
    } 

    List<Object> components = new ArrayList<Object>(1); 
    if (SupportedTransports.REST.equals(type)) { 
     components.add(new RuleRESTService(rulesExecutionService, context)); 
    } 

    return components; 
} 

RuleRestService

@Path("server/containers/instances/{id}/ksession") 
public class RuleRESTService { 

private RulesExecutionService rulesExecutionService; 
private KieServerRegistry registry; 

public RuleRESTService() { 

} 

public RuleRESTService(RulesExecutionService rulesExecutionService, KieServerRegistry registry) { 
    this.rulesExecutionService = rulesExecutionService; 
    this.registry = registry; 
} 

public RulesExecutionService getRulesExecutionService() { 
    return rulesExecutionService; 
} 

public void setRulesExecutionService(RulesExecutionService rulesExecutionService) { 
    this.rulesExecutionService = rulesExecutionService; 
} 

public KieServerRegistry getRegistry() { 
    return registry; 
} 

public void setRegistry(KieServerRegistry registry) { 
    this.registry = registry; 
} 

@POST 
@Path("/{ksessionId}") 
@Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) 
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) 
public Response fetchAllRules(@Context HttpHeaders headers, @PathParam("id") String id, 
     @PathParam("ksessionId") String ksessionId, String cmdPayload) { 

    Variant v = getVariant(headers); 
    try { 
     System.out.println("CREATING KieContainerInstance "); 
     KieContainerInstance kci = registry.getContainer(id); 

     String contentType = getContentType(headers); 

     MarshallingFormat format = MarshallingFormat.fromType(contentType); 
     if (format == null) { 
      format = MarshallingFormat.valueOf(contentType); 
     } 

     Marshaller marshaller = kci.getMarshaller(format); 
     RuleAccessor accessor = new RuleAccessor(); 

     List<RuleData> rules = accessor.fetchAllRules(kci.getKieContainer()); 

     String result = marshaller.marshall(rules); 

     return createResponse(result, v, Response.Status.OK); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
     String response = "Execution failed with error : " + ex.getMessage(); 
     System.out.println("Returning Failure response with content '{}' :" + response); 
     return createResponse(response, v, Response.Status.INTERNAL_SERVER_ERROR); 
    } 

} 

RuleAccessor

 public class RuleAccessor { 

     public List<RuleData> fetchAllRules(KieContainer kContainer) { 

    kContainer.getKieBaseNames().stream() 
      .forEach(kieBase -> rules.addAll(fetchRules(kContainer1.getKieBase(kieBase)))); 

    return rules; 

} 

    public List<RuleData> fetchRules(KieBase kieBase) { 
    List<RuleData> ruleData = new ArrayList<>(); 
    for (KiePackage kp : kieBase.getKiePackages()) { 
     RuleData data = new RuleData(); 
     for (Rule r1 : kp.getRules()) { 
      RuleImpl r = (RuleImpl) r1; 
      data.agendaGroup(r.getAgendaGroup()).packageId(r.getPackageName()).ruleName(r.getName()) 
        .enabled(Boolean.getBoolean((((EnabledBoolean) r.getEnabled()).toString()))) 
        .effectiveDate(String.valueOf(r.getDateEffective())) 
        .dateExpires(String.valueOf(r.getDateExpires())).dialect(r.getDialect()) 
        .salience(r.getSalienceValue()).metaData(r.getMetaData()); 
      try { 
       Resource resource = r.getResource(); 
       Reader reader = resource.getReader(); 
       BufferedReader bufferedReader = new BufferedReader(reader); 
       String line = null; 
       StringBuilder builder = new StringBuilder(); 
       while ((line = bufferedReader.readLine()) != null) { 
        builder.append(line); 
       } 
       data.ruleContent(builder.toString()); 
       ruleData.add(data); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
    return ruleData; 

} 

    public static class RuleData { 

    private String packageId; 

    private String ruleName; 

    private String type; 

    private String agendaGroup; 

    private String ruleContent; 

    private boolean isEnabled; 
    private String effectiveDate; 
    private String dateExpires; 
    private String dialect; 
    private int salience; 
    private Map<String, Object> metaData; 

    public boolean isEnabled() { 
     return isEnabled; 
    } 

    public RuleData enabled(boolean isEnabled) { 
     this.isEnabled = isEnabled; 
     return this; 
    } 

    public String effectiveDate() { 
     return effectiveDate; 
    } 

    public RuleData effectiveDate(String effectiveDate) { 
     this.effectiveDate = effectiveDate; 
     return this; 
    } 

    public String getDateExpires() { 
     return dateExpires; 
    } 

    public RuleData dateExpires(String dateExpires) { 
     this.dateExpires = dateExpires; 
     return this; 
    } 

    public String getDialect() { 
     return dialect; 
    } 

    public RuleData dialect(String dialect) { 
     this.dialect = dialect; 
     return this; 
    } 

    public int getSalience() { 
     return salience; 
    } 

    public RuleData salience(int salience) { 
     this.salience = salience; 
     return this; 
    } 

    public Map<String, Object> getMetaData() { 
     return metaData; 
    } 

    public RuleData metaData(Map<String, Object> metaData) { 
     this.metaData = metaData; 
     return this; 
    } 

    public String getRuleContent() { 
     return ruleContent; 
    } 

    public RuleData ruleContent(String ruleContent) { 
     this.ruleContent = ruleContent; 
     return this; 
    } 

    public String getPackageId() { 
     return packageId; 
    } 

    public RuleData packageId(String packageId) { 
     this.packageId = packageId; 
     return this; 
    } 

    public String getRuleName() { 
     return ruleName; 
    } 

    public RuleData ruleName(String ruleName) { 
     this.ruleName = ruleName; 
     return this; 
    } 

    public String getType() { 
     return type; 
    } 

    public RuleData type(String type) { 
     this.type = type; 
     return this; 
    } 

    public String getAgendaGroup() { 
     return agendaGroup; 
    } 

    public RuleData agendaGroup(String agendaGroup) { 
     this.agendaGroup = agendaGroup; 
     return this; 
    } 

} 

}

Sie können einen REST Aufruf an Kie Server von Ihnen Anwendung machen alle Regeln für den angegebenen Container zur Verfügung zuzugreifen.

http://localhost:8080/kie-server/services/rest/server/containers/instances/<container-id>/ksession/<session-id> 
Verwandte Themen