【问题标题】:Drools Expert with Spring MVC使用 Spring MVC 的 Drools 专家
【发布时间】:2014-04-29 00:34:39
【问题描述】:

我正在使用 Spring MVC 和 Drools Expert.spring 版本 4.0.0 drools 版本(6.0.1)
我正在使用 RAD 8 和 WAS 8
应用程序无法启动并出现异常(见下文)
spring 集成在批处理模式下工作得很好。当我从 Web 应用程序调用它时它失败了
当我将 kie 后处理器添加到应用程序上下文时,Web 应用程序就会失败。

<bean id="kiePostProcessor" 
class="org.kie.spring.KModuleBeanFactoryPostProcessor"/>

这是堆栈跟踪。

初始化 Spring FrameworkServlet 'spring' [3/21/14 10:16:11:264 EDT] 0000009f DispatcherSer I org.springframework.web.servlet.FrameworkServlet initServletBean FrameworkServlet 'spring':初始化开始 [3/21/14 10:16:11:265 EDT] 0000009f DispatcherSer E org.springframework.web.servlet.FrameworkServlet initServletBean 上下文初始化失败 java.lang.NullPointerException 在 java.io.File.(File.java:233) 在 org.drools.compiler.kie.builder.impl.ClasspathKieProject.getPomProperties(ClasspathKieProject.java:228) 在 org.kie.spring.KModuleBeanFactoryPostProcessor.postProcessBeanFactory(KModuleBeanFactoryPostProcessor.java:95) 在 org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:265) 在 org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:177) 在 org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:609) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464) 在 org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:381) 在 org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:293) 在 org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106) 在 com.ibm.ws.webcontainer.webapp.WebApp.notifyServletContextCreated(WebApp.java:1680) 在 com.ibm.ws.webcontainer.webapp.WebAppImpl.initialize(WebAppImpl.java:410) 在 com.ibm.ws.webcontainer.webapp.WebGroupImpl.addWebApplication(WebGroupImpl.java:88) 在 com.ibm.ws.webcontainer.VirtualHostImpl.addWebApplication(VirtualHostImpl.java:169) 在 com.ibm.ws.webcontainer.WSWebContainer.addWebApp(WSWebContainer.java:746) 在 com.ibm.ws.webcontainer.WSWebContainer.addWebApplication(WSWebContainer.java:634) 在 com.ibm.ws.webcontainer.component.WebContainerImpl.install(WebContainerImpl.java:422) 在 com.ibm.ws.webcontainer.component.WebContainerImpl.start(WebContainerImpl.java:714) 在 com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:1160) 在 com.ibm.ws.runtime.component.DeployedApplicationImpl.fireDeployedObjectStart(DeployedApplicationImpl.java:1369) 在 com.ibm.ws.runtime.component.DeployedModuleImpl.start(DeployedModuleImpl.java:639) 在 com.ibm.ws.runtime.component.DeployedApplicationImpl.start(DeployedApplicationImpl.java:967) 在 com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.java:766) 在 com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplicationDynamically(ApplicationMgrImpl.java:1354) 在 com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:2150) 在 com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.java:445) 在 com.ibm.ws.runtime.component.CompositionUnitImpl.start(CompositionUnitImpl.java:123) 在 com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.java:388) 在 com.ibm.ws.runtime.component.CompositionUnitMgrImpl.access 500 美元(CompositionUnitMgrImpl.java:116) 在 com.ibm.ws.runtime.component.CompositionUnitMgrImpl$1.run(CompositionUnitMgrImpl.java:663) 在 com.ibm.ws.security.auth.ContextManagerImpl.runAs(ContextManagerImpl.java:5363) 在 com.ibm.ws.security.auth.ContextManagerImpl.runAsSystem(ContextManagerImpl.java:5579) 在 com.ibm.ws.security.core.SecurityContext.runAsSystem(SecurityContext.java:255) 在 com.ibm.ws.runtime.component.CompositionUnitMgrImpl.startCompositionUnit(CompositionUnitMgrImpl.java:677) 在 com.ibm.ws.runtime.component.CompositionUnitMgrImpl.startCompositionUnit(CompositionUnitMgrImpl.java:621) 在 com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.java:1246) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37) 在 java.lang.reflect.Method.invoke(Method.java:611) 在 sun.reflect.misc.Trampoline.invoke(MethodUtil.java:49) 在 sun.reflect.GeneratedMethodAccessor11.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37) 在 java.lang.reflect.Method.invoke(Method.java:611) 在 sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:256) 在 javax.management.modelmbean.RequiredModelMBean.invokeMethod(RequiredModelMBean.java:1085) 在 javax.management.modelmbean.RequiredModelMBean.invoke(RequiredModelMBean.java:966) 在 com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:848) 在 com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:773) 在 com.ibm.ws.management.AdminServiceImpl$1.run(AdminServiceImpl.java:1335) 在 com.ibm.ws.security.util.AccessController.doPrivileged(AccessController.java:118) 在 com.ibm.ws.management.AdminServiceImpl.invoke(AdminServiceImpl.java:1228) 在 com.ibm.ws.management.application.AppManagementImpl._startApplication(AppManagementImpl.java:1481) 在 com.ibm.ws.management.application.AppManagementImpl.startApplication(AppManagementImpl.java:1370) 在 com.ibm.ws.management.application.AppManagementImpl.startApplication(AppManagementImpl.java:1319) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37) 在 java.lang.reflect.Method.invoke(Method.java:611) 在 sun.reflect.misc.Trampoline.invoke(MethodUtil.java:49) 在 sun.reflect.GeneratedMethodAccessor11.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37) 在 java.lang.reflect.Method.invoke(Method.java:611) 在 sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:256) 在 javax.management.modelmbean.RequiredModelMBean.invokeMethod(RequiredModelMBean.java:1085) 在 javax.management.modelmbean.RequiredModelMBean.invoke(RequiredModelMBean.java:966) 在 com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:848) 在 com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:773) 在 com.ibm.ws.management.AdminServiceImpl$1.run(AdminServiceImpl.java:1335) 在 com.ibm.ws.security.util.AccessController.doPrivileged(AccessController.java:118) 在 com.ibm.ws.management.AdminServiceImpl.invoke(AdminServiceImpl.java:1228) 在 com.ibm.ws.management.connector.AdminServiceDelegator.invoke(AdminServiceDelegator.java:181) 在 com.ibm.ws.management.connector.ipc.CallRouter.route(CallRouter.java:247) 在 com.ibm.ws.management.connector.ipc.IPCConnectorInboundLink.doWork(IPCConnectorInboundLink.java:360) 在 com.ibm.ws.management.connector.ipc.IPCConnectorInboundLink$IPCConnectorReadCallback.complete(IPCConnectorInboundLink.java:602) 在 com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165) 在 com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217) 在 com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161) 在 com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138) 在 com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204) 在 com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775) 在 com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905) 在 com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1690)

【问题讨论】:

    标签: spring-mvc drools


    【解决方案1】:

    这是kie-spring 模块(6.1.0-FINAL 版本)中的一个缺陷。您应该使用以下依赖项。这为我解决了。

    <dependency>
       <groupId>org.kie</groupId>
       <artifactId>kie-spring</artifactId>
       <version>6.1.0.Beta1</version>
     </dependency>
    

    【讨论】:

      【解决方案2】:

      您好,我想分享一下我对此所做的研究。
      如果有人想将 spring mvc 和 drools 与“websphere”一起使用,这可能会很有用。
      **这仅在您使用 maven 时才有用。
      1.将所有dsl和dslr文件复制到你的maven web项目的src/main/resources文件夹中。
      2. 将您的 kmodule 文件放在 src/main/webapp/META-INF/kmodule.xml
      3. 放置一个文件 src\main\webapp\META-INF\maven\\artifactname\pom.properties
      注意 pom.properties 文件应该是一个常规的 maven pom.properties 文件,其中包含

      version=<version>  
      groupId=<packagename>  
      artifactId=<artifactid>  
      

      现在您的网络项目可以正常工作了。
      以上是解决 kie 从 jar 文件获取 dsl 和 drl 文件时遇到的问题的解决方法。 Kie 无法从 jar 文件中读取和处理 kmodule.xml 文件,因为它不支持 wsjar 协议。

      我也没有使用 kie-spring 集成,因为这给我带来了很多问题。 希望这可以帮助。我们的组织也不能使用测试版。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-22
        • 1970-01-01
        • 1970-01-01
        • 2016-07-21
        • 1970-01-01
        • 2021-12-20
        • 2018-03-05
        • 1970-01-01
        相关资源
        最近更新 更多