规则已关闭

如何解决规则已关闭

我写这篇文章来描述我的问题。我提出了一个(Kie服务器7.40和业务中心(工作台)7.44)。问题是,在一段时间不活动之后,如果我返回使用规则,则会在Java中抛出一个空指针异常,说它找不到端点。

我设法配置了服务器,并部署了规则项目。由于其KieSessions在kmodule.xml中设置为无状态,因此其执行策略设置为BY REQUEST。

然后,我编写了一个客户端来调用此服务器,它可以正常工作几分钟。在那之后(我认为将是10分钟),其他所有请求都将引发ClassCast异常,无论如何。如果我重新启动人机界面,它将再次工作10分钟。

我想知道是否存在配置文件或某种方式来“打开”规则。非常感谢。

这是例外:

 java.lang.classCastException: java.util.LinkedHashMap cannot be cast to org.kie.api.command.Command
        at org.kie.server.services.drools.DroolsKieContainerCommandServiceImpl.callContainer(DroolsKieContainerCommandServiceImpl.java:60)
        at org.kie.server.remote.rest.drools.CommandResource.manageContainer(CommandResource.java:91)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:138)
        at org.jboss.resteasy.core.ResourceMethodInvoker.internalInvokeOnTarget(ResourceMethodInvoker.java:543)
        at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTargetAfterFilter(ResourceMethodInvoker.java:432)
        at org.jboss.resteasy.core.ResourceMethodInvoker.lambda$invokeOnTarget$0(ResourceMethodInvoker.java:393)
        at org.jboss.resteasy.core.interception.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:358)
        at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:395)
        at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:364)
        at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:337)
        at org.jboss.resteasy.core.Synchronousdispatcher.invoke(Synchronousdispatcher.java:440)
        at org.jboss.resteasy.core.Synchronousdispatcher.lambda$invoke$4(Synchronousdispatcher.java:229)
        at org.jboss.resteasy.core.Synchronousdispatcher.lambda$preprocess$0(Synchronousdispatcher.java:135)
        at org.jboss.resteasy.core.interception.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:358)
        at org.jboss.resteasy.core.Synchronousdispatcher.preprocess(Synchronousdispatcher.java:138)
        at org.jboss.resteasy.core.Synchronousdispatcher.invoke(Synchronousdispatcher.java:215)
        at org.jboss.resteasy.plugins.server.servlet.ServletContainerdispatcher.service(ServletContainerdispatcher.java:245)
        at org.jboss.resteasy.plugins.server.servlet.HttpServletdispatcher.service(HttpServletdispatcher.java:61)
        at org.jboss.resteasy.plugins.server.servlet.HttpServletdispatcher.service(HttpServletdispatcher.java:56)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:590)
        at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)
        at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)
        at io.opentracing.contrib.jaxrs2.server.SpanFinishingFilter.doFilter(SpanFinishingFilter.java:52)
        at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
        at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
        at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)
        at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
        at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68)
        at io.undertow.servlet.handlers.ServletdispatchingHandler.handleRequest(ServletdispatchingHandler.java:36)
        at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
        at io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68)
        at io.undertow.servlet.handlers.security.SSLinformationAssociationHandler.handleRequest(SSLinformationAssociationHandler.java:132)
        at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
        at io.undertow.server.handlers.disableCacheHandler.handleRequest(disableCacheHandler.java:33)
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
        at io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(AuthenticationConstraintHandler.java:53)
        at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
        at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
        at io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:59)
        at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
        at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
        at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
        at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
        at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
        at org.wildfly.extension.undertow.deployment.GlobalRequestControllerHandler.handleRequest(GlobalRequestControllerHandler.java:68)
        at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
        at io.undertow.servlet.handlers.ServletinitialHandler.handleFirstRequest(ServletinitialHandler.java:269)
        at io.undertow.servlet.handlers.ServletinitialHandler.access$100(ServletinitialHandler.java:78)
        at io.undertow.servlet.handlers.ServletinitialHandler$2.call(ServletinitialHandler.java:133)
        at io.undertow.servlet.handlers.ServletinitialHandler$2.call(ServletinitialHandler.java:130)
        at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
        at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
        at org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda$create$0(SecurityContextThreadSetupAction.java:105)
        at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)
        at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)
        at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)
        at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1530)
        at io.undertow.servlet.handlers.ServletinitialHandler.dispatchRequest(ServletinitialHandler.java:249)
        at io.undertow.servlet.handlers.ServletinitialHandler.access$000(ServletinitialHandler.java:78)
        at io.undertow.servlet.handlers.ServletinitialHandler$1.handleRequest(ServletinitialHandler.java:99)
        at io.undertow.server.Connectors.executeRootHandler(Connectors.java:370)
        at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830)
        at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
        at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1982)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
        at java.lang.Thread.run(Thread.java:748)

这是我的客户:

public class DroolsGenericclient {

    private static final String URL = "http://localhost:8080/kie-server/services/rest/server";
    private static final String USER = "kieserver";
    private static final String PASSWORD = "kieserver1!";
    
    private static Marshaller xStreamXml;
    
    private static KieServicesConfiguration conf;
    private static KieServicesClient client;
    private static RuleServicesClient ruleClient;
    //private static ProcessServicesClient processClient;
    private static Set<Class<?>> allClasses;
    
    /**
     * Registra una clase (usualmente una clase DTO) en el cliente
     * @param className la clase DTO a registrar en el cliente de ejecucion de reglas
     */
    public static void registerClass(Class<?> className) {
        if(allClasses == null) {
            allClasses = new HashSet<Class<?>>();
        }
        allClasses.add(className);
    }
    
    /**
     * Inicializa el cliente de ejecucion de reglas.<br/>
     * Se deben registrar las clases DTO usando {@link com.uxorit.KieRestConfiguration#registerClass(Class) registerClass}
     * <br/>Setea y deja disponible el servicio:<br/>
     * <ul>
     * <li><b>RuleServicesClient</b> como {@link com.uxorit.KieRestConfiguration#ruleClient ruleClient}</li>
     * </ul>
     */
    public static void initialize() {
        Properties serverProperties = readPropertiesFile("server-config.properties");
        conf = KieServicesFactory.newRestConfiguration(
                serverProperties.getProperty("server.url.host") + ":" + 
                serverProperties.getProperty("server.url.port") + 
                serverProperties.getProperty("server.url.context"),serverProperties.getProperty("server.user"),serverProperties.getProperty("server.password"),Long.valueOf(serverProperties.getProperty("server.timeout"))
                );
        conf.setMarshallingFormat(MarshallingFormat.JSON);
        
        if(allClasses != null && !allClasses.isEmpty()) {
            conf.addExtraClasses(allClasses);
        }
        try {
            xStreamXml = MarshallerFactory.getMarshaller(allClasses,MarshallingFormat.JSON,DroolsGenericclient.class.getClassLoader());

        } catch (Exception e) {
            e.printstacktrace();
        }
        
        
        client  = KieServicesFactory.newKieServicesClient(conf);
        ruleClient = client.getServicesClient(RuleServicesClient.class);
        //processClient = client.getServicesClient(ProcessServicesClient.class);
    }

    //Para la version 7.36
    /**
     * Realiza una llamada al servidor remoto,ejecutando las reglas con los parametros ingresados
     * @param parameters Elementos a insertar
     * @param containerId Nombre del Contenedor (Proyecto de reglas)
     * @param sessionId Nombre de la KieSession para acceder al paquete de reglas
     * @return Devuelve la lista de parametros con las modificaciones realizadas por la regla
     */
    public static List executeRules(List parameters,String containerId,String sessionId) {
        
        InsertElementsCommand insertElementsCommand = new InsertElementsCommand(parameters);
        insertElementsCommand.setoutIdentifier("outIdentifier");
        
        FireAllRulesCommand fireAllRulesCommand = new FireAllRulesCommand();
        GetobjectsCommand getobjectsCommand = new GetobjectsCommand();
        
        //dispose session
        //disposeCommand disposeCommand = new disposeCommand();
        
        KieCommands commandsFactory = KieServices.Factory.get().getCommands();
        List<Command<?>> commands = new ArrayList<Command<?>>();
        BatchExecutionCommand executionCommand = commandsFactory.newBatchExecution(commands,sessionId);

        commands.add(insertElementsCommand);
        commands.add(fireAllRulesCommand);
        commands.add(getobjectsCommand);
        //commands.add(disposeCommand);
        
        
        ServiceResponse<ExecutionResults> response = ruleClient.executeCommandsWithResults(containerId,xStreamXml.marshall(executionCommand));
        return (List)response.getResult().getValue("outIdentifier");
    }
    
    //Para la version 7.36
    /**
     * Realiza una llamada al servidor remoto,ejecutando las reglas con los parametros ingresados
     * @param parameters Elementos a insertar
     * @param containerId Nombre del Contenedor (Proyecto de reglas)
     * @param sessionId Nombre de la KieSession para acceder al paquete de reglas
     * @return Devuelve la lista de parametros con las modificaciones realizadas por la regla
     */
    public static Object executeRules(Object parameter,String sessionId) {
        
        InsertObjectCommand insertObjectCommand = new InsertObjectCommand(parameter);
        insertObjectCommand.setoutIdentifier("outIdentifier");
        
        FireAllRulesCommand fireAllRulesCommand = new FireAllRulesCommand();
        GetobjectsCommand getobjectsCommand = new GetobjectsCommand();
        
        //dispose session
        //disposeCommand disposeCommand = new disposeCommand();
        
        KieCommands commandsFactory = KieServices.Factory.get().getCommands();
        List<Command<?>> commands = new ArrayList<Command<?>>();
        BatchExecutionCommand executionCommand = commandsFactory.newBatchExecution(commands,sessionId);

        commands.add(insertObjectCommand);
        commands.add(fireAllRulesCommand);
        commands.add(getobjectsCommand);
        //commands.add(disposeCommand);
        
        
        ServiceResponse<ExecutionResults> response = ruleClient.executeCommandsWithResults(containerId,xStreamXml.marshall(executionCommand));
        return response.getResult().getValue("outIdentifier");
    }
    
    //Para la version 7.36
    /**
     * Realiza una llamada al servidor remoto,ejecutando las reglas con los parametros ingresados
     * @param parameters Elementos a insertar
     * @param containerId Nombre del Contenedor (Proyecto de reglas)
     * @param sessionId Nombre de la KieSession para acceder al paquete de reglas
     * @param processName Nombre del proceso a ejecutar
     * @return Devuelve la lista de parametros con las modificaciones realizadas por la regla
     */
    public static List executeProcess(List parameters,String sessionId,String processName) {

        InsertElementsCommand insertElementsCommand = new InsertElementsCommand(parameters);
        insertElementsCommand.setoutIdentifier("outIdentifier");
        
        StartProcessCommand startProcessCommand = new StartProcessCommand(processName);
        startProcessCommand.setData(parameters);
        GetobjectsCommand getobjectsCommand = new GetobjectsCommand();
        
        //dispose session
        //disposeCommand disposeCommand = new disposeCommand();
        
        KieCommands commandsFactory = KieServices.Factory.get().getCommands();
        List<Command<?>> commands = new ArrayList<Command<?>>();
        BatchExecutionCommand executionCommand = commandsFactory.newBatchExecution(commands,sessionId);

        commands.add(insertElementsCommand);
        commands.add(startProcessCommand);
        commands.add(getobjectsCommand);
        //commands.add(disposeCommand);
        

        ServiceResponse<ExecutionResults> response = ruleClient.executeCommandsWithResults(containerId,xStreamXml.marshall(executionCommand));
        return (List)response.getResult().getValue("outIdentifier");
    }
    
    //Para la version 7.36
        /**
         * Realiza una llamada al servidor remoto,ejecutando las reglas con los parametros ingresados
         * @param parameters Elementos a insertar
         * @param containerId Nombre del Contenedor (Proyecto de reglas)
         * @param sessionId Nombre de la KieSession para acceder al paquete de reglas
         * @param processName Nombre del proceso a ejecutar
         * @return Devuelve la lista de parametros con las modificaciones realizadas por la regla
         */
        public static Object executeProcess(Object parameter,String processName) {

            InsertObjectCommand insertObjectCommand = new InsertObjectCommand(parameter);
            insertObjectCommand.setoutIdentifier("outIdentifier");
            
            StartProcessCommand startProcessCommand = new StartProcessCommand(processName);
            startProcessCommand.setData(Arrays.asList(parameter));
            GetobjectsCommand getobjectsCommand = new GetobjectsCommand();
            
            //dispose session
            //disposeCommand disposeCommand = new disposeCommand();
            
            KieCommands commandsFactory = KieServices.Factory.get().getCommands();
            List<Command<?>> commands = new ArrayList<Command<?>>();
            BatchExecutionCommand executionCommand = commandsFactory.newBatchExecution(commands,sessionId);

            commands.add(insertObjectCommand);
            commands.add(startProcessCommand);
            commands.add(getobjectsCommand);
            //commands.add(disposeCommand);
            

            ServiceResponse<ExecutionResults> response = ruleClient.executeCommandsWithResults(containerId,xStreamXml.marshall(executionCommand));
            return response.getResult().getValue("outIdentifier");
        }
    
    private static Properties readPropertiesFile(String fileName) {
        FileInputStream fis = null;
        Properties prop = null;
        try {
            fis = new FileInputStream(new java.io.File(".").getCanonicalPath() + "/" + "properties" + "/"
                    + fileName);
            prop = new Properties();
            prop.load(fis);
        } catch (FileNotFoundException fnfe) {
            fnfe.printstacktrace();
        } catch (IOException ioe) {
            ioe.printstacktrace();
        } finally {
            try {
                fis.close();
            } catch (IOException ioe) {
                ioe.printstacktrace();
            }
        }
        return prop;
    }
    
    
}

P.S。 :null将其抛出到executeProcess方法ServiceResponse<ExecutionResults> response = ruleClient.executeCommandsWithResults(containerId,xStreamXml.marshall(executionCommand));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?