Only BeanFactories that are constructed by SpringDeployer can reference beans
from parent BeanFactories.
In your case parent BF is constructed by SpringDeployer, but your child BF is
constructed by regular Spring ContextLoader.
And only SpringDeployer knows about parent=(<some_parent>) notion.
You can use something like this:
| public abstract class AbstractJndiContextLoader extends ContextLoader {
|
| protected String getJndiName(ServletContext servletContext) {
| String jndiName = DEFAULT_ROOT_APP_CONTEXT_JNDI_NAME;
| if (servletContext.getInitParameter(ROOT_JNDI_APP_CONTEXT_KEY) !=
null) {
| jndiName =
servletContext.getInitParameter(ROOT_JNDI_APP_CONTEXT_KEY);
| }
| return jndiName;
| }
|
| protected Context createContext() throws BeansException {
| try {
| return new InitialContext();
| } catch (Exception e) {
| throw new ApplicationContextException("Cannot create naming
context!", e);
| }
| }
|
| }
|
| public abstract class JndiContextSaver extends AbstractJndiContextLoader {
|
| @Override
| protected WebApplicationContext
createWebApplicationContext(ServletContext servletContext, ApplicationContext
parent) throws BeansException {
| try {
| WebApplicationContext wac =
super.createWebApplicationContext(servletContext, parent);
| bindApplicationContext(getJndiName(servletContext), wac);
| return wac;
| } catch (Exception e) {
| throw new ApplicationContextException("Cannot bind application
context.", e);
| }
| }
|
| protected abstract void bindApplicationContext(String jndiName,
ApplicationContext applicationContext) throws Exception;
|
| @Override
| public void closeWebApplicationContext(ServletContext servletContext) {
| unbindApplicationContext(getJndiName(servletContext));
| super.closeWebApplicationContext(servletContext);
| }
|
| protected abstract void unbindApplicationContext(String jndiName);
|
| }
|
| public class JBossJndiContextSaver extends JndiContextSaver {
|
| protected void bindApplicationContext(String jndiName,
ApplicationContext applicationContext) throws Exception {
| NonSerializableFactory.bind(createContext(), jndiName,
applicationContext);
| }
|
| protected void unbindApplicationContext(String jndiName) {
| try {
| NonSerializableFactory.unbind(createContext(), jndiName);
| } catch (NamingException e) {
| LogFactory.getLog(getClass()).warn("Exception unbinding
application context.", e);
| }
| }
|
| }
|
| public class JndiContextSaverListener extends
InitializerContextLoaderListener {
|
| @Override
| protected ContextLoader createContextLoader() {
| return new JBossJndiContextSaver();
| }
|
| }
|
| <listener>
|
<listener-class>com.alesj.acme.webcommon.context.JndiContextSaverListener</listener-class>
| </listener>
|
|
HTH,
Ales
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4056211#4056211
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4056211
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user