users@javaserverfaces.java.net

RE: Re: Initial page loading: the managed bean doesn't inject the EJB when called in the constructor.

From: Todd Patrick <Todd.Patrick_at_dtn.com>
Date: Wed, 5 Sep 2007 15:05:48 -0500

Ryan:

OK, with that said, I had always believed that a method annotated with
@PostConstruct would only execute after the injection of an EJB or a
resource?

Or does a method annotated with @PostConstruct - once - run directly
after the Constructor call when the managed bean is initially created?

Thanks,

--Todd

-----Original Message-----
From: Ryan.Lubke_at_Sun.COM [mailto:Ryan.Lubke_at_Sun.COM]
Sent: Wednesday, September 05, 2007 2:33 PM
To: users_at_javaserverfaces.dev.java.net
Subject: Re: Initial page loading: the managed bean doesn't inject the
EJB when called in the constructor.

Todd Patrick wrote:
> Sun Java System Application Server Platform Edition 9.0_01 (build
> b02-p01)
> Sun's JavaServer Faces implementation (1.2_04-b10-p01) NetBeans 5.5.1
>
> When a page loads for the first time, the managed bean doesn't know
> about the injected EJB inside the constructor:
>
> public class RoutingRuleBean extends DeviceBasicBean implements
> Serializable { @EJB private RouteRuleSessionLocal
> routeRuleSessionLocal; ....
> public RoutingRuleBean() {
> ...
> if(!ObjectUtils.equals(this.selectedRouteDevcRowDetails, null)) {
> DeviceDetail selectedDeviceDetail =
> routeRuleSessionLocal.getRouteDevcDetail(this.selectedRouteDevcRowDeta
> il
> s.getDeviceKey());
> this.device.setValue(selectedDeviceDetail);
> }
>
>
> In the snippet above, the field "routeRuleSessionLocal" holding the
> injected EJB is null inside the RoutingRuleBean constructor.
>
> So, the JSF Lifecycle is probably looking like - when a page loads for

> the first time:
>
> RESTORE_VIEW
>
> [constructor]
>
> RENDER_RESPONSE
>
>
> Thus, the injected EJB isn't called until the managed bean is
> completely initialized and pass the RENDER_RESPONSE phase.
>
> Looking at the Java EE API, I know of the PostConstruct annotation,
> but is there something that I could use before the constructor is
called?
>
Not in this case. The injection occurs on the actual instance, so the
ctor is always called first.
@PostConstuct is your best bet.
> Thanks,
>
> --Todd
>
>
> -----------------------------------------
> NOTICE: This email message is for the sole use of the intended
> recipient(s) and may contain confidential and privileged information.
> Any unauthorized use, disclosure or distribution is prohibited. If you

> are not the intended recipient, please contact the sender by reply
> email and destroy all copies of the original message.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe_at_javaserverfaces.dev.java.net
> For additional commands, e-mail:
> users-help_at_javaserverfaces.dev.java.net
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe_at_javaserverfaces.dev.java.net
For additional commands, e-mail: users-help_at_javaserverfaces.dev.java.net