hi Ramkumar/Simon....yes, simon is correct in his assumption.  depending on the 
information passed into an operation, i need to set a couple properties on a 
bean (at runtime obviously).  as of right now, the i added the bean to the 
service and change the properties.  but, my preferred way (this is just my 
design) would be to not add the bean and use aop to grab the bean from the 
context and set the properties on the necessary operations.
 
but, simon is right.  in some instances properties need to be set on a bean and 
thus we'd need to be able to grab it.
 
sorry didn't get back sooner.   had a personal issue and then was out of 
town...thx abe
 
 



----- Original Message ----
From: Simon Laws <[EMAIL PROTECTED]>
To: [email protected]
Sent: Monday, September 8, 2008 5:19:29 AM
Subject: Re: sca namespace in spring





On Mon, Sep 8, 2008 at 12:05 PM, Ramkumar R <[EMAIL PROTECTED]> wrote:

Hi Abraham,
I have few corrections to my previous comments. Please see my comments inline 
with my previous comments.


On Thu, Sep 4, 2008 at 11:03 PM, Ramkumar R <[EMAIL PROTECTED]> wrote:

Hi Abraham,
Here I have few findings and suggestions for the spring namespace and 
application Context issues.

For Spring Namespace Issue:
As per my earlier comments, the custom XML tags like <sca:service>, 
<sca:reference> and <sca:property> and the sca namespace will be supported only 
when Tuscany creates the application context for you. 
The reason is Tuscany not only defines the bean definition for these tags, but 
also defines the logic. So I believe Tuscany does the right thing to handle the 
sca namespace.

A detailed article on how you would go about writing your own custom XML bean 
definition parsers and integrating such parsers into the Spring IoC container 
can be found here....
http://static.springframework.org/spring/docs/2.5.x/reference/extensible-xml.html
 

Loading Application Context using ClassPathXmlApplicationContext:
Defining a bean as shown below, 


<bean id="beanRefFactory" 
class="org.springframework.context.support.ClassPathXmlApplicationContext">
    <constructor-arg><list>
        <value>Organization-spring-context.xml</value>
    </list></constructor-arg>
</bean>

would also result in a namespace issue being thrown, as in this case an 
application context is being created using ClassPathXmlApplicationContext 
(which is not aware of the sca namespace handlers).

Using the ClassPathXmlApplicationContext as shown above will not throw 
namespace anymore. Identified that the namespace handler registration had some 
issue with Tuscany and its now been fixed as part of TUSCANY-2573.
As part of this fix, now the SCA namespace handlers are made aware to the 
Spring Container as a whole, these namespaces will be ignored by the 
application context other than SCAApplicationContext.

But still using ClassPathXmlApplicationContext does not provide the required 
results when used with Tuscany as this application context created ignores the 
<sca:service>, <sca:reference> and <sca:property> beans.
Your comments to my below question would help to understand the scanario better.




Here I have a question to ask, may be I am not good at spring, basically I am 
trying to understand what is the special purpose for using the 
ClassPathXmlApplicationContext to load the 
Organization-spring-context.xml file, while by default Tuscany would create the 
application context for this file when its been specified as 
<implementation.spring location="Organization-spring-context.xml"/> in the 
composite file?

Your Comments on this would help us to come up with a better solution.

Accessing the Application Context:
Trying to load an application context using the code shown below, 

ApplicationContext applicationContext = (ApplicationContext) 
ContextSingletonBeanFactoryLocator.getInstance("beanRefFactory.xml").useBeanFactory("beanRefFactory").getFactory();

to access the beans would also result in a namespace issue for the same reason 
shown above.

I believe there is a workaround to this problem, which demostrates how the 
runtime instance of the application context can be accessed and also get access 
to the beans as shown here.....

http://blog.jdevelop.eu/2008/07/06/access-the-spring-applicationcontext-from-everywhere-in-your-application/

This solution returns the SCAApplicationContext instance which resolves the 
namespace for you. Probably, you need to evaluate if this workaround helps your 
scenario.


Please provide us with your feedback on the same and let me know if I am 
missing something in this whole discussion. 

 -- 
Thanks & Regards,
Ramkumar Ramalingam

So what you are saying here Ram is that you can now read an SCA annotated 
application context using the standard Spring APIs. The context file will be 
read successfully but that the SCA annotations will be ignored. Sounds right to 
me. 

We do need to understand better Abraham's point about reading the application 
context in order to set other bean properties. I'm assuming that when he reads 
the application context from within the component implementation bean he's 
expecting to get hold of the context that SCA read originally so the fact that 
the context has SCA annotations in it is not so relevant. The objective is just 
to go in and set properties on beans and not re-start the appliation. 

Regards

Simon



      

Reply via email to