On Dec 29, 2010, at 12:24 AM, Mark Struberg wrote: >> My current idea is that we should assume that _all_ >> resource objects are stateless and _always_ deserialize >> these ResourceProxyHandlers by obtaining the actual resource >> from the ResourceInjectionService. > > Now I am confused ;) This means to _not_ deserialize those Resources at all, > but instead always re-attach by getting it fro JNDI again?
s/jndi/ResourceInjectionService yes, that's what I'd like. > > What I meant in my long flame: JNDI objects were supposed to be stored in > serialised form, but that in the mean time JNDI got used as a big fat > toilette where lots of objects got flushed down in the various EE specs > without thinking about it. Take the QueueConnectionFactory [1] for JMS. The > spec says that the impls _should_ be Serializable, but quite a few impls are > not. I won't argue against the claim that JNDI is a garbage pit of underspecified bad ideas and bizarre implementations. However, it's also an ee requirement at the moment. > > In fact: a few resources we get from JNDI are Serializable, others are not. > > My opinion: The ones which implement Serializable should manage themself, the > others should be re-attached from JNDI via a 'proxy' > > But maybe I still miss the 'one' important point ;) My experience is that EE stuff bound to jndi that implements serializable usually doesn't actually serialize/deserialize properly. So I'm very reluctant to delegate to implementations that are likely to be broken. In particular I'm having problems serializing/deserializing an openjpa EMF. AFAIK none of the ee objects you can specify as a @Resource and get from jndi are supposed to have user modifiable state. Therefore getting a new one from jndi on deserialization should work fine. If you find this argument less than compelling, could we simply delegate _all_ of the serialization/deserialization of the actual resource to the ResourceInjectionService? Then I can do the "always lookup in jndi" approach in geronimo and you can avoid it in OWB. thanks david jencks > > LieGrue, > strub > > > > [1] > > --- On Tue, 12/28/10, David Jencks <david_jen...@yahoo.com> wrote: > >> From: David Jencks <david_jen...@yahoo.com> >> Subject: Re: Problem with serializing ResourceProxyHandler >> To: dev@openwebbeans.apache.org >> Date: Tuesday, December 28, 2010, 11:31 PM >> I'm afraid I don't understand your >> response very well. >> >> On Dec 27, 2010, at 3:13 AM, Mark Struberg wrote: >> >>> Hi! >>> >>> I think this is really theoretical. Serializing / >> Deserializing will most probably only happen in a cluster >> between the same applications. If they have different >> configurations activated on different cluster nodes, well >> ... ;) >>> >>> Can you think of any other scenario? >>> >> >> such scenarios might be unlikely but since they are easy to >> guard against I don't really see why not to do so. On >> the other hand if we decide to delegate all the content >> serialization (see below) then we can delegate this checking >> as well. >> >>> >>> For the general serialisation question: >>> JNDI usage in EE servers is in general (and thus also >> the EMF handling in this area also) pretty sick. Originally >> EMFs have been Serializable because they are bound to JNDI. >> JNDI is typically bound to directory services in serialized >> form. But in EE they are now used completely different. They >> should now all be javax.naming.Referencable and not >> Serializable anymore... >>> >>> If we get other things from JNDI which are >> Serializable, then we must serialize them to get back this >> exact state because any intermediate JNDI rebind would >> probably crash our application. >>> >>> I personally try to avoid JNDI wherever possible. They >> are perfectly over-specced and still behave very different >> on different EE servers when it comes to gory details ;) >> >> I don't understand any of your argument here, nor what >> conclusion you have reached. You are free to write a >> ResourceInjectionService backed by something other than >> jndi, although I don't see how it would relate to how >> @Resource annotations are supposed to work in cdi. >> >> My current idea is that we should assume that _all_ >> resource objects are stateless and _always_ deserialize >> these ResourceProxyHandlers by obtaining the actual resource >> from the ResourceInjectionService. This means leaving >> out the FailoverService here. We could have a >> ResourceSerializationService which if supplied does the >> serialization. Or we could delegate all the >> serialization to a ResourceSerializationService so I can >> implement something that works for geronimo without >> disturbing the current special-casing of corba stubs. >> >> Hoping you can clarify in a way I can understand :-) >> >> thanks >> david jencks >> >>> >>> LieGrue, >>> strub >>> >>> >>> >>> --- On Mon, 12/27/10, David Jencks <david_jen...@yahoo.com> >> wrote: >>> >>>> From: David Jencks <david_jen...@yahoo.com> >>>> Subject: Re: Problem with serializing >> ResourceProxyHandler >>>> To: dev@openwebbeans.apache.org >>>> Date: Monday, December 27, 2010, 7:43 AM >>>> And another thing... >>>> >>>> ResourceProxyHandler will have problems if the >> serializing >>>> and deserializing OWB instances differ on whether >>>> FailoverService is present. We should write >> a token to >>>> indicate whether FailoverService was used to >> serialize and >>>> use it in deserialization. >>>> >>>> thanks >>>> david jencks >>>> >>>> On Dec 26, 2010, at 11:21 PM, David Jencks wrote: >>>> >>>>> There's some asymetric logic in >>>> serializing/deserializing ResourceProxyHandler. >>>>> >>>>> Serializing: any serialized actual >> resource is >>>> written to the object output stream, whereas >>>> non-serializable objects have a marker >> serialized. >>>>> >>>>> Deserializing: The object is read from the >> object >>>> input stream, but only the marker object and CORBA >> stubs >>>> result in the actualResource field being set. >>>>> >>>>> Finding the marker object results in getting >> the >>>> resource again from the ResourceInjectionService, >> typically >>>> by looking something up in jndi. >>>>> >>>>> I would prefer to always get the actual >> resource from >>>> the ResourceInjectionService. Is there a >> strong reason >>>> not to do this? >>>>> >>>>> If anyone wants to keep the current approach, >> I think >>>> the logic currently in place to reconnect a CORBA >> stub uses >>>> the wrong ORB, I think it needs to look up the orb >> in jndi. >>>>> >>>>> I'm going to fix the current hole in the logic >> (rev >>>> 1053011) but IMO serializing random objects rather >> than >>>> getting them from the bean is a bad idea. >> Even with >>>> this I get a tck failure trying to deserialze an >>>> EntityManagerFactory. >>>>> >>>>> thanks >>>>> david jencks >>>>> >>>> >>>> >>> >>> >>> >> >> > > >