yup, forgot to mention: please do not apply the patch to SVN yet, this is only 
ment for looking at the XMLs.

LieGrue,
strub

--- Mark Struberg <[email protected]> schrieb am Do, 15.1.2009:
> Von: Mark Struberg <[email protected]>
> Betreff: Re: XML definition for constructor injection
> An: [email protected]
> Datum: Donnerstag, 15. Januar 2009, 20:28
> I had long night yesterday and like to share my outcome.
> 
> First, big thanks to Gurkan again for being so patient with
> me yesterday ;)
> 
> Oki, here is what I guess is the answer to my question in
> form of a patch. I reread the spec and somehow I have the
> gut feeling that either I still do not understand it fully
> (most probably) or the spec is still a bit inconsistent or
> we do have something missing in the implementation yet. E.g.
> we currently do not allow Enums, <Array> and 
> primitive wrapper classes like java.lang.Integer in
> constructor injection. Whereas the spec states that 
> > 10.3.3. Bean constructor declarations -> 10.6
> > 10.6 Injection point declarations -> 10.8
> > 10.8 Specifying bean types and bindings
> > • an element that represents a Java class or
> interface, 
> > or <Array> ...
> 
> The spec says nothing about real primitive types like int
> though. But this would perfectly make sense to me, like one
> may have an existing service which has to be filled. And all
> the needed functionality is already there for the field
> injection.
> 
> Please review the XMLs in the patch if I interpreted the
> spec correctly!
> 
> status so far:
> .) The example with invoking 
> TstBeanConstructor(CtParameter) works
> .) I have a patch for making the
> TstBeanConstructor(Integer) work, but it's pretty ugly,
> so I will only work on this if you confirm that this use
> case should work according to the spec.
> .) I'm not sure if TstBeanConstructor(int,int) is ok
> for the spec. Doesn't work anyway ;)
> 
> 
> Another thing I was not really aware of:
> > XML-based bean declarations define additional
> beans—they do not 
> > redefine or disable any bean that was declared via
> annotations.
> I always thought the XML based may redefine the beans
> behaviour. E.g. if one bean has a standard scope, I may
> override the scope via XML. Or I may change the injection of
> a service used on a production server. This would really be
> handy in praxis!
> 
> txs,
> strub
> 
> --- Mark Struberg <[email protected]> schrieb am Mi,
> 14.1.2009:
> 
> > Von: Mark Struberg <[email protected]>
> > Betreff: Re: XML definition for constructor injection
> > An: [email protected]
> > Datum: Mittwoch, 14. Januar 2009, 22:56
> > Here is an example of what I like to have:
> > 
> > Let's assume I have a _given_
> my.company.ConfigService
> > (and I don't even have the sources) which has NO
> default
> > constructor:
> > 
> > public class ConfigService {
> >  private int val1=0, val2=0;
> >  public ConfigService(int ctParam) { val1=100*ctParam;
> }
> >  public setVal2(int val2) { this.val2=val2; }
> >  public getVal1...
> > }
> > 
> > And I like to have the ConfigService as singleton with
> name
> > "cfgSvc" defined via XML (since there is
> > annotation in the given source).
> > 
> > The initialisation should be: 
> > 1.) create the ConfigService via it's constructor
> and
> > ctParam=42
> > 2.) call setVal2(666);
> > 
> > 
> > See what I mean? Is this even possible with the
> > 'flat' structure in the samples of the spec?
> This
> > would not allow to additionally set a value for val2,
> or did
> > I confuse something?
> > 
> > How must the XML look like according to the spec?
> > 
> > txs and LieGrue,
> > strub
> > 
> > 
> > --- Mark Struberg <[email protected]> schrieb am
> Mi,
> > 14.1.2009:
> > 
> > > Von: Mark Struberg <[email protected]>
> > > Betreff: Re: XML definition for constructor
> injection
> > > An: [email protected]
> > > Datum: Mittwoch, 14. Januar 2009, 11:32
> > > Hi Gurkan!
> > > 
> > > > the immediate children of the XML bean
> > declaration
> > > I also understood it this way when I first read
> the
> > spec.
> > > 
> > > from the spec:
> > > > For a simple bean defined using XML, the
> bean
> > > constructor may be 
> > > > specified by listing the parameter types of
> the
> > > constructer, in
> > > > order, as direct children of the element
> that
> > declares
> > > the bean.
> > > 
> > > But on the other hand it was not really clear to
> me if
> > the
> > > examples given in the spec are _with_ or
> _without_ the
> > bean
> > > declaration itself (outer
> > <myapp:TstBeanConstructor>
> > > in my example)!
> > > 
> > > If we interpret it your way, then no
> 'mixed'
> > > scenario like the following would work:
> > > 
> > > I like to have a @Named(value="config")
> > > @SessionScoped TstBeanConstructor PLUS I like to
> > inject the
> > > value 7 in setI2.
> > > 
> > > How can this be achieved if there is no
> separation
> > between
> > > the constructor parameters and the additionally
> > injected
> > > ones?
> > > 
> > > Maybe this is not needed? Or it's a
> shortcoming of
> > the
> > > spec? Or I'm completely confused? :)
> > > 
> > > How I would write the XML (assuming a ct public
> > > TstBeanConstructor(int ctParam) { ... ):
> > > 
> > > <myapp:TstBeanConstructor>
> > >     <Named>config</Named>
> > >     <SessionScoped/>
> > >     <myapp:TstBeanConstructor>
> > >        
> <myapp:ctParam>42</myapp:ctParam> 
> >     
> > > 
> > >     </myapp:TstBeanConstructor> 
> > >     <myapp:i2>7</myapp:i1>       
> > > </myapp:TstBeanConstructor> 
> > > 
> > > LieGrue,
> > > strub
> > > 
> > > 
> > > --- Gurkan Erdogdu
> <[email protected]>
> > schrieb
> > > am Mi, 14.1.2009:
> > > 
> > > > Von: Gurkan Erdogdu
> > <[email protected]>
> > > > Betreff: Re: XML definition for constructor
> > injection
> > > > An: [email protected]
> > > > Datum: Mittwoch, 14. Januar 2009, 8:14
> > > > Hi Mark;
> > > > 
> > > > Your XML definition is not correct, I think.
> > > Specification
> > > > says that, the immediate children of the XML
> bean
> > > > declaration which correspond to *Java Type*
> is 
> > > captured as
> > > > a *parameters* of this constructor. So the
> > correct XML
> > > > definition may be written as;
> > > > 
> > > > <myapp:TstBeanConstructor>
> > > >          <RequestScoped/>
> > > >         <lang: Integer/>
> > > >      </myapp:TstBeanConstructor> 
> > > > 
> > > > where *lang* is the namespace that
> corresponds to
> > the
> > > > *java.lang* package. You are able to give
> any
> > > namespace
> > > > instead of *lang*.
> > > > 
> > > > When the container creates this bean
> instance, it
> > will
> > > > inject the constructor parameter with
> looking the
> > > beans with
> > > > API type *Integer* and Binding Type
> *...@current*.
> > If it
> > > finds
> > > > the bean successfully, it injects its
> current
> > > instance. 
> > > > 
> > > > For example, lets say that we define
> producer
> > method
> > > in
> > > > other bean class (MyOtherBean) . 
> > > > 
> > > > class MyOtherBean
> > > > {
> > > > 
> > > > @RequestScoped @Produces
> > > > public int
> getTstBeanConstructorInitialValue()
> > > > {
> > > >     return 12;
> > > > }
> > > > }
> > > > Then, container calls this method via its
> parent
> > bean
> > > > instance (MyOtherBean) and injects the
> resulted
> > > instance
> > > > (Integer:12) into the TstBeanConstructor.
> > > > 
> > > > I did not try to execute this sample, but I
> think
> > it
> > > works.
> > > > 
> > > > Please look at the specification that
> contains
> > full
> > > > explanation of the XML defined constructor
> > > declaration.
> > > > 
> > > > /Gurkan
> > > > 
> > > > 
> > > > 
> > > > 
> > > > ________________________________
> > > > From: Mark Struberg
> <[email protected]>
> > > > To: [email protected]
> > > > Sent: Tuesday, January 13, 2009 10:51:43 PM
> > > > Subject: XML definition for constructor
> injection
> > 
> > > > 
> > > > grr, my first mail got eaten by the spam
> daemon
> > > > 
> > > > 
> > > > --- Mark Struberg <[email protected]>
> > schrieb am
> > > Di,
> > > > 13.1.2009:
> > > > 
> > > > > Von: Mark Struberg
> <[email protected]>
> > > > > Betreff: 
> > > > > An:
> [email protected]
> > > > > Datum: Dienstag, 13. Januar 2009, 21:46
> > > > > Hi!
> > > > > 
> > > > > I like to test the constructor
> injection via
> > XML
> > > > > definition.
> > > > > 
> > > > > For what I understand after reading the
> > spec, the
> > > > following
> > > > > should work:
> > > > > 
> > > > > Assume we have the WebBean, _without_
> any
> > > annotations:
> > > > > 
> > > > > public class TstBeanConstructor
> > > > > {
> > > > >    
> > > > >     private int i1=0;
> > > > >     private int i2=0;
> > > > >    
> > > > >     public TstBeanConstructor(int i1)
> > > > >     {
> > > > >         this.i1 = i1*100;
> > > > >     }
> > > > >    
> > > > >     public int getI1()
> > > > > ...
> > > > > 
> > > > > 
> > > > > and the XML looks like:
> > > > > 
> > > > >     <myapp:TstBeanConstructor>
> > > > >         <RequestScoped/>
> > > > >        
> <myapp:TstBeanConstructor>
> > > > >            
> > <myapp:i1>12</myapp:i1>  
> > >     
> > > >     
> > > > >    
> > > > >        
> </myapp:TstBeanConstructor> 
> > > > >     </myapp:TstBeanConstructor> 
> > > > > 
> > > > > 
> > > > > should this work? At first I was a bit
> > confused
> > > about
> > > > the 2
> > > > > <myapp:TstBeanConstructor>, is
> this
> > correct
> > > in
> > > > the
> > > > > XML?
> > > > > 
> > > > > txs and LieGrue,
> > > > > strub



Reply via email to