У меня возникли проблемы с созданием подзадачи с использованием ColdSpring для создания экземпляров объектов.Подзадача с ColdSpring не имеет доступа к методам пакетов
В моем родительском приложении у меня есть конфигурационный файл ColdSpring, который без проблем создает экземпляр группы компонентов. Одним из них является компонент «Категории» (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, это, кажется, работает - однако это не кажется правильным, поскольку она работает как в родительском приложении.
Добавить к списку вещей, которые я новичок, ООП и наследование ... так что если я пойду об этом совершенно неправильно, то, пожалуйста, дайте мне знать. То, что я пытаюсь, - это разделение основных функций (управление пользователями, обработка ошибок, проверка и куча вещей, которые я обычно использую в каждом приложении), от конкретных функций приложения (на сайте электронной коммерции может отсутствовать компонент тележки например, CMS) таким образом, что по мере разработки новой функции я могу решить поставить ее в ядро и сделать ее доступной для всех моих приложений или в конкретном приложении. Итак, в этом примере я пытаюсь загрузить основные функциональные возможности в родительском приложении Application.cfc и иметь возможность автоматически использовать его.В идеале ребенку не нужно указывать основную функциональность в Coldspring.xml, но я не нашел способ запустить как родительский, так и дочерний.
Любая помощь, высоко ценится!
Я рекомендую вам разбить это на два вопроса (потому что они * являются * двумя вопросами). 1) проблема с методом getDatasource(); 2) как настроить родительское/вспомогательное приложение с Coldspring. И, возможно, третий вопрос - хотя и не подходит для S/O - о архитектуре вашего приложения. Все это в основном не связанные вопросы, и чрезмерно усложняют то, что вы просите здесь. –
Возможно, вам больше повезло задать особые вопросы Coldspring на форуме Coldspring (https://groups.google.com/forum/?fromgroups#!forum/coldspring-users). Не похоже, что на S/O много опыта Coldspring. –