[weld-issues] [JBoss JIRA] Created: (CDITCK-140) TCK uses cyclic @PostConstruct calls which is forbidden by JSR-250

Mark Struberg (JIRA) jira-events at lists.jboss.org
Mon Apr 12 12:29:37 EDT 2010


TCK uses cyclic @PostConstruct calls which is forbidden by JSR-250
------------------------------------------------------------------

                 Key: CDITCK-140
                 URL: https://jira.jboss.org/jira/browse/CDITCK-140
             Project: CDI TCK
          Issue Type: Bug
      Security Level: Public (Everyone can see)
          Components: Tests
            Reporter: Mark Struberg


from JSR-250-1.1.MREL section 2.5:
"The PostConstruct annotation is used on a method that needs to be executed after
dependency injection is done to perform any initialization. This method MUST be
invoked before the class is put into service."

Which I read as "may only get used by others after the @PostConstruct annotated method did run".

This is backed by the following example

public BeanA {
  private @Inject BeanB b;
  private int x = 0;
  public int getX() { return x; }
  @PostConstruct void init() { x = b.getX()+7; }
}
  
public BeanB {
  private @Inject BeanA a;
  private int x = 0;
  public int getX() { return x; }
  @PostConstruct void init() { x = a.getX()+9; }
}

which value do a.x and b.x get finally? This would simply be non-deterministic - and therefore forbidden by the JSR-250 spec.

Such kind of circular @PostConstruct method calls happen e.g. in CircularDependencyTest Pig -> Food -> Pig


-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the weld-issues mailing list