Sent from my iPhone

On 2012-10-15, at 3:35, Mark Struberg <strub...@yahoo.de> wrote:

> great stuff, +1!
> 
> Just to help me understand a bit better. This module will cover a Spring-CDI 
> bridge, so you boot Spring and a CDI container and route the beans between 
> both of them, right?

Yes, except that we would also support the case where the context is 
bootstrapped via a ContextLoaderListener, to allow easier integration with 
existing Spring MVC applications.
> 
> Just for getting the whole picture: Another way is to just interpret the 
> spring beans.xml and serve it all purely with CDI. Of course this will pretty 
> surely not be possible to implement 100% compatible thus I'm not sure if it's 
> worth implementing at all. 

No, it would be disastrous. We wouldn't be able to support namespaces, 
JavaConfig and such, including auxiliary frameworks of the Spring portfolio.

> I guess this is _not_ covered in your proposal, right? Imo this is perfectly 
> fine, I just mention it for clarity.
> 
> LieGrue,
> strub
> 
> 
> 
> 
> ----- Original Message -----
>> From: Marius Bogoevici <marius.bogoev...@gmail.com>
>> To: deltaspike-dev@incubator.apache.org
>> Cc: 
>> Sent: Monday, October 15, 2012 8:33 AM
>> Subject: [DISCUSS] Spring - CDI Integration in DeltaSpike
>> 
>> Hello all,
>> 
>> Please check [1] before you answer.
>> 
>> I'd like to propose the addition of a new module for integrating Spring with 
>> CDI. We have discussed this on the e-mail list but let me provide a quick 
>> rationale for it.
>> 
>> - it eases adoption of CDI and, by extension, Java EE, in environments with 
>> a 
>> significant existing Spring codebase;
>> - it provides a general solution for Spring/Java EE integration;
>> - it provides users with more options in choosing the best components for 
>> their 
>> application, knowing that they are not locked in either of the paradigms 
>> (e.g. a 
>> user can integrate a project with a strong CDI-based programming API with 
>> something like Spring Batch or Spring Integration);
>> 
>> Features (proposed)
>> -----------------
>> 
>> a) bidirectional injection of beans (Spring into CDI and vice-versa);
>> b) bridging EntityTransaction support between DeltaSpike and Spring;
>> c) integrating the CDI event model with Spring (the best approach in my 
>> opinion 
>> being Spring Integraton rather than the core)
>> d) integration with other Spring portfolio projects wherever possible;
>> 
>> For version 0.4 a minimal goal would be a), followed by b) if possible.
>> 
>> General approach (covers a))
>> =================
>> 
>> For 0.4. my intent, by and large, is to follow the approaches of the Seam 3 
>> Spring module (including a code migration), making improvements on its 
>> design 
>> wherever possible. I intend to create individual JIRAs for a more detailed 
>> discussion, but here's the outline:
>> 
>> The general principle is that each side (Spring, CDI) should not know about 
>> the 
>> existence of the other. Spring beans should be used as CDI beans 
>> transparently 
>> and vice-versa.
>> 
>> So where do beans come from?
>> ------------------------
>> 
>> Spring beans are exposed through a /resource producer pattern//./
>> 
>> @Produces @SpringBean Foo bar;
>> 
>> Will produce a CDI bean of the type Foo acquired from the Spring context
>> 
>> Details: 
>> http://docs.jboss.org/seam/3/spring/latest/reference/en-US/html/spring-usage.html#d0e92
>> 
>> What Spring context?
>> ------------------
>> 
>> For flexibility reasons, we do not assume where the Spring context is coming 
>> from. Therefore, we allow different mechanisms for accessing a Spring 
>> context. 
>> In fact, multiple contexts can be used for import.
>> 
>> a) parent web context [3]
>> 
>> @Produces @Web @SpringContext ApplicationContext applicationContext;
>> 
>> b) Configuration-file based application context [4]
>> 
>> @Produces @Configuration("classpath*:META-INF/spring/context.xml") 
>> @SpringContext ApplicationContext applicationContext;
>> 
>> (TBD: issues like auto-import and auto-vetoing, as well as sensible defaults)
>> 
>> The Spring bean producer can reference a specific context (see documentation 
>> for 
>> details)
>> 
>> Note: When we get to the JIRAs we can consider alternative designs - e.g. 
>> grouping all producers for a particular context in a single bean and making 
>> that 
>> bean the Spring context reference marker.
>> 
>> Note #2: In regards to the CDISource implementation: I am happy with reusing 
>> some of the stuff there, but I have a hard time looking at the code, it's 
>> never been released (as in a Maven release), lacks documentation, and 
>> reverse 
>> engineering is hard. So if someone that is familiar with the code and finds 
>> something particularly apt for reuse, and it's also OK from an Apache code 
>> policy point of view, we should incorporate anything that helps.  What I am 
>> not 
>> particularly happy with is the approach of annotating CDI injection points 
>> with 
>> the @Spring marker, which I believe violates separation of concerns - I 
>> consider 
>> production or auto-registration a better approach (CDI targets should not 
>> know 
>> about the provenience of the bean).
>> 
>> 
>> CDI into Spring integration [5]
>> ===================
>> 
>> Conversely, CDI beans can be injected into Spring applications. To that end, 
>> we 
>> will provide a namespace (and possibly a JavaConfig configuration mechanism)
>> 
>> Structure
>> ======
>> 
>> The integration can be split into multiple modules, one for each features 
>> above. 
>> a) can be split into two different modules too.
>> 
>> Roadmap
>> ======
>> 
>> I think that the first vote would be for the inclusion of the module (or 
>> modules), followed by discussion of the JIRAs.
>> 
>> 
>> 
>> [1] http://markmail.org/message/7yefspfuvtz4jvmp
>> [2] https://cwiki.apache.org/DeltaSpike/spring-cdi-integration.html
>> [3] 
>> http://docs.jboss.org/seam/3/spring/latest/reference/en-US/html/spring-usage.html#d0e92
>> [4] 
>> http://docs.jboss.org/seam/3/spring/latest/reference/en-US/html/spring-usage.html#d0e92
>> [5] 
>> http://docs.oracle.com/javaee/6/api/javax/enterprise/inject/spi/BeanManager.html
>> 

Reply via email to