We are using FlowLogix CDI support in production now.
The code is basically taken from Magnus' module, and
enhanced it a bit to be more resilient in case CDI is not present.
We've been using it in production for 6 months and it works great.

On Mar 10, 2013, at 5:56 PM, Magnus Kvalheim wrote:

> Hi.
> 
> Our motivation at the time was to investigate a move from a spring stack to
> a jee one.
> Most is written using jee annotations, with spring behind the scenes, so a
> switch looked feasible.
> 
> I made the tapestry-cdi module which bridged the gap on tapestry side.
> ( https://github.com/magnuskvalheim/tapestry-cdi ).
> 
> It worked quite well and got our apps playing nice with jee; jboss as7,
> jpa, cdi, +more and tapestry. But in the end it didn't move past sandbox
> stage and we're still with spring. It was a nice experience though and I
> found CDI quite solid and powerful and think that Tapestry does deserve a
> first class CDI module.
> 
> We never had any need to to do the reverse (expose tapestry services to
> cdi) so we didn't explore that in detail.
> Tapestry IOC has a lot going for it as well so I can see that some would
> like the option to go that direction as well.
> 
> I think that maybe CDI->Tapestry and Tapestry->CDI should be
> two separate modules. Or if it's in same module - have a convenient way to
> configure what directions for it to operate.
> 
> For CDI->Tapestry I would be happy to donate my module if it can be useful.
> Think maybe Lenny have some production related experience with it.
> The other mentioned, cdi-tapestry-contribution (
> https://github.com/rmannibucau/cdi-tapestry-contribution ) looks good and
> could be used somewhere in production as well.
> IMO we only need one good supported one :-)
> 
> --magnus
> 
> On Sun, Mar 10, 2013 at 10:15 AM, Lenny Primak <lpri...@hope.nyc.ny.us>wrote:
> 
>> Kalle, that is exactly correct.
>> The CDI stuff (and by extension the CDI code in FlowLogix) which is taken
>> direct from CDI module
>> is so meant to use CDI beans in Tapestry, not use Tapestry services as CDI
>> beans.
>> 
>> On Mar 10, 2013, at 1:58 AM, Kalle Korhonen wrote:
>> 
>>> Both of these seem to be about referencing and using CDI managed beans in
>>> Tapestry services, please correct me if I'm wrong. What I'm asking is the
>>> reverse - using Tapestry services in applications & frameworks expecting
>> a
>>> CDI environment.
>>> 
>>> Kalle
>>> 
>>> 
>>> On Sat, Mar 9, 2013 at 3:41 PM, Lenny Primak <lpri...@hope.nyc.ny.us>
>> wrote:
>>> 
>>>> Actually, the CDI SPI statement may not be accurate.
>>>> CDI support uses BeanManager to do its job, so its CDI SPI.  Not sure,
>>>> Kalle, if that's what you are referring to.
>>>> 
>>>> 
>>>> 
>> http://code.google.com/p/flowlogix/source/browse/tapestry-services/src/main/java/com/flowlogix/web/services/CDIModule.java
>>>> 
>>>> On Mar 9, 2013, at 5:56 PM, Lenny Primak wrote:
>>>> 
>>>>> I would love to contribute the FlowLogix module, or as much of it as it
>>>> still applies to tapestry 5.4 into the core. It includes CDI support
>> plus
>>>> the JEE stack support.
>>>>> The CDI interface doesn't use SPI yet.
>>>>> 
>>>>> 
>>>>> 
>>>>> On Mar 9, 2013, at 5:34 PM, Kalle Korhonen <kalle.o.korho...@gmail.com
>>> 
>>>> wrote:
>>>>> 
>>>>>> Hey Magnus,
>>>>>> 
>>>>>> as part of your tapestry-cdi work, did you look into implementing a
>>>>>> Tapestry CDI SPI, i.e. an implementation of
>>>>>> javax.enterprise.inject.spi.BeanManager? This is related to my earlier
>>>>>> thread about injectable entitylisteners (
>>>>>> 
>>>> 
>> http://mail-archives.apache.org/mod_mbox/tapestry-dev/201210.mbox/%3CCA+=ewnb+tjv01fiyzsded3u5iyop3wcf1r3prhqtdjrm7ix...@mail.gmail.com%3E
>>>> ).
>>>>>> JPA 2.1 is required the check the SPI (see
>>>>>> http://java.dzone.com/articles/cdi-extensions-you-can-build,
>>>>>> http://java.net/downloads/jpa-spec/JavaPersistencePFD.pdf,
>>>>>> 
>>>> 
>> http://stackoverflow.com/questions/12951701/how-to-get-entity-manager-or-transaction-in-jpa-listener
>>>> ,
>>>>>> 
>>>> 
>> http://stackoverflow.com/questions/11740322/cdi-injection-is-not-working-in-servlets
>>>> ).
>>>>>> The CDI is a solid spec, we should start thinking about offering
>>>>>> tapestry-cdi or similar as a core Tapestry module.
>>>>>> 
>>>>>> Kalle
>>>>>> 
>>>>>> 
>>>>>> On Thu, Aug 18, 2011 at 11:59 AM, Magnus Kvalheim <mag...@kvalheim.dk
>>>>> wrote:
>>>>>> 
>>>>>>> Yes, I've noticed. Great work Igor :)
>>>>>>> 
>>>>>>> I've intentionally not done anything for tapestry-cdi in terms of
>>>>>>> supporting
>>>>>>> javax.inject.@Inject.
>>>>>>> 
>>>>>>> As Tap @inject and javax @inject are interchangeable - cdi bean
>>>> injection
>>>>>>> with either @inject should 'just work' with tapestry-cdi and T5.3 :)
>>>>>>> 
>>>>>>> On Thu, Aug 18, 2011 at 12:56 PM, Igor Drobiazko
>>>>>>> <igor.drobia...@gmail.com>wrote:
>>>>>>> 
>>>>>>>> Just as a side note: starting with T5.3 it's possible to use JSR 330
>>>> for
>>>>>>>> injection.
>>>>>>>> 
>>>>>>>> Check this out:
>>>>>>>> http://tapestry.apache.org/using-jsr-330-standard-annotations.html
>>>>>>>> 
>>>>>>>> On Wed, Jun 8, 2011 at 1:56 PM, Magnus Kvalheim <mag...@kvalheim.dk
>>> 
>>>>>>>> wrote:
>>>>>>>> 
>>>>>>>>> Hi all,
>>>>>>>>> 
>>>>>>>>> We're looking into moving our apps from a 'traditional' servlet
>>>>>>> container
>>>>>>>>> with spring into a Java EE web profile server like glassfish 3.1.
>>>>>>>>> Motivations for doing this is to utilize cdi(jsr 299, 330), ejb3
>> and
>>>>>>>> more.
>>>>>>>>> Not just for the tapestry app, but also the other applications in
>>>>>>>>> our portfoleo which share common core business logic.
>>>>>>>>> 
>>>>>>>>> For reference on previous discussions:
>>>>>>> 
>>>> 
>> http://tapestry.1045711.n5.nabble.com/Java-based-spring-configuration-td3394086.html
>>>>>>>>> http://tapestry.1045711.n5.nabble.com/Discussion-td2421783i20.html
>>>>>>>>> 
>>>>>>>>> Now, I've tried running the tapestry quickstart app in glassfish
>> 3.1
>>>>>>>> (with
>>>>>>>>> the eclipse connector for publishing).
>>>>>>>>> This works ok - although I cannot make live class reloading work.
>> :(
>>>>>>>>> 
>>>>>>>>> Glassfish uses Weld, so the CDIModule is basically an
>> objectprovider
>>>>>>> for
>>>>>>>>> injecting Weld managed beans.
>>>>>>>>> (As you probably know CDI/Weld can also be used outside jee as
>>>>>>>> alternative
>>>>>>>>> to tapestry-ioc, spring, etc)
>>>>>>>>> 
>>>>>>>>> *CDIModule class*
>>>>>>>>> *public class CDIModule { *
>>>>>>>>> * public static void bind(ServiceBinder binder) {*
>>>>>>>>> *    binder.bind(ObjectProvider.class,
>>>>>>>>> CDIObjectProvider.class).withId("CDIObjectProvider");        *
>>>>>>>>> *    } *
>>>>>>>>> * public static BeanManager buildBeanManager(Logger log) { *
>>>>>>>>> * try {*
>>>>>>>>> * BeanManager beanManager = (BeanManager) new
>>>>>>>>> InitialContext().lookup("java:comp/BeanManager");*
>>>>>>>>> * return beanManager; *
>>>>>>>>> * } catch (NamingException e) {*
>>>>>>>>> * log.error("Could not lookup jndi resource:
>> java:comp/BeanManager",
>>>>>>> e);*
>>>>>>>>> * }*
>>>>>>>>> * return null;*
>>>>>>>>> * } *
>>>>>>>>> * public static void contributeMasterObjectProvider(*
>>>>>>>>> * @InjectService("CDIObjectProvider") ObjectProvider cdiProvider,*
>>>>>>>>> * OrderedConfiguration<ObjectProvider> configuration) { *
>>>>>>>>> *// configuration.add("cdiProvider", cdiProvider,
>>>>>>> 
>>>> 
>> "after:Service,after:AnnotationBasedContributions,after:Alias,after:Autobuild");
>>>>>>>>> *
>>>>>>>>> * configuration.add("cdiProvider", cdiProvider, "after:*"); *
>>>>>>>>> * } *
>>>>>>>>> *}*
>>>>>>>>> *
>>>>>>>>> *
>>>>>>>>> The beanmanager is expected to be found in jndi. If the beans.xml
>> is
>>>>>>>>> present
>>>>>>>>> it will be available at this point.
>>>>>>>>> The BeanManager is also exposed as a service and injectable for
>> other
>>>>>>>>> services or components.
>>>>>>>>> I've tested by adding the *@SubModule(CDIModule.class) *to my
>>>>>>> quickstart
>>>>>>>>> appmodule.
>>>>>>>>> *
>>>>>>>>> *
>>>>>>>>> *CDIObjectProvider class*
>>>>>>>>> *public class CDIObjectProvider implements ObjectProvider { *
>>>>>>>>> * private BeanManager beanManager;*
>>>>>>>>> * private Logger log;*
>>>>>>>>> * *
>>>>>>>>> * @SuppressWarnings({ "unchecked", "rawtypes" })*
>>>>>>>>> * private Set allowedScopes = CollectionFactory.newSet(*
>>>>>>>>> * ApplicationScoped.class,*
>>>>>>>>> * Singleton.class);*
>>>>>>>>> *
>>>>>>>>> *
>>>>>>>>> * public CDIObjectProvider(*
>>>>>>>>> * Logger log,*
>>>>>>>>> * @InjectService("BeanManager") BeanManager manager) {*
>>>>>>>>> * this.beanManager = manager;*
>>>>>>>>> * this.log = log;*
>>>>>>>>> * }*
>>>>>>>>> * @SuppressWarnings("unchecked")*
>>>>>>>>> * public <T> T provide(Class<T> objectType,*
>>>>>>>>> * AnnotationProvider annotationProvider, ObjectLocator locator) {*
>>>>>>>>> * Set<Bean<?>> beans =  beanManager.getBeans(objectType);*
>>>>>>>>> * if(beans!=null && beans.size()>0) {*
>>>>>>>>> * Bean<T> bean = (Bean<T>) beans.iterator().next(); *
>>>>>>>>> * if(hasValidScope(bean)) {*
>>>>>>>>> * CreationalContext<T> ctx =
>>>>>>> beanManager.createCreationalContext(bean);*
>>>>>>>>> * T o = (T) beanManager.getReference(bean, objectType, ctx); *
>>>>>>>>> * log.info("Found and returning:
>> "+objectType.getCanonicalName());*
>>>>>>>>> * return o; *
>>>>>>>>> * }*
>>>>>>>>> * }*
>>>>>>>>> * return null;*
>>>>>>>>> * } *
>>>>>>>>> * protected <T> boolean hasValidScope(Bean<T> bean) {*
>>>>>>>>> * return bean!=null && allowedScopes.contains(bean.getScope());*
>>>>>>>>> * }*
>>>>>>>>> *}*
>>>>>>>>> 
>>>>>>>>> I've limited the scope to singleton/applicationscoped. Perhaps also
>>>>>>>> Default
>>>>>>>>> could be accepted though.
>>>>>>>>> Until now I've only tested this with pojo's and not ejb's - but for
>>>>>>> that
>>>>>>>>> it's working as expected.
>>>>>>>>> I can inject CDI beans into pages and components using*
>>>>>>>>> org.apache.tapestry5.ioc.annotations.Inject*
>>>>>>>>> 
>>>>>>>>> I'm no expert to tapestry internals - so there could be
>>>>>>>>> other considerations that needs to be addressed.
>>>>>>>>> In fact in seemed just a little to easy to implement - so I must
>> have
>>>>>>>>> missed
>>>>>>>>> something. - Or perhaps it's just that easy to do in Tapestry :)
>>>>>>>>> 
>>>>>>>>> Thoughts, comments?
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> --
>>>>>>>> Best regards,
>>>>>>>> 
>>>>>>>> Igor Drobiazko
>>>>>>>> http://tapestry5.de
>>>>>>> 
>>>>> 
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>>>>> For additional commands, e-mail: users-h...@tapestry.apache.org
>>>>> 
>>>> 
>>>> 
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>>>> For additional commands, e-mail: users-h...@tapestry.apache.org
>>>> 
>>>> 
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>> For additional commands, e-mail: users-h...@tapestry.apache.org
>> 
>> 


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to