ColdSpring을 사용하여 하위 객체를 생성하여 객체를 인스턴스화하는 데 문제가 있습니다.ColdSpring을 사용한 하위 응용 프로그램은 패키지 메소드에 액세스 할 수 없습니다.
부모 응용 프로그램에서 문제없이 구성 요소를 인스턴스화하는 ColdSpring 구성 파일이 있습니다. 그 중 하나는 'Categories'(CategoryGateway) 구성 요소이며,이 구성 요소에는 테이블에 대한 다른 구성 요소 (NestedSetTreeTable)가 삽입되어 있습니다. 삽입 된 구성 요소에는 CategoryGateway 구성 요소에서 호출하는 패키지 메서드 인 'GetDatasource'가 들어 있습니다.
이 기능은 상위 응용 프로그램에서 문제없이 작동하지만 하위 응용 프로그램에서 구성 요소를 인스턴스화하려고하면 패키지 메서드에 CategoryGateway 구성 요소가 액세스 할 수없는 것으로 보입니다.
이제 저는 ColdSpring을 처음 접했고 부모 앱에서 하위 응용 프로그램을 만드는 개념에 익숙합니다. 따라서 올바르게 작동하는지 확신 할 수 없습니다.
부모 응용 프로그램은 ColdSpring 자체 coldspring.xml의 매핑 된 버전이 포함되어 있습니다 : 최대
여기 내 설정이다. coldspring.xml이 카테고리 구성 요소의 인스턴스에 다음이 포함되어 부모님의 Application.cfc에서
<!-- 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.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>
범주 하나가 오류를 throw하기 전에 이러한 방식으로로드되는 다른 핵심 구성 요소가 여러 개 있습니다. 따라서 기술이 작동하는 것처럼 보이고 자식 Application.cfc에서 명시 적으로 인스턴스화하지 않고 핵심 구성 요소에 액세스 할 수 있습니다. - 그러나이 잘하지 않는 것, 그것이 작동하기 때문에 그대로 나는 getDatasource 방법을 공개하는 경우
Bean creation exception during init() of core.com.categories.categoryGateway
component [core.com.categories.NestedSetTreeTable] has no function with name [getDatasource]:
, 그것을 작동하는 것 같다 :이 범주 구성 요소에 도달 할 때 그러나, 나는 다음과 같은 오류를받을 상위 앱에서
나는 OOP와 상속에 익숙한 것들의 목록에 ... 내가 완전히 잘못된 길로 가고 있다면 나에게 알려주세요. 내가 시도하고있는 것은 특정 앱 기능에서 핵심 기능 (사용자 관리, 오류 처리, 유효성 검사 및 모든 앱에서 재사용하는 것)을 분리하는 것입니다 (전자 상거래 사이트에서는 필요하지 않은 카트 구성 요소가있을 수 있습니다). 예를 들어 CMS에 의해) 새로운 기능을 개발할 때 핵심 기능을 모든 응용 프로그램이나 특정 응용 프로그램에서 사용할 수 있도록 결정할 수 있습니다. 그래서이 예제에서 부모의 Application.cfc에 핵심 기능을로드하고 자식이 자동으로 사용할 수있게하려고합니다.아이가 Coldspring.xml의 핵심 기능을 지정하지 않아도되지만, 부모와 자식을 모두 실행할 수있는 방법을 찾지 못했음이 이상적입니다.
도움을 주시면 감사하겠습니다.
두 개의 질문으로 나누는 것이 좋습니다 (*는 * 두 개의 질문이기 때문에). 1)'getDatasource()'메소드의 문제; 2) Coldspring으로 부모/하위 응용 프로그램을 구성하는 방법. 그리고 아마도 세 번째 질문은 S/O에 적합하지 않지만 응용 프로그램의 아키텍처에 관한 것입니다. 이것들은 모두 대부분 관련이없는 질문이며 당신이 여기서 묻고있는 것을 지나치게 복잡하게 만듭니다. –
Coldspring 포럼 (https://groups.google.com/forum/?fromgroups#!forum/coldspring-users)에서 Coldspring 관련 질문을하는 것이 더 바람직 할 수 있습니다. S/O에 관한 Coldspring 전문 지식이 많이있는 것 같지 않습니다. –