aspose file tools*
The moose likes Other Application Frameworks and the fly likes load applicationContext from business layer Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Frameworks » Other Application Frameworks
Bookmark "load applicationContext from business layer" Watch "load applicationContext from business layer" New topic
Author

load applicationContext from business layer

praveen Shangunathan
Ranch Hand

Joined: Sep 06, 2005
Posts: 65
Hi all,
I want to getBean(s) from springs applicationContext. Since this is from the business layer I dont want to getServletContext() etc.and of course injection is not an option here.

Right now I am using ClasspathXmlApplicationContext and it works fine.

Is there a better way to do this?
Also when i do ApplicationContext context = new FileSystemXmlApplicationContext("applicationContext.xml"); is a new context created?(i hope only the context loaded at startup is returned.)

thanks
Mark Spritzler
ranger
Sheriff

Joined: Feb 05, 2001
Posts: 17259
    
    6

No that creates an actual new instance of an ApplicationContext. Why does your Business Server need access to it. I am sure there must be a better design approach so that your service classes won't need direct access to the ApplicationContext.

Anyway, besides there most likely being a design problem here, you can access the ApplicationContext in your service class by making your Service class ApplicationContextAware. This is an interface that you can implement, and you have a setAppplicationContext method to implement, that takes the ApplicationContext. That is how you can access it directly, and not use "new ApplicationContext...." code

Mark


Perfect World Programming, LLC - Two Laptop Bag - Tube Organizer
How to Ask Questions the Smart Way FAQ
praveen Shangunathan
Ranch Hand

Joined: Sep 06, 2005
Posts: 65
Hi Mark,
Thanks. that worked.
going to the design issue you had mentioned, i did not want spring access code lying around, but did not find an alternative.
i want to inject one of a dozen reports at runtime depending on something. i am not sure how to have spring do this. i could use a factory but did not want to use "new" and want spring inject a report.
kindly advice.
Saeed alkhen
Greenhorn

Joined: Feb 11, 2009
Posts: 4
Hi All...
I faced the same problem about get the applicationContext from the business layer and i follow the solution above and it worked correctly, thank a lot for your help. But my question now is :
What if a want to get a session scoped bean from the application context in business layer

In other word and with some details:
My Application implements the 3 layers as follow:
  • Icefaces for presentation layer
  • Spring for business layer
  • Hibernate for persistence layer


  • and i used acegi security to secure my application...

    Now after the user enter the login information the acegi started the authentication process and i use a custom LDAP authentication provider to check the login information in the Active Directory, and this custom provider is registered in the applicationContext.xml file.. In this case i suppose that this provider is in my business layer. In this provider and after he finish his work with Active Directory i need to get the application context and get the session scoped bean "user", and inside this bean i need to save my login information..

    So what i did till now: create my custom provider which is worked successfully and I implement the Interface "ApplicationContextAware" and override the method "setApplicationContext" and I get a reference to the application context which held in the "appContext" variable, after that I let the Provider to do his work and after that I invoke the method appContext.getBean("user") and i got an error message that told me :
    "Scope 'session' is not active for the current thread; consider defining a scoped proxy for this bean if you intend to refer to it from a singleton; nested exception is java.lang.IllegalStateException: No thread-bound request found: Are you referring to req...."

    So what is the solution .... ??? .. anyone can help my .... every suggestion or help will be appreciated
     
    jQuery in Action, 2nd edition
     
    subject: load applicationContext from business layer