我在创建使用ColdSpring实例化对象的子应用程序时遇到问题。ColdSpring的子应用程序无法访问软件包方法
在我的父应用程序中,我有一个ColdSpring配置文件,它可以实例化一堆没有问题的组件。其中之一是一个'Categories'(CategoryGateway)组件,该组件具有注入该表的另一个组件(NestedSetTreeTable)。注入的组件包含一个包类方法,GetDatasource由CategoryGateway组件调用。
这适用于我的父应用程序没有问题,但是当我尝试在我的子应用程序中实例化组件时,似乎该包方法无法访问到CategoryGateway组件。
现在,我对ColdSpring非常陌生 - 也是从父应用程序创建子应用程序的概念 - 所以我不确定我是否正确地做事情。
这里是我的设立:
父应用程序包含ColdSpring和自身coldspring.xml的映射版本。 的coldspring.xml包含实例化类成分如下:
<!-- Categories CFC -->
<bean id="categories" parent="config" class="com.categories.categoryGateway">
<constructor-arg name="sCategoriesTable">
<value>${sCategoriesTable}</value>
</constructor-arg>
<constructor-arg name="sNSTTable">
<value>${sNSTTable}</value>
</constructor-arg>
<constructor-arg name="NST">
<ref bean="categoriesNST" />
</constructor-arg>
</bean>
<!-- Categories NST Table CFC -->
<bean id="categoriesNST" parent="config" class="com.categories.NestedSetTreeTable">
<constructor-arg name="datasourceName">
<value>${sDSN}</value>
</constructor-arg>
<constructor-arg name="table">
<value>${sNSTTable}</value>
</constructor-arg>
</bean>
在我父母的的Application.cfc,我实例化的组件这样的:
Application.com.categories = beanFactory.getBean('categories');
所有工作正常。 现在,在我的子应用程序中,我有另一个ColdSpring映射版本和一个单独的coldspring.xml,以便我可以使用它来实例化特定于子应用程序的组件。 我检查了正在运行正确的coldspring.xml。
我没有在我的子应用程序的Application.cfc中实例化基础组件,而是调用Super.onApplicationStart来获取父级的方法来运行。家长的包含实体化的代码,但是它使用孩子的Coldspring.xml找到组件 - 因此,我创建了一个映射到父应用程序,并相应地调整孩子的Coldspring.xml - 所以这个写着:
<!-- Categories CFC -->
<bean id="categories" parent="config" class="core.com.categories.categoryGateway">
<constructor-arg name="sCategoriesTable">
<value>${sCategoriesTable}</value>
</constructor-arg>
<constructor-arg name="sNSTTable">
<value>${sNSTTable}</value>
</constructor-arg>
<constructor-arg name="NST">
<ref bean="categoriesNST" />
</constructor-arg>
</bean>
<!-- Categories NST Table CFC -->
<bean id="categoriesNST" parent="config" class="core.com.categories.NestedSetTreeTable">
<constructor-arg name="datasourceName">
<value>${sDSN}</value>
</constructor-arg>
<constructor-arg name="table">
<value>${sNSTTable}</value>
</constructor-arg>
</bean>
还有其他几个核心组件在这些类别之前引发错误 - 所以这个技术看起来可以正常工作,并且我可以访问我的核心组件,而无需在子项的Application.cfc中显式实例化它们。 然而,当它到达的类别组成部分,我收到以下错误:
Bean creation exception during init() of core.com.categories.categoryGateway
component [core.com.categories.NestedSetTreeTable] has no function with name [getDatasource]:
如果我做了getDataSource的方法公开,似乎工作 - 但是这似乎并不正确,因为它的工作原理是为在父应用程序中。
添加到我新来的东西,OOP和继承...所以如果我要完全错误的方式,那么请让我知道。 我试图从特定应用程序功能中分离出核心功能(用户管理,错误处理,验证以及一些我倾向于在每个应用程序中重复使用的内容)(电子商务网站可能不需要购物车组件以CMS为例),以这种方式,当我开发一项新功能时,我可以决定将其放入核心,并将其提供给所有应用程序或特定应用程序。 所以在这个例子中,我试图在父级的Application.cfc中加载核心功能,并让孩子自动地使用它。理想情况下,孩子不应该在Coldspring.xml中指定核心功能,但我还没有找到同时运行父母和孩子的方法。
任何帮助,非常感谢!
我建议你打破了这一点到两个问题(因为*的*两个问题)。 1)'getDatasource()'方法的问题; 2)如何使用Coldspring配置父/子应用程序。可能还有第三个问题 - 尽管不适合S/O - 关于应用程序的架构。这些都是大多数不相关的问题,并使你在这里问的问题过于复杂。 – 2013-04-07 21:16:25
你可能有更多的运气,要求对Coldspring论坛具体Coldspring-问题(https://groups.google.com/forum/?fromgroups#!forum/coldspring-users)。它看起来并不像S/O上的Coldspring专业知识。 – 2013-04-07 21:28:26