Je n'arrive pas à créer une sous-application utilisant ColdSpring pour instancier mes objets.La sous-application avec ColdSpring n'a pas accès aux méthodes de package
Dans mon application parente, j'ai un fichier de configuration ColdSpring qui instancie un tas de composants sans problème. L'un d'entre eux est un composant 'Categories' (CategoryGateway), qui a un autre composant pour la table (NestedSetTreeTable) injecté dedans. Le composant injecté contient une méthode de package, 'GetDatasource', appelée par le composant CategoryGateway.
Cela fonctionne sans problèmes dans mon application parente, cependant lorsque j'essaie d'instancier le composant dans mon sous-application, il semble que la méthode du package soit inaccessible au composant CategoryGateway.
Maintenant, je suis très nouveau dans ColdSpring - et aussi au concept de créer une sous-application à partir d'une application parente - donc je ne suis pas sûr de faire les choses correctement.
Voici mon mise en place:
app Parent contient une version de mappée COLDSPRING et sa propre coldspring.xml. Le coldspring.xml contient les éléments suivants pour instancier les catégories de composants:
<!-- 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>
Dans Application.cfc de mes parents, j'instancier ainsi le composant:
Application.com.categories = beanFactory.getBean('categories');
Tout fonctionne correctement. Maintenant, dans ma sous-application, j'ai une autre version mappée de ColdSpring, et un fichier coldspring.xml séparé afin que je puisse l'utiliser pour instancier des composants spécifiques à l'application secondaire. J'ai vérifié que le fichier coldspring.xml correct est en cours d'exécution.
Je n'instancie pas les composants de base dans Application.cfc de mon sous-application, mais j'appelle Super.onApplicationStart pour que la méthode parente soit exécutée. contient le code instanciation du parent, mais il utilise Coldspring.xml de l'enfant à trouver les composants - donc j'ai créé une cartographie à l'application mère, et ajusté en conséquence Coldspring.xml de l'enfant - donc ce lit comme suit:
<!-- 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>
Plusieurs autres composants principaux sont chargés de cette manière avant que les catégories 1 ne génèrent une erreur. La technique semble donc fonctionner et j'ai accès à mes composants de base sans les instancier explicitement dans Application.cfc de l'enfant. Cependant, quand il arrive à la catégorie des composants, je reçois l'erreur suivante:
Bean creation exception during init() of core.com.categories.categoryGateway
component [core.com.categories.NestedSetTreeTable] has no function with name [getDatasource]:
Si je fais le public méthode getDataSource, il semble fonctionner - mais cela ne semble pas juste, car il fonctionne comme il est dans l'application parente
Ajouter à la liste des choses que je suis nouveau, OOP et l'héritage ... donc si je vais à ce sujet tout à fait le mauvais sens alors s'il vous plaît faites le moi savoir. Ce que je tente est la séparation des fonctionnalités de base (gestion des utilisateurs, gestion des erreurs, validation et un tas de choses que j'ai tendance à réutiliser dans chaque application) à partir des fonctionnalités spécifiques des applications (un site e-commerce peut nécessiter un composant panier par un CMS, par exemple) de telle sorte que lorsque je développe une nouvelle fonctionnalité, je peux décider de la mettre dans le noyau et de la rendre disponible pour toutes mes applications, ou dans l'application spécifique. Donc, dans cet exemple, j'essaie de charger la fonctionnalité de base dans le fichier Application.cfc du parent et de permettre à l'enfant de l'utiliser automatiquement.Idéalement, l'enfant ne devrait pas avoir à spécifier la fonctionnalité de base dans Coldspring.xml, mais je n'ai pas trouvé un moyen d'exécuter à la fois le parent et l'enfant.
Toute aide, très appréciée!
Je vous recommande de diviser cette question en deux questions (parce qu'elles * sont * deux questions). 1) le problème avec la méthode 'getDatasource()'; 2) comment configurer votre parent/sous-application avec Coldspring. Et peut-être une troisième question - bien que pas un bon choix pour S/O - sur l'architecture de votre application. Ce sont toutes des questions pour la plupart sans rapport, et compliquent trop ce que vous demandez ici. –
Vous aurez peut-être plus de chance de poser des questions spécifiques à Coldspring sur le forum Coldspring (https://groups.google.com/forum/?fromgroups#!forum/coldspring-users). Il ne semble pas qu'il y ait beaucoup d'expertise Coldspring en S/O. –