Kuali Rice Development
  1. Kuali Rice Development
  2. KULRICE-2011

Work with KFS team to setup KFS to run with Standalone Rice 1.0

    Details

    • Similar issues:
      KULRICE-3143Merge rice 1.0 kfs face-to-face branch into KFS trunk
      KULRICE-3757Work with KFS and KC team to test KFS 3 and KC 2 integrated with Rice 1.0.2 to verify that they are all compatible
      KULRICE-87KFS MySQL-ification
      KULRICE-1479Merge 0.9.2 KFS performance work into 0.9.2
      KULRICE-7064Setup KFS Locally for expanding Rice Sample App
      KULRICE-4622When running with standalone Rice, ImmediateEmailService never runs locally
      KULRICE-7451Future Action Requests tab does not work when using standalone Rice server
      KULRICE-2143Setup a space in sakai for rice impl and collab exactly like there is for KFS
      KULRICE-31Work with the KFS team on putting in place a process and timelines for KNS extraction efforts
      KULRICE-8730Using a lookup from a KFS document in Firefox cause a stacktrace to be thrown
    • Rice Module:
      KEW
    • Application Requirement:
      KFS

      Description

      We need to work with the KFS team to help them set up KFS to run against a standalone Rice server.

      There are going to be some known issues we will need to work out as a result of this:

      Config property collisions

      • Parameters - component names for central UI - go out to each application and poll - with service bus there's a way to get all services of a name, regardless of where they're deployed
      • Doc search - can remote your doc search components with the exception of the one that deals with result sets - are we dealing with search result set in our doc search generator
      • Plugin simply being a way of remoting?
      • If we have to load kfs dds on standalone server in plugin, we may have issues
      • Need to update our packaging process for kfs with standalone rice
      • Other things we might need as EBOs? E.g. campus, campus type
      • Figure out what really belongs in PBO - since afterInsert and afterUpdate save the notes - (ran into this when making doc header an EBO)
      • Should the business object service be aware of these remote objects / somehow deal with it
      • Parameter service will be like workflow info, identity management service, etc. - fronts something that may be on the bus
      1. kfs-build.properties
        3 kB
        Jeremy Hanson
      2. KFSpatch.txt
        11 kB
        Jeremy Hanson
      3. rice-config.xml
        6 kB
        Jeremy Hanson
      4. RICEpatch.txt
        13 kB
        Jeremy Hanson

        Issue Links

          Activity

          Hide
          Jeremy Hanson added a comment -

          That sounds good.

          I'm having a problem getting KFS to start up with standalone Rice.

          I'm getting this error:
          2009-07-17 09:28:49,830 [main] ERROR org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/kfs-dev] :: Exception sending context initialized event to listener instance of class org.kuali.kfs.sys.context.WebApplicationInitListener
          org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'rice' defined in class path resource [spring-rice-configurer.xml]: Invocation of init method failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'budgetDocumentService' defined in class path resource [org/kuali/kfs/module/bc/spring-bc.xml]: Cannot resolve reference to bean 'enDocumentRouteHeaderService' while setting bean property 'routeHeaderService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'enDocumentRouteHeaderService' is defined
          Caused by:
          org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'budgetDocumentService' defined in class path resource [org/kuali/kfs/module/bc/spring-bc.xml]: Cannot resolve reference to bean 'enDocumentRouteHeaderService' while setting bean property 'routeHeaderService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'enDocumentRouteHeaderService' is defined
          Caused by:
          org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'enDocumentRouteHeaderService' is defined
          at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:345)
          at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedBeanDefinition(AbstractBeanFactory.java:894)
          at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:243)
          at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
          at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:261)
          at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:109)
          at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1073)
          at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:835)
          at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:423)
          at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)
          at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:144)
          at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)
          at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
          at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:279)
          at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:360)
          at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:91)
          at org.kuali.rice.core.resourceloader.SpringResourceLoader.start(SpringResourceLoader.java:76)
          at org.kuali.rice.core.resourceloader.ResourceLoaderContainer.start(ResourceLoaderContainer.java:54)
          at org.kuali.rice.core.resourceloader.BaseResourceLoader.start(BaseResourceLoader.java:105)
          at org.kuali.rice.core.config.RiceConfigurer.loadSpringContext(RiceConfigurer.java:197)
          at org.kuali.rice.core.config.RiceConfigurer.initializeResourceLoaders(RiceConfigurer.java:157)
          at org.kuali.rice.core.config.RiceConfigurer.start(RiceConfigurer.java:138)
          at org.kuali.rice.core.config.RiceConfigurer.afterPropertiesSet(RiceConfigurer.java:112)
          at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1175)
          at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1145)
          at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:427)
          at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)
          at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:144)
          at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)
          at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
          at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:239)
          at org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:766)
          at org.springframework.context.support.AbstractApplicationContext.registerListeners(AbstractApplicationContext.java:562)
          at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:357)
          at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:91)
          at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:75)
          at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:65)
          at org.kuali.rice.kns.util.spring.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:44)
          at org.kuali.kfs.sys.context.SpringContext.initializeApplicationContext(SpringContext.java:276)
          at org.kuali.kfs.sys.context.SpringContext.initializeApplicationContext(SpringContext.java:229)
          at org.kuali.kfs.sys.context.WebApplicationInitListener.contextInitialized(WebApplicationInitListener.java:33)
          at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3764)
          at org.apache.catalina.core.StandardContext.start(StandardContext.java:4216)
          at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:760)
          at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:740)
          at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544)
          at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:626)
          at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:553)
          at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:488)
          at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1150)
          at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
          at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
          at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1022)
          at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
          at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
          at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
          at org.apache.catalina.core.StandardService.start(StandardService.java:448)
          at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
          at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          at java.lang.reflect.Method.invoke(Method.java:597)
          at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
          at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
          Jul 17, 2009 9:28:49 AM org.apache.catalina.core.StandardContext start
          SEVERE: Error listenerStart

          Essentially, in spring-bc.xml, the budgetDocumentService has a property for routeHeaderService, but since we are trying to run remote KEW, the routeHeaderService doesn't exist. The routeHeaderService property is also on the genesisDao bean.

          Any idea on how to handle this?

          Show
          Jeremy Hanson added a comment - That sounds good. I'm having a problem getting KFS to start up with standalone Rice. I'm getting this error: 2009-07-17 09:28:49,830 [main] ERROR org.apache.catalina.core.ContainerBase. [Catalina] . [localhost] . [/kfs-dev] :: Exception sending context initialized event to listener instance of class org.kuali.kfs.sys.context.WebApplicationInitListener org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'rice' defined in class path resource [spring-rice-configurer.xml] : Invocation of init method failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'budgetDocumentService' defined in class path resource [org/kuali/kfs/module/bc/spring-bc.xml] : Cannot resolve reference to bean 'enDocumentRouteHeaderService' while setting bean property 'routeHeaderService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'enDocumentRouteHeaderService' is defined Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'budgetDocumentService' defined in class path resource [org/kuali/kfs/module/bc/spring-bc.xml] : Cannot resolve reference to bean 'enDocumentRouteHeaderService' while setting bean property 'routeHeaderService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'enDocumentRouteHeaderService' is defined Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'enDocumentRouteHeaderService' is defined at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:345) at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedBeanDefinition(AbstractBeanFactory.java:894) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:243) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:261) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:109) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1073) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:835) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:423) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:144) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:279) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:360) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:91) at org.kuali.rice.core.resourceloader.SpringResourceLoader.start(SpringResourceLoader.java:76) at org.kuali.rice.core.resourceloader.ResourceLoaderContainer.start(ResourceLoaderContainer.java:54) at org.kuali.rice.core.resourceloader.BaseResourceLoader.start(BaseResourceLoader.java:105) at org.kuali.rice.core.config.RiceConfigurer.loadSpringContext(RiceConfigurer.java:197) at org.kuali.rice.core.config.RiceConfigurer.initializeResourceLoaders(RiceConfigurer.java:157) at org.kuali.rice.core.config.RiceConfigurer.start(RiceConfigurer.java:138) at org.kuali.rice.core.config.RiceConfigurer.afterPropertiesSet(RiceConfigurer.java:112) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1175) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1145) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:427) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:144) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160) at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:239) at org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:766) at org.springframework.context.support.AbstractApplicationContext.registerListeners(AbstractApplicationContext.java:562) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:357) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:91) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:75) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:65) at org.kuali.rice.kns.util.spring.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:44) at org.kuali.kfs.sys.context.SpringContext.initializeApplicationContext(SpringContext.java:276) at org.kuali.kfs.sys.context.SpringContext.initializeApplicationContext(SpringContext.java:229) at org.kuali.kfs.sys.context.WebApplicationInitListener.contextInitialized(WebApplicationInitListener.java:33) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3764) at org.apache.catalina.core.StandardContext.start(StandardContext.java:4216) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:760) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:740) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544) at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:626) at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:553) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:488) at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1150) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1022) at org.apache.catalina.core.StandardHost.start(StandardHost.java:736) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) at org.apache.catalina.core.StandardService.start(StandardService.java:448) at org.apache.catalina.core.StandardServer.start(StandardServer.java:700) at org.apache.catalina.startup.Catalina.start(Catalina.java:552) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433) Jul 17, 2009 9:28:49 AM org.apache.catalina.core.StandardContext start SEVERE: Error listenerStart Essentially, in spring-bc.xml, the budgetDocumentService has a property for routeHeaderService, but since we are trying to run remote KEW, the routeHeaderService doesn't exist. The routeHeaderService property is also on the genesisDao bean. Any idea on how to handle this?
          Hide
          Jeremy Hanson added a comment -

          Notes on rice standalone

          Database:
          1. Created two databases (schemas kuldemo and kulkfs)

          Rice:
          1. Create rice-config.xml in /usr/local/rice
          2. modify web.xml file to contain CAS stuff

          • we will want to be able to disable this and fill in custom values from the properties file. Currently it is hard coded.
            3. KULRICE-3381 and KULRICE-3382

          KFS:
          1. Changes to build.properties

          • added rice.standalone property. set to true
          • configuration changes for local setup:
          • changed keystore.filename to use the same as rice
          • changed keystore.file to use the same as rice
          • changed rice.server.url to point to rice application.
          • changed rice.externalizable.images.url because it was set wrong.
          • commented out kim.mode, kew.mode, and ksb.mode so we can set automatically in build.xml
          • rice.server.datasource.username and rice.server.datasource.password were set to a value that wasn't filled, so they were changed.
            2. Changes to build-foundation.xml
          • changed update-rice-jars target to do a maven install, and copy .war file into build/project
            3. Changes to build.xml
          • conditions set to test rice.standalone
          • rice.dev.mode set to false if rice.standalone = true
          • modified filter-project-rice to depend on two new targets (filter-project-rice-unzip-web, and filter-project-rice-publish-war)
          • filter-project-rice-unzip-web - just extracts web zip file - still needed for struts-config.xml files
          • filter-project-rice-publish-war - if rice.standalone=true, copy war file to server's webapps directory.
          • set kim.mode and kew.mode to embedded if rice.standalone = true
            4. Added rice-1.0.0-SNAPSHOT-server.war to build/project directory
            5. Set rice datasource details in kfs-build.properties
          Show
          Jeremy Hanson added a comment - Notes on rice standalone Database: 1. Created two databases (schemas kuldemo and kulkfs) Rice: 1. Create rice-config.xml in /usr/local/rice 2. modify web.xml file to contain CAS stuff we will want to be able to disable this and fill in custom values from the properties file. Currently it is hard coded. 3. KULRICE-3381 and KULRICE-3382 KFS: 1. Changes to build.properties added rice.standalone property. set to true configuration changes for local setup: changed keystore.filename to use the same as rice changed keystore.file to use the same as rice changed rice.server.url to point to rice application. changed rice.externalizable.images.url because it was set wrong. commented out kim.mode, kew.mode, and ksb.mode so we can set automatically in build.xml rice.server.datasource.username and rice.server.datasource.password were set to a value that wasn't filled, so they were changed. 2. Changes to build-foundation.xml changed update-rice-jars target to do a maven install, and copy .war file into build/project 3. Changes to build.xml conditions set to test rice.standalone rice.dev.mode set to false if rice.standalone = true modified filter-project-rice to depend on two new targets (filter-project-rice-unzip-web, and filter-project-rice-publish-war) filter-project-rice-unzip-web - just extracts web zip file - still needed for struts-config.xml files filter-project-rice-publish-war - if rice.standalone=true, copy war file to server's webapps directory. set kim.mode and kew.mode to embedded if rice.standalone = true 4. Added rice-1.0.0-SNAPSHOT-server.war to build/project directory 5. Set rice datasource details in kfs-build.properties
          Hide
          Eric Westfall added a comment -

          Coding and project work here is pretty much done pending testing. I haven't committed the KFS changes (Rice changes are committed). I'm waiting to hear from someone on the KFS side before I make this change because I don't want to put it in there without ensuring that someone knows it's going in.

          Once committed, it shouldn't change experience of developers unless they change the settings in kfs-build.properties that trigger a Rice standlone server build and deployment.

          Subsequent work required here is to try and deploy this into one of the test environments pointing at one of the "Kuali Client" Rice test environments

          Show
          Eric Westfall added a comment - Coding and project work here is pretty much done pending testing. I haven't committed the KFS changes (Rice changes are committed). I'm waiting to hear from someone on the KFS side before I make this change because I don't want to put it in there without ensuring that someone knows it's going in. Once committed, it shouldn't change experience of developers unless they change the settings in kfs-build.properties that trigger a Rice standlone server build and deployment. Subsequent work required here is to try and deploy this into one of the test environments pointing at one of the "Kuali Client" Rice test environments
          Hide
          Eric Westfall added a comment -

          Changing fix version to 1.0.1 since we will finish up any remaining work with KFS in that version of Rice.

          Show
          Eric Westfall added a comment - Changing fix version to 1.0.1 since we will finish up any remaining work with KFS in that version of Rice.
          Hide
          Eric Westfall added a comment -

          I think the work for this has pretty much completed pending more testing (KFS test environments are nearly setup now).

          Show
          Eric Westfall added a comment - I think the work for this has pretty much completed pending more testing (KFS test environments are nearly setup now).

            People

            • Assignee:
              Eric Westfall
              Reporter:
              Jerry Neal (Inactive)
            • Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

              • Due:
                Created:
                Updated:
                Resolved:

                Time Tracking

                Estimated:
                Original Estimate - 1 week, 3 days
                1w 3d
                Remaining:
                Remaining Estimate - 1 week, 3 days
                1w 3d
                Logged:
                Time Spent - Not Specified
                Not Specified

                  Structure Helper Panel