Hi,
I am having trouble deploying a Spring app into OC4J 904. I have an EAR with a war and an ejb component bundled together.
Problem is I cannot register my business interface classes in the web app with an EJB via JNDI on startup. Here is my Spring config in the web app:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!--
// Provides an interface to the Business tier via EJB.
-->
<bean id="applicationManager" class="org.springframework.aop.framework.ProxyFact oryBean">
<property name="proxyInterfaces" value="com.screening.ApplicationManager"/>
<property name="interceptorNames">
<list>
<value>applicationManagerInterceptor</value>
</list>
</property>
</bean>
<bean id="applicationManagerInterceptor" class="com.screening.ApplicationManagerInterceptor ">
<property name="methodInvoker" ref="applicationManagerEJB"/>
</bean>
<bean id="applicationManagerEJB" class="org.springframework.ejb.access.SimpleRemote StatelessSessionProxyFactoryBean">
<property name="jndiName" value="screening/ejb/applicationManager"/>
<property name="businessInterface" value="com.common.ejb.MethodInvoker"/>
</bean>
</beans>
However when I access the index.jsp I get this stack trace:
org.springframework.beans.factory.BeanCreationExce ption: Error creating bean with name 'applicationManagerInterceptor' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Can't resolve reference to bean 'applicationManagerEJB' while setting property 'methodInvoker'; nested exception is org.springframework.beans.factory.BeanCreationExce ption: Error creating bean with name 'applicationManagerEJB' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Initialization of bean failed; nested exception is javax.naming.NamingException: Error creating home instance: class java.lang.InstantiationException (Value not set)
org.springframework.beans.factory.BeanCreationExce ption: Error creating bean with name 'applicationManagerEJB' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Initialization of bean failed; nested exception is javax.naming.NamingException: Error creating home instance: class java.lang.InstantiationException (Value not set)
javax.naming.NamingException: Error creating home instance: class java.lang.InstantiationException (Value not set)
at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.ejb.DelayedHomeBinding.getInstance(Delayed HomeBinding.java:97)
at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.rmi.RMIBinding.getValue(RMIBinding.java:33 )
at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.rmi.RMIContext.getBinding(RMIContext.java: 934)
at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.rmi.RMIContext.lookupLocalObject(RMIContex t.java:701)
at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.rmi.RMIContext.lookup(RMIContext.java:89)
at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.ApplicationContext.lookup(ApplicationConte xt.java:248)
at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.ApplicationContext.lookup(ApplicationConte xt.java:119)
at javax.naming.InitialContext.lookup(InitialContext. java:345)
at org.springframework.jndi.JndiTemplate$1.doInContex t(JndiTemplate.java:123)
at org.springframework.jndi.JndiTemplate.execute(Jndi Template.java:85)
at org.springframework.jndi.JndiTemplate.lookup(JndiT emplate.java:121)
at org.springframework.jndi.JndiLocatorSupport.lookup (JndiLocatorSupport.java:71)
at org.springframework.jndi.JndiObjectLocator.lookup( JndiObjectLocator.java:106)
at org.springframework.ejb.access.AbstractSlsbInvoker Interceptor.refreshHome(AbstractSlsbInvokerInterce ptor.java:102)
at org.springframework.ejb.access.AbstractSlsbInvoker Interceptor.afterPropertiesSet(AbstractSlsbInvoker Interceptor.java:90)
at org.springframework.ejb.access.LocalStatelessSessi onProxyFactoryBean.afterPropertiesSet(LocalStatele ssSessionProxyFactoryBean.java:83)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.invokeInitMethods(Abstr actAutowireCapableBeanFactory.java:1003)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.createBean(AbstractAuto wireCapableBeanFactory.java:348)
at org.springframework.beans.factory.support.Abstract BeanFactory.getBean(AbstractBeanFactory.java:226)
at org.springframework.beans.factory.support.Abstract BeanFactory.getBean(AbstractBeanFactory.java:147)
at org.springframework.beans.factory.support.BeanDefi nitionValueResolver.resolveReference(BeanDefinitio nValueResolver.java:176)
at org.springframework.beans.factory.support.BeanDefi nitionValueResolver.resolveValueIfNecessary(BeanDe finitionValueResolver.java:105)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.applyPropertyValues(Abs tractAutowireCapableBeanFactory.java:957)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.populateBean(AbstractAu towireCapableBeanFactory.java:768)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.createBean(AbstractAuto wireCapableBeanFactory.java:330)
at org.springframework.beans.factory.support.Abstract BeanFactory.getBean(AbstractBeanFactory.java:226)
at org.springframework.beans.factory.support.Abstract BeanFactory.getBean(AbstractBeanFactory.java:147)
at org.springframework.aop.framework.ProxyFactoryBean .createAdvisorChain(ProxyFactoryBean.java:340)
at org.springframework.aop.framework.ProxyFactoryBean .setBeanFactory(ProxyFactoryBean.java:216)
at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.createBean(AbstractAuto wireCapableBeanFactory.java:343)
at org.springframework.beans.factory.support.Abstract BeanFactory.getBean(AbstractBeanFactory.java:226)
at org.springframework.beans.factory.support.Abstract BeanFactory.getBean(AbstractBeanFactory.java:147)
at org.springframework.beans.factory.support.DefaultL istableBeanFactory.preInstantiateSingletons(Defaul tListableBeanFactory.java:269)
at org.springframework.context.support.AbstractApplic ationContext.refresh(AbstractApplicationContext.ja va:317)
at org.springframework.web.context.support.AbstractRe freshableWebApplicationContext.refresh(AbstractRef reshableWebApplicationContext.java:134)
at org.springframework.web.context.ContextLoader.crea teWebApplicationContext(ContextLoader.java:230)
at org.springframework.web.context.ContextLoader.init WebApplicationContext(ContextLoader.java:156)
at org.springframework.web.context.ContextLoaderServl et.init(ContextLoaderServlet.java:81)
at javax.servlet.GenericServlet.init(GenericServlet.j ava:258)
at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.http.HttpApplication.loadServlet(HttpAppli cation.java:2094)
at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.http.HttpApplication.findServlet(HttpAppli cation.java:4523)
at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.http.HttpApplication.initPreloadServlets(H ttpApplication.java:4617)
at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.http.HttpApplication.initDynamic(HttpAppli cation.java:765)
at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.http.HttpApplication.<init>(HttpApplicatio n.java:497)
at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.Application.getHttpApplication(Application .java:886)
at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.http.HttpServer.getHttpApplication(HttpSer ver.java:688)
at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.http.HttpSite.getApplication(HttpSite.java :420)
at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.http.HttpRequestHandler.processRequest(Htt pRequestHandler.java:422)
at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.http.HttpRequestHandler.run(HttpRequestHan dler.java:270)
at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.http.HttpRequestHandler.run(HttpRequestHan dler.java:112)
at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].util.ReleasableResourcePooledExecutor$MyWorker.ru n(ReleasableResourcePooledExecutor.java:186)
at java.lang.Thread.run(Thread.java:479)
Now I am very suspicious that OC4J does not bind EJB to JNDI on server start up (the server starts far too fast!) and hence my web app cannot find the EJB in the JNDI tree. So my question is how can I force OC4J to bind an EJB to JNDI on start up. Or is there a way I can tell the web app to wait until the EJB is deployed via Spring?
Thanks in advance!
J


Reply With Quote