From: Chad B. (JIRA) <ji...@an...> - 2005-03-05 18:51:33
|
[ http://thecla.homeftp.net:8380/jira/browse/SPRING-36?page=history ] Chad Brandon closed SPRING-36: ------------------------------ Resolution: Fixed Fix Version: 3.0RC1 > Give access to Spring ApplicationContext singleton > -------------------------------------------------- > > Key: SPRING-36 > URL: http://thecla.homeftp.net:8380/jira/browse/SPRING-36 > Project: Spring Cartridge > Type: Improvement > Reporter: Johnny Macchione > Assignee: Chad Brandon > Priority: Minor > Fix For: 3.0RC1 > > > When using EJBs, the following files are generated: > - applicationContext.xml > - beanRefFactory.xml > - mypackage.ServiceLocator > The latter references the applicationContext.xml file and is used by the ContextSingletonBeanFactoryLocator to locate one or more XML application context definition files, instantiate one or more ApplicationContexts from these files and make these accessible throughout the application. > The ContextSingletonBeanFactoryLocator is used within EJB implementations to locate POJO service beans to which the business logic is delegated. > The web tier uses the ServiceLocator to transparently lookup the session EJB instances from the JNDI context. > Everything is fine in this case. > When not using EJBs at all, only the following files are generated: > - applicationContext.xml > - mypackage.ServiceLocator > The ServiceLocator is now also responsible for locating an XML application context definition file and instantiate an ApplicationContext. > But in order to keep the interface unchanged with regards to the ServiceLocator generated when using EJBs, the ApplicationContext getContext() method is kept protected. > This makes it impossible to access the ApplicationContext instance from outside mypackage, e.g. to use it as parent context for a new application context. > I suggest leveraging Spring's ContextSingletonBeanFactoryLocator in the same way it is used with EJBs and implement the ServiceLocator to use the ContextSingletonBeanFactoryLocator singleton like this: > beanRefFactory.xml: > <beans> > <bean id="mypackage.applicationContext" > class="org.springframework.context.support.ClassPathXmlApplicationContext"> > <constructor-arg> > <list> > <value>mypackage/applicationContext.xml</value> > </list> > </constructor-arg> > </bean> > </beans> > ServiceLocator: > private BeanFactoryReference beanFactoryRef; > synchronized ApplicationContext getContext() { > if (beanFactoryRef == null) > { > BeanFactoryLocator beanFactoryLocator = > ContextSingletonBeanFactoryLocator.getInstance("beanRefFactory.xml"); > beanFactoryRef = beanFactoryLocator.useBeanFactory( > "mypackage.applicationContext"); > } > return (ApplicationContext) beanFactoryRef.getFactory(); > } > public synchronized void dispose() { > if (beanFactoryRef != null) { > beanFactoryRef.release(); > } > } -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://thecla.homeftp.net:8380/jira/secure/Administrators.jspa - If you want more information on JIRA, or have a bug to report see: http://www.atlassian.com/software/jira |