Hi Arun!

There is nothing to worry. This usually happens at the time some proxy instance 
gets created for your class.

It is generally considered a _very_ bad idea to do initialisation and stuff in 
class construction code. 

The reason is that Weld, OWB, various EJB containers, etc not only use 
interface 

proxying (as java.lang.reflect.Proxy does) but also provide class proxying. 
This 

is basically a kind of 'extends' of the class you proxy, and while initialising 
the proxy it therefor also needs to initialise all the superclass chain. Thus 
your constructor will get called here also.

It's basically always a good idea with CDI managed beans (same is true for EJBs 
or objects managed by lots of other DI containers) to perform initialisation in 
a @PostConstruct or @Inject annotated method.

E.g.: it's not a good idea to have something like
private Map x = new ConcurrentHashMap();

because creating a ConcurrentHashMap is not a cheap operation!
It would be much better to 

private Map x;

@PostConstruct
protected void init() {
  x = new ConcurrentHashMap();
}

LieGrue,
strub





----- Original Message ----
> From: Arun Gupta <[email protected]>
> To: Pete Muir <[email protected]>
> Cc: [email protected]
> Sent: Thu, July 22, 2010 8:39:03 PM
> Subject: Re: [weld-dev] Bean created twice
> 
> Thanks posted  http://www.seamframework.org/Community/BeanCreatedTwice
> 
> -Arun
> 
> On  7/22/10 3:35 PM, Pete Muir wrote:
> > Hi Arun
> >
> > Please post on  the forum at 
> > http://www.seamframework.org/Community/WeldUsers 
>- this list for  development discussions.
> >
> > Thanks
> >
> > On 22 Jul 2010,  at 19:26, Arun Gupta wrote:
> >
> >> For the attached simple  application (WAR and source), accessing  
>http://localhost:8080/HelloConversation/faces/index.xhtml creates ShoppingCart 
> 
>twice. Any idea ?
> >>
> >> Utility class is  ...
> >>
> >> @Named("util")
> >>  @ConversationScoped
> >> public class ConvUtil implements Serializable  {
> >>      @Inject ShoppingCart  cart;
> >>
> >>      public ShoppingCart getCart()  {
> >>          return cart;
> >>       }
> >> }
> >>
> >> index.xhtml has  ...
> >>                   <h:inputText value="#{util.cart}" title="name" id="name"
> >>                                 required="true" />
> >>
> >>
> >>  ShoppingCart is ...
> >>
> >> @Named
> >>  @ConversationScoped
> >> public class ShoppingCart implements  Serializable {
> >>      public ShoppingCart()  {
> >>          System.out.println("Creating  shopping cart ..." +  
>Calendar.getInstance().get(Calendar.MILLISECOND));
> >>       }
> >>
> >> }
> >>
> >> At least the log  messages like:
> >>
> >> INFO: Creating shopping cart  ...264
> >> INFO: Creating shopping cart ...265
> >>
> >>  are printed.
> >>
> >> Tried changing the scope of ShoppingCart to  RequestScoped but still the 
>same. Changed @Named to  @javax.faces.bean.ManagedBean on ShoppingCart.
> >>
> >> What am I  not doing correctly ?
> >>
> >> -Arun
> >> --
> >>  Blog: http://blogs.sun.com/arungupta
> >> Twitter:  http://twitter.com/arungupta
> >>
> >>  
><HelloConversation.zip><HelloConversation.war>_______________________________________________
>
> >>  weld-dev mailing list
> >> [email protected]
> >> https://lists.jboss.org/mailman/listinfo/weld-dev
> >
> 
> -- 
> Blog: http://blogs.sun.com/arungupta
> Twitter: http://twitter.com/arungupta
> _______________________________________________
> weld-dev  mailing list
> [email protected]
> https://lists.jboss.org/mailman/listinfo/weld-dev
> 


      
_______________________________________________
weld-dev mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/weld-dev

Reply via email to