[jboss-user] [EJB 3.0] - @Depends injection after redeploy

ciSerg do-not-reply at jboss.com
Fri May 18 08:19:03 EDT 2007


Hi.

jdk5, jboss-4.2.0.CR2

Something strange in @Depends injection happens. I have two JMX deployed in _two_ different ears.


  | a.ear:
  | 
  | @Service(objectName = "A")
  | @Management(A.class)
  | public class ABean implements A {
  | 
  |     @Depends("B")
  |     private B b = null;
  | ...
  | }
  | 
  | b.ear:
  | 
  | @Service(objectName = "B")
  | @Management(B.class)
  | public class BBean implements B {
  | 
  | ...
  | }

When deployed firstly, everything is fine. Then I undeploy b.ear and depoly it again. I can see A.stop() executed on undeploy, but after b.ear is deployed again, no injection into A is done. (Looking into jndi for a value strangely fails too, but I think this is not correct to replace injection manually.) So, I need to redeploy all dependant ears to get proper injection done.

Is it a correct behavior?

I looked into source code, there is a org.jboss.ejb3.service.ServiceContainer class, where in rows 141-166 there is a method, which is called when B deployment happens:

public void start() throws Exception {
  |  super.start();
  |  try {
  |   initBeanContext();
  |   ...
  | (*)  injectDependencies(beanContext);
  | (**)  registerManagementInterface();
  |   ...         
  |   invokeOptionalMethod("start");
  |  } catch (Exception e) {
  |   e.printStackTrace();
  |   stop();
  |  }
  | }

In (*) does its work, but it uses ServiceContainer.beanContext.bean as a target for injection, while (**) calls start() for another instance of my JMX A, which is in ServiceContainer.singleton field.

I noticed that when we deploy an mx bean everything ok, ServiceContainer.singleton is used when ServiceContainer.beanContext is being inited, so ServiceContainer.singleton == ServiceContainer.beanContext.bean afterwards. But when we redeploy something our mx bean depends on, there is a call  of ServiceController.create() for all dependant mx beans (they should apparently be stopped until then), and at that time ServiceContainer.singleton != ServiceContainer.beanContext.bean, which causes the problem.

I am not an expert in JBoss, of cause my investigations and ideas can easily be incorrect. Please, help me understand why I need to restart the whole server if I only redeploy an ear...

--
Serg

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4046777#4046777

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4046777



More information about the jboss-user mailing list