Quantcast

is there an equivalent of Seam 2 @out in CDI / Seam 3

classic Classic list List threaded Threaded
11 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

is there an equivalent of Seam 2 @out in CDI / Seam 3

Antoine Sabot-Durand
Hi all,

I try to shorten my Expression language code and don't want to create delegate methods in my controller to access  propertir of a business component.

I didn't found something like @Out. Does it exists ?

Thanks,

Antoine









_______________________________________________
seam-dev mailing list
[hidden email]
https://lists.jboss.org/mailman/listinfo/seam-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: is there an equivalent of Seam 2 @out in CDI / Seam 3

Ken Finnigan-2
Antoine,

I'm pretty sure the equivalent for CDI is to use @Produces.

Ken


On Wed, Mar 16, 2011 at 12:47 PM, Antoine Sabot-Durand <[hidden email]> wrote:
Hi all,

I try to shorten my Expression language code and don't want to create delegate methods in my controller to access  propertir of a business component.

I didn't found something like @Out. Does it exists ?

Thanks,

Antoine









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


_______________________________________________
seam-dev mailing list
[hidden email]
https://lists.jboss.org/mailman/listinfo/seam-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: is there an equivalent of Seam 2 @out in CDI / Seam 3

Jason Porter
On Wed, Mar 16, 2011 at 10:54, Ken Finnigan <[hidden email]> wrote:
Antoine,

I'm pretty sure the equivalent for CDI is to use @Produces.

Ken


Yes, that's the closest there is.
 

On Wed, Mar 16, 2011 at 12:47 PM, Antoine Sabot-Durand <[hidden email]> wrote:
Hi all,

I try to shorten my Expression language code and don't want to create delegate methods in my controller to access  propertir of a business component.

I didn't found something like @Out. Does it exists ?

Thanks,

Antoine









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


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




--
Jason Porter
http://lightguard-jp.blogspot.com
http://twitter.com/lightguardjp

Software Engineer
Open Source Advocate
Author of Seam Catch - Next Generation Java Exception Handling

PGP key id: 926CCFF5
PGP key available at: keyserver.net, pgp.mit.edu

_______________________________________________
seam-dev mailing list
[hidden email]
https://lists.jboss.org/mailman/listinfo/seam-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: is there an equivalent of Seam 2 @out in CDI / Seam 3

Antoine Sabot-Durand
In reply to this post by Ken Finnigan-2
For what I understand, it's not quite the same. I think it's more like @Factory, but I agree it's nearly the same and I could use it was possible to "Named" the "outjected" property in order to use it in EL...

Antoine 







Le 16 mars 2011 à 17:54, Ken Finnigan a écrit :

Antoine,

I'm pretty sure the equivalent for CDI is to use @Produces.

Ken


On Wed, Mar 16, 2011 at 12:47 PM, Antoine Sabot-Durand <[hidden email]> wrote:
Hi all,

I try to shorten my Expression language code and don't want to create delegate methods in my controller to access  propertir of a business component.

I didn't found something like @Out. Does it exists ?

Thanks,

Antoine









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



_______________________________________________
seam-dev mailing list
[hidden email]
https://lists.jboss.org/mailman/listinfo/seam-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: is there an equivalent of Seam 2 @out in CDI / Seam 3

Ken Finnigan-2
If you want the result of @Produces to be EL accessible just throw a @Named on it.

Ken

Sent from my iPhone

On Mar 16, 2011, at 13:02, Antoine Sabot-Durand <[hidden email]> wrote:

For what I understand, it's not quite the same. I think it's more like @Factory, but I agree it's nearly the same and I could use it was possible to "Named" the "outjected" property in order to use it in EL...

Antoine 







Le 16 mars 2011 à 17:54, Ken Finnigan a écrit :

Antoine,

I'm pretty sure the equivalent for CDI is to use @Produces.

Ken


On Wed, Mar 16, 2011 at 12:47 PM, Antoine Sabot-Durand <[hidden email]> wrote:
Hi all,

I try to shorten my Expression language code and don't want to create delegate methods in my controller to access  propertir of a business component.

I didn't found something like @Out. Does it exists ?

Thanks,

Antoine









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



_______________________________________________
seam-dev mailing list
[hidden email]
https://lists.jboss.org/mailman/listinfo/seam-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: is there an equivalent of Seam 2 @out in CDI / Seam 3

dan.j.allen
You can create a producer that aliases a name to a property, like this:

@Produces @Named
public Hotel getHotel() { return booking.getHotel(); }

#{hotel}

You can also use a producer field, like so:

@Produces @Named
private Hotel hotel;

#{hotel}

Produces sort of turns outjection on it's head. But if you think about it, it's a better way to go about it because it's more robust to read the state of the model as it is, then try to shift the information around into variables from which to read them, as outjection did.

What you can't do is use the same variable name to refer to state on two different models, unless of course your producer method does some conditional logic (saying if this screen, give this result, if this screen, give a different result). But again, that's a good thing because then tooling can actually tell you where the data is coming from.

This is a key topic for the migration guide. Feel free to contribute examples of how you might solve an outjection scenario with produces. It's a good exercise anyway.

-Dan

On Wed, Mar 16, 2011 at 13:03, Ken Finnigan <[hidden email]> wrote:
If you want the result of @Produces to be EL accessible just throw a @Named on it.

Ken

Sent from my iPhone

On Mar 16, 2011, at 13:02, Antoine Sabot-Durand <[hidden email]> wrote:

For what I understand, it's not quite the same. I think it's more like @Factory, but I agree it's nearly the same and I could use it was possible to "Named" the "outjected" property in order to use it in EL...

Antoine 







Le 16 mars 2011 à 17:54, Ken Finnigan a écrit :

Antoine,

I'm pretty sure the equivalent for CDI is to use @Produces.

Ken


On Wed, Mar 16, 2011 at 12:47 PM, Antoine Sabot-Durand <[hidden email][hidden email]> wrote:
Hi all,

I try to shorten my Expression language code and don't want to create delegate methods in my controller to access  propertir of a business component.

I didn't found something like @Out. Does it exists ?

Thanks,

Antoine









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



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




--
Dan Allen
Principal Software Engineer, Red Hat | Author of Seam in Action
Registered Linux User #231597



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

--
Dan Allen
Principal Software Engineer, Red Hat | Author of Seam in Action
Registered Linux User #231597

http://google.com/profiles/dan.j.allen
http://mojavelinux.com
http://mojavelinux.com/seaminaction
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: is there an equivalent of Seam 2 @out in CDI / Seam 3

Antoine Sabot-Durand
Thanks for the douse I'm going to test this right away.

Antoine Sabot-Durand

Le 16 mars 2011 à 18:29, Dan Allen <[hidden email]> a écrit :

You can create a producer that aliases a name to a property, like this:

@Produces @Named
public Hotel getHotel() { return booking.getHotel(); }

#{hotel}

You can also use a producer field, like so:

@Produces @Named
private Hotel hotel;

#{hotel}

Produces sort of turns outjection on it's head. But if you think about it, it's a better way to go about it because it's more robust to read the state of the model as it is, then try to shift the information around into variables from which to read them, as outjection did.

What you can't do is use the same variable name to refer to state on two different models, unless of course your producer method does some conditional logic (saying if this screen, give this result, if this screen, give a different result). But again, that's a good thing because then tooling can actually tell you where the data is coming from.

This is a key topic for the migration guide. Feel free to contribute examples of how you might solve an outjection scenario with produces. It's a good exercise anyway.

-Dan

On Wed, Mar 16, 2011 at 13:03, Ken Finnigan <[hidden email]> wrote:
If you want the result of @Produces to be EL accessible just throw a @Named on it.

Ken

Sent from my iPhone

On Mar 16, 2011, at 13:02, Antoine Sabot-Durand <[hidden email]> wrote:

For what I understand, it's not quite the same. I think it's more like @Factory, but I agree it's nearly the same and I could use it was possible to "Named" the "outjected" property in order to use it in EL...

Antoine 







Le 16 mars 2011 à 17:54, Ken Finnigan a écrit :

Antoine,

I'm pretty sure the equivalent for CDI is to use @Produces.

Ken


On Wed, Mar 16, 2011 at 12:47 PM, Antoine Sabot-Durand <[hidden email][hidden email]> wrote:
Hi all,

I try to shorten my Expression language code and don't want to create delegate methods in my controller to access  propertir of a business component.

I didn't found something like @Out. Does it exists ?

Thanks,

Antoine









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



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




--
Dan Allen
Principal Software Engineer, Red Hat | Author of Seam in Action
Registered Linux User #231597



_______________________________________________
seam-dev mailing list
[hidden email]
https://lists.jboss.org/mailman/listinfo/seam-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: is there an equivalent of Seam 2 @out in CDI / Seam 3

Antoine Sabot-Durand
Hi Dan and Team,

Sorry to go back to this subject but I don't get the expected result from @produces.
In Seam social Web client example, I tried to outject currentServiceHdl in SocialClient bean  like this :

@Produces
   @Named
   public OAuthServiceHandler getCurrentServiceHdl()
   {
      return currentServiceHdl;
   }

and I get the following exception when Social client is initialized (apparently in the @Postconstruct callback) from JSF call (notice that currentServiceHdl is not in the JSF view that triggers the exception only socilaClient) :


java.lang.NoClassDefFoundError: org/jboss/weld/exceptions/WeldException
	at org.jboss.weld.bean.AbstractClassBean.defaultPostConstruct(AbstractClassBean.java:595)
	at org.jboss.weld.bean.ManagedBean$ManagedBeanInjectionTarget.postConstruct(ManagedBean.java:200)
	at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:340)
	at org.jboss.weld.context.AbstractContext.get(AbstractContext.java:121)
	at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:99)
	at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:87)
	at org.jboss.seam.social.example.webclient.org$jboss$weld$bean-jboss$classloader:id="vfs:$$$Users$antoine$Documents$Eclipse_workspaces$seam-social$$metadata$$plugins$org$jboss$ide$eclipse$as$core$JBoss_6$0_Runtime_Server1295753022377$deploy$seam-social-web-client$war"-ManagedBean-class_org$jboss$seam$social$example$webclient$SocialClient_$$_WeldClientProxy.getServiceHandlers(org$jboss$weld$bean-jboss$classloader:id="vfs:$$$Users$antoine$Documents$Eclipse_workspaces$seam-social$$metadata$$plugins$org$jboss$ide$eclipse$as$core$JBoss_6$0_Runtime_Server1295753022377$deploy$seam-social-web-client$war"-ManagedBean-class_org$jboss$seam$social$example$webclient$SocialClient_$$_WeldClientProxy.java)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

removing @Produces @Named make the exception disappears.

Any clue ?

Antoine SABOT-DURAND


Le 16 mars 2011 à 23:09, Antoine Sabot-Durand a écrit :

Thanks for the douse I'm going to test this right away.

Antoine Sabot-Durand

Le 16 mars 2011 à 18:29, Dan Allen <[hidden email]> a écrit :

You can create a producer that aliases a name to a property, like this:

@Produces @Named
public Hotel getHotel() { return booking.getHotel(); }

#{hotel}

You can also use a producer field, like so:

@Produces @Named
private Hotel hotel;

#{hotel}

Produces sort of turns outjection on it's head. But if you think about it, it's a better way to go about it because it's more robust to read the state of the model as it is, then try to shift the information around into variables from which to read them, as outjection did.

What you can't do is use the same variable name to refer to state on two different models, unless of course your producer method does some conditional logic (saying if this screen, give this result, if this screen, give a different result). But again, that's a good thing because then tooling can actually tell you where the data is coming from.

This is a key topic for the migration guide. Feel free to contribute examples of how you might solve an outjection scenario with produces. It's a good exercise anyway.

-Dan

On Wed, Mar 16, 2011 at 13:03, Ken Finnigan <[hidden email][hidden email]> wrote:
If you want the result of @Produces to be EL accessible just throw a @Named on it.

Ken

Sent from my iPhone

On Mar 16, 2011, at 13:02, Antoine Sabot-Durand <[hidden email][hidden email]> wrote:

For what I understand, it's not quite the same. I think it's more like @Factory, but I agree it's nearly the same and I could use it was possible to "Named" the "outjected" property in order to use it in EL...

Antoine 







Le 16 mars 2011 à 17:54, Ken Finnigan a écrit :

Antoine,

I'm pretty sure the equivalent for CDI is to use @Produces.

Ken


On Wed, Mar 16, 2011 at 12:47 PM, Antoine Sabot-Durand <[hidden email][hidden email][hidden email]> wrote:
Hi all,

I try to shorten my Expression language code and don't want to create delegate methods in my controller to access  propertir of a business component.

I didn't found something like @Out. Does it exists ?

Thanks,

Antoine









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



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




--
Dan Allen
Principal Software Engineer, Red Hat | Author of Seam in Action
Registered Linux User #231597




_______________________________________________
seam-dev mailing list
[hidden email]
https://lists.jboss.org/mailman/listinfo/seam-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: is there an equivalent of Seam 2 @out in CDI / Seam 3

Jason Porter
That looks to me like you're having CP issues. Do you have the weld jars in your archive as well as the app server?

WRT the @Out question if you want the same kind of functionality you have to create a wrapper component and play the scope game with it that way (Conversation scoped wrapper with a setter for the actual instance).

Hope that helps. 

Sent from my iPhone

On Apr 4, 2011, at 15:42, Antoine Sabot-Durand <[hidden email]> wrote:

Hi Dan and Team,

Sorry to go back to this subject but I don't get the expected result from @produces.
In Seam social Web client example, I tried to outject currentServiceHdl in SocialClient bean  like this :

@Produces
   @Named
   public OAuthServiceHandler getCurrentServiceHdl()
   {
      return currentServiceHdl;
   }

and I get the following exception when Social client is initialized (apparently in the @Postconstruct callback) from JSF call (notice that currentServiceHdl is not in the JSF view that triggers the exception only socilaClient) :


java.lang.NoClassDefFoundError: org/jboss/weld/exceptions/WeldException
	at org.jboss.weld.bean.AbstractClassBean.defaultPostConstruct(AbstractClassBean.java:595)
	at org.jboss.weld.bean.ManagedBean$ManagedBeanInjectionTarget.postConstruct(ManagedBean.java:200)
	at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:340)
	at org.jboss.weld.context.AbstractContext.get(AbstractContext.java:121)
	at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:99)
	at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:87)
	at org.jboss.seam.social.example.webclient.org$jboss$weld$bean-jboss$classloader:id="vfs:$$$Users$antoine$Documents$Eclipse_workspaces$seam-social$$metadata$$plugins$org$jboss$ide$eclipse$as$core$JBoss_6$0_Runtime_Server1295753022377$deploy$seam-social-web-client$war"-ManagedBean-class_org$jboss$seam$social$example$webclient$SocialClient_$$_WeldClientProxy.getServiceHandlers(org$jboss$weld$bean-jboss$classloader:id="vfs:$$$Users$antoine$Documents$Eclipse_workspaces$seam-social$$metadata$$plugins$org$jboss$ide$eclipse$as$core$JBoss_6$0_Runtime_Server1295753022377$deploy$seam-social-web-client$war"-ManagedBean-class_org$jboss$seam$social$example$webclient$SocialClient_$$_WeldClientProxy.java)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

removing @Produces @Named make the exception disappears.

Any clue ?

Antoine SABOT-DURAND


Le 16 mars 2011 à 23:09, Antoine Sabot-Durand a écrit :

Thanks for the douse I'm going to test this right away.

Antoine Sabot-Durand

Le 16 mars 2011 à 18:29, Dan Allen <[hidden email]> a écrit :

You can create a producer that aliases a name to a property, like this:

@Produces @Named
public Hotel getHotel() { return booking.getHotel(); }

#{hotel}

You can also use a producer field, like so:

@Produces @Named
private Hotel hotel;

#{hotel}

Produces sort of turns outjection on it's head. But if you think about it, it's a better way to go about it because it's more robust to read the state of the model as it is, then try to shift the information around into variables from which to read them, as outjection did.

What you can't do is use the same variable name to refer to state on two different models, unless of course your producer method does some conditional logic (saying if this screen, give this result, if this screen, give a different result). But again, that's a good thing because then tooling can actually tell you where the data is coming from.

This is a key topic for the migration guide. Feel free to contribute examples of how you might solve an outjection scenario with produces. It's a good exercise anyway.

-Dan

On Wed, Mar 16, 2011 at 13:03, Ken Finnigan <[hidden email][hidden email]> wrote:
If you want the result of @Produces to be EL accessible just throw a @Named on it.

Ken

Sent from my iPhone

On Mar 16, 2011, at 13:02, Antoine Sabot-Durand <[hidden email][hidden email]> wrote:

For what I understand, it's not quite the same. I think it's more like @Factory, but I agree it's nearly the same and I could use it was possible to "Named" the "outjected" property in order to use it in EL...

Antoine 







Le 16 mars 2011 à 17:54, Ken Finnigan a écrit :

Antoine,

I'm pretty sure the equivalent for CDI is to use @Produces.

Ken


On Wed, Mar 16, 2011 at 12:47 PM, Antoine Sabot-Durand <[hidden email][hidden email][hidden email]> wrote:
Hi all,

I try to shorten my Expression language code and don't want to create delegate methods in my controller to access  propertir of a business component.

I didn't found something like @Out. Does it exists ?

Thanks,

Antoine









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



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




--
Dan Allen
Principal Software Engineer, Red Hat | Author of Seam in Action
Registered Linux User #231597



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

_______________________________________________
seam-dev mailing list
[hidden email]
https://lists.jboss.org/mailman/listinfo/seam-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: is there an equivalent of Seam 2 @out in CDI / Seam 3

Antoine Sabot-Durand
No it's not a CP : I don't have Weld in my app and I used JBoss 6 out of the box.
It comes from the conjunction of using

   @Inject
   @Any
   private Instance<OAuthServiceHandler> serviceHandlerInstances;

to build list of OAuthServiceHandler beans available. And 

   @Produces
   @Named
   @RequestScoped
   public OAuthServiceHandler getCurrentServiceHdl()
   {
      return currentServiceHdl;
   }

which creates a null OAuthServiceHandler bean. This Null bean goes into serviceHandlerInstances and as my code is not secured yet against null Bean in the Instance<> iterator I've got a NPE.
When this NPE is thrown in the @Postconstruct method it creates some kind of stack overflow (trying to recreate the bean again and again after each exception in @Postconstruct) and in the end, the system throws the strange exception : "java.lang.NoClassDefFoundError: org/jboss/weld/exceptions/WeldException"

Sot I've got the following question :

1) How can I avoid produce null bean (abort bean producing when the value returned by producer method is null) ?
2) Is there a way to use @Any with a restriction (all qualifier except this one)) ?
3) Shouldn't the exception be a bit more explicit on this issue ;-) ?

Thanks

Antoine SABOT-DURAND


Le 4 avr. 2011 à 22:22, Jason Porter a écrit :

That looks to me like you're having CP issues. Do you have the weld jars in your archive as well as the app server?

WRT the @Out question if you want the same kind of functionality you have to create a wrapper component and play the scope game with it that way (Conversation scoped wrapper with a setter for the actual instance).

Hope that helps. 

Sent from my iPhone

On Apr 4, 2011, at 15:42, Antoine Sabot-Durand <[hidden email]> wrote:

Hi Dan and Team,

Sorry to go back to this subject but I don't get the expected result from @produces.
In Seam social Web client example, I tried to outject currentServiceHdl in SocialClient bean  like this :

@Produces
   @Named
   public OAuthServiceHandler getCurrentServiceHdl()
   {
      return currentServiceHdl;
   }

and I get the following exception when Social client is initialized (apparently in the @Postconstruct callback) from JSF call (notice that currentServiceHdl is not in the JSF view that triggers the exception only socilaClient) :


java.lang.NoClassDefFoundError: org/jboss/weld/exceptions/WeldException
	at org.jboss.weld.bean.AbstractClassBean.defaultPostConstruct(AbstractClassBean.java:595)
	at org.jboss.weld.bean.ManagedBean$ManagedBeanInjectionTarget.postConstruct(ManagedBean.java:200)
	at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:340)
	at org.jboss.weld.context.AbstractContext.get(AbstractContext.java:121)
	at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:99)
	at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:87)
	at org.jboss.seam.social.example.webclient.org$jboss$weld$bean-jboss$classloader:id="vfs:$$$Users$antoine$Documents$Eclipse_workspaces$seam-social$$metadata$$plugins$org$jboss$ide$eclipse$as$core$JBoss_6$0_Runtime_Server1295753022377$deploy$seam-social-web-client$war"-ManagedBean-class_org$jboss$seam$social$example$webclient$SocialClient_$$_WeldClientProxy.getServiceHandlers(org$jboss$weld$bean-jboss$classloader:id="vfs:$$$Users$antoine$Documents$Eclipse_workspaces$seam-social$$metadata$$plugins$org$jboss$ide$eclipse$as$core$JBoss_6$0_Runtime_Server1295753022377$deploy$seam-social-web-client$war"-ManagedBean-class_org$jboss$seam$social$example$webclient$SocialClient_$$_WeldClientProxy.java)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

removing @Produces @Named make the exception disappears.

Any clue ?

Antoine SABOT-DURAND


Le 16 mars 2011 à 23:09, Antoine Sabot-Durand a écrit :

Thanks for the douse I'm going to test this right away.

Antoine Sabot-Durand

Le 16 mars 2011 à 18:29, Dan Allen <[hidden email][hidden email]> a écrit :

You can create a producer that aliases a name to a property, like this:

@Produces @Named
public Hotel getHotel() { return booking.getHotel(); }

#{hotel}

You can also use a producer field, like so:

@Produces @Named
private Hotel hotel;

#{hotel}

Produces sort of turns outjection on it's head. But if you think about it, it's a better way to go about it because it's more robust to read the state of the model as it is, then try to shift the information around into variables from which to read them, as outjection did.

What you can't do is use the same variable name to refer to state on two different models, unless of course your producer method does some conditional logic (saying if this screen, give this result, if this screen, give a different result). But again, that's a good thing because then tooling can actually tell you where the data is coming from.

This is a key topic for the migration guide. Feel free to contribute examples of how you might solve an outjection scenario with produces. It's a good exercise anyway.

-Dan

On Wed, Mar 16, 2011 at 13:03, Ken Finnigan <[hidden email][hidden email][hidden email]> wrote:
If you want the result of @Produces to be EL accessible just throw a @Named on it.

Ken

Sent from my iPhone

On Mar 16, 2011, at 13:02, Antoine Sabot-Durand <[hidden email][hidden email][hidden email]> wrote:

For what I understand, it's not quite the same. I think it's more like @Factory, but I agree it's nearly the same and I could use it was possible to "Named" the "outjected" property in order to use it in EL...

Antoine 







Le 16 mars 2011 à 17:54, Ken Finnigan a écrit :

Antoine,

I'm pretty sure the equivalent for CDI is to use @Produces.

Ken


On Wed, Mar 16, 2011 at 12:47 PM, Antoine Sabot-Durand <[hidden email][hidden email][hidden email][hidden email]> wrote:
Hi all,

I try to shorten my Expression language code and don't want to create delegate methods in my controller to access  propertir of a business component.

I didn't found something like @Out. Does it exists ?

Thanks,

Antoine









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



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




--
Dan Allen
Principal Software Engineer, Red Hat | Author of Seam in Action
Registered Linux User #231597



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


_______________________________________________
seam-dev mailing list
[hidden email]
https://lists.jboss.org/mailman/listinfo/seam-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: is there an equivalent of Seam 2 @out in CDI / Seam 3

Pete Muir-2

On 5 Apr 2011, at 09:47, Antoine Sabot-Durand wrote:

> No it's not a CP : I don't have Weld in my app and I used JBoss 6 out of the box.
> It comes from the conjunction of using
>
>    @Inject
>    @Any
>    private Instance<OAuthServiceHandler> serviceHandlerInstances;
>
> to build list of OAuthServiceHandler beans available. And
>
>    @Produces
>    @Named
>    @RequestScoped
>    public OAuthServiceHandler getCurrentServiceHdl()
>    {
>       return currentServiceHdl;
>    }
>
> which creates a null OAuthServiceHandler bean. This Null bean goes into serviceHandlerInstances and as my code is not secured yet against null Bean in the Instance<> iterator I've got a NPE.
> When this NPE is thrown in the @Postconstruct method it creates some kind of stack overflow (trying to recreate the bean again and again after each exception in @Postconstruct) and in the end, the system throws the strange exception : "java.lang.NoClassDefFoundError: org/jboss/weld/exceptions/WeldException"
>
> Sot I've got the following question :
>
> 1) How can I avoid produce null bean (abort bean producing when the value returned by producer method is null) ?

if (blah == null) throw new IllegalStateExeption; ? CDI provides nothing for this case.

> 2) Is there a way to use @Any with a restriction (all qualifier except this one)) ?

No. Just revisit your set logic ;-)

> 3) Shouldn't the exception be a bit more explicit on this issue ;-) ?

Can you file a JIRA issue in WELD for the stack overflow, that shouldn't happen!
Also file one for a poor error message ;-)

>
> Thanks
>
> Antoine SABOT-DURAND
>
>
> Le 4 avr. 2011 à 22:22, Jason Porter a écrit :
>
>> That looks to me like you're having CP issues. Do you have the weld jars in your archive as well as the app server?
>>
>> WRT the @Out question if you want the same kind of functionality you have to create a wrapper component and play the scope game with it that way (Conversation scoped wrapper with a setter for the actual instance).
>>
>> Hope that helps.
>>
>> Sent from my iPhone
>>
>> On Apr 4, 2011, at 15:42, Antoine Sabot-Durand <[hidden email]> wrote:
>>
>>> Hi Dan and Team,
>>>
>>> Sorry to go back to this subject but I don't get the expected result from @produces.
>>> In Seam social Web client example, I tried to outject currentServiceHdl in SocialClient bean  like this :
>>>
>>> @Produces
>>>    @Named
>>>    public OAuthServiceHandler getCurrentServiceHdl()
>>>    {
>>>       return currentServiceHdl;
>>>    }
>>>
>>> and I get the following exception when Social client is initialized (apparently in the @Postconstruct callback) from JSF call (notice that currentServiceHdl is not in the JSF view that triggers the exception only socilaClient) :
>>>
>>>
>>> java.lang.NoClassDefFoundError: org/jboss/weld/exceptions/WeldException
>>> at org.jboss.weld.bean.AbstractClassBean.defaultPostConstruct(AbstractClassBean.java:595)
>>> at org.jboss.weld.bean.ManagedBean$ManagedBeanInjectionTarget.postConstruct(ManagedBean.java:200)
>>> at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:340)
>>> at org.jboss.weld.context.AbstractContext.get(AbstractContext.java:121)
>>> at org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:99)
>>> at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:87)
>>> at org.jboss.seam.social.example.webclient.org$jboss$weld$bean-jboss$classloader:id="vfs:$$$Users$antoine$Documents$Eclipse_workspaces$seam-social$$metadata$$plugins$org$jboss$ide$eclipse$as$core$JBoss_6$0_Runtime_Server1295753022377$deploy$seam-social-web-client$war"-ManagedBean-class_org$jboss$seam$social$example$webclient$SocialClient_$$_WeldClientProxy.getServiceHandlers(org$jboss$weld$bean-jboss$classloader:id="vfs:$$$Users$antoine$Documents$Eclipse_workspaces$seam-social$$metadata$$plugins$org$jboss$ide$eclipse$as$core$JBoss_6$0_Runtime_Server1295753022377$deploy$seam-social-web-client$war"-ManagedBean-class_org$jboss$seam$social$example$webclient$SocialClient_$$_WeldClientProxy.java)
>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>
>>>
>>> removing @Produces @Named make the exception disappears.
>>>
>>> Any clue ?
>>>
>>> Antoine SABOT-DURAND
>>>
>>>
>>> Le 16 mars 2011 à 23:09, Antoine Sabot-Durand a écrit :
>>>
>>>> Thanks for the douse I'm going to test this right away.
>>>>
>>>> Antoine Sabot-Durand
>>>>
>>>> Le 16 mars 2011 à 18:29, Dan Allen <[hidden email]> a écrit :
>>>>
>>>>> You can create a producer that aliases a name to a property, like this:
>>>>>
>>>>> @Produces @Named
>>>>> public Hotel getHotel() { return booking.getHotel(); }
>>>>>
>>>>> #{hotel}
>>>>>
>>>>> You can also use a producer field, like so:
>>>>>
>>>>> @Produces @Named
>>>>> private Hotel hotel;
>>>>>
>>>>> #{hotel}
>>>>>
>>>>> Produces sort of turns outjection on it's head. But if you think about it, it's a better way to go about it because it's more robust to read the state of the model as it is, then try to shift the information around into variables from which to read them, as outjection did.
>>>>>
>>>>> What you can't do is use the same variable name to refer to state on two different models, unless of course your producer method does some conditional logic (saying if this screen, give this result, if this screen, give a different result). But again, that's a good thing because then tooling can actually tell you where the data is coming from.
>>>>>
>>>>> This is a key topic for the migration guide. Feel free to contribute examples of how you might solve an outjection scenario with produces. It's a good exercise anyway.
>>>>>
>>>>> -Dan
>>>>>
>>>>> On Wed, Mar 16, 2011 at 13:03, Ken Finnigan <[hidden email]> wrote:
>>>>> If you want the result of @Produces to be EL accessible just throw a @Named on it.
>>>>>
>>>>> Ken
>>>>>
>>>>> Sent from my iPhone
>>>>>
>>>>> On Mar 16, 2011, at 13:02, Antoine Sabot-Durand <[hidden email]> wrote:
>>>>>
>>>>>> For what I understand, it's not quite the same. I think it's more like @Factory, but I agree it's nearly the same and I could use it was possible to "Named" the "outjected" property in order to use it in EL...
>>>>>>
>>>>>> Antoine
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> Le 16 mars 2011 à 17:54, Ken Finnigan a écrit :
>>>>>>
>>>>>>> Antoine,
>>>>>>>
>>>>>>> I'm pretty sure the equivalent for CDI is to use @Produces.
>>>>>>>
>>>>>>> Ken
>>>>>>>
>>>>>>>
>>>>>>> On Wed, Mar 16, 2011 at 12:47 PM, Antoine Sabot-Durand <[hidden email]> wrote:
>>>>>>> Hi all,
>>>>>>>
>>>>>>> I try to shorten my Expression language code and don't want to create delegate methods in my controller to access  propertir of a business component.
>>>>>>>
>>>>>>> I didn't found something like @Out. Does it exists ?
>>>>>>>
>>>>>>> Thanks,
>>>>>>>
>>>>>>> Antoine
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> seam-dev mailing list
>>>>>>> [hidden email]
>>>>>>> https://lists.jboss.org/mailman/listinfo/seam-dev
>>>>>>>
>>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> seam-dev mailing list
>>>>> [hidden email]
>>>>> https://lists.jboss.org/mailman/listinfo/seam-dev
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Dan Allen
>>>>> Principal Software Engineer, Red Hat | Author of Seam in Action
>>>>> Registered Linux User #231597
>>>>>
>>>>> http://www.google.com/profiles/dan.j.allen#about
>>>>> http://mojavelinux.com
>>>>> http://mojavelinux.com/seaminaction
>>>>>
>>>
>>> _______________________________________________
>>> seam-dev mailing list
>>> [hidden email]
>>> https://lists.jboss.org/mailman/listinfo/seam-dev
>
> _______________________________________________
> seam-dev mailing list
> [hidden email]
> https://lists.jboss.org/mailman/listinfo/seam-dev


_______________________________________________
seam-dev mailing list
[hidden email]
https://lists.jboss.org/mailman/listinfo/seam-dev
Loading...