hi david, please provide more details btw. a more concrete suggestion. currently StandaloneResourceInjectionService and OpenEjbResourceInjectionService are the only classes which have an implementation of the new methods (the same implementation). -> we have c&p + new methods which break backward compatibility (we should avoid both - if it is possible).
regards, gerhard http://www.irian.at Your JSF powerhouse - JSF Consulting, Development and Courses in English and German Professional Support for Apache MyFaces 2011/1/10 David Jencks <david_jen...@yahoo.com> > He Gerhard, > > I'm not entirely sure what you have in mind..... is it to introduce an > > public abstract class AbstraceResourceInjectionService implements > ResourceInjectionService > { > public <T> void writeExternal(Bean<T> bean, T actualResource, > ObjectOutput out) throws IOException > { > ... > } > > } > > /** > * delegation of serialization behavior > */ > public <T> T readExternal(Bean<T> bean, ObjectInput in) throws > IOException, > ClassNotFoundException > { > ... > } > > ? > > I'm OK with this if the implementations here are the ones in geronimo, not > the ones in StandaloneResourceInjectionService which I think are unlikely to > be useful in most environments and are a lot more complicated. > > public <T> void writeExternal(Bean<T> bean, T actualResource, > ObjectOutput out) throws IOException { > //do nothing > } > > /** > * delegation of serialization behavior > */ > public <T> T readExternal(Bean<T> bean, ObjectInput out) throws > IOException, > ClassNotFoundException { > return (T) ((ResourceBean)bean).getActualInstance(); > } > > > I would need to understand why the implementations in the > StandaloneResourceInjectionService are ever useful to support their use as a > default implementation. > > thanks > david jencks > > > On Jan 10, 2011, at 4:43 AM, Gerhard wrote: > > > hi, > > > > @ResourceInjectionService: > > the current trunk breaks backward compatibility with existing owb > plugins. > > instead of c&p the default implementation of the new methods we should > > introduce an abstract class. > > > > regards, > > gerhard > > > > http://www.irian.at > > > > Your JSF powerhouse - > > JSF Consulting, Development and > > Courses in English and German > > > > Professional Support for Apache MyFaces > > > > > > > > 2010/12/31 David Jencks <david_jen...@yahoo.com> > > > >> I put an implementation of the delegation idea in > >> https://issues.apache.org/jira/browse/OWB-511 along with a proposal for > >> making WebBeansContext more useful (IMO). > >> > >> thanks > >> david jencks > >> > >> On Dec 29, 2010, at 4:12 PM, David Jencks wrote: > >> > >>> > >>> 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 > >>>>>>>> > >>>>>>> > >>>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>> > >>>>> > >>>> > >>>> > >>>> > >>> > >> > >> > >