On Wed, Nov 13, 2013 at 1:43 PM, John Sarman <johnsar...@gmail.com> wrote: > So let me filter through injection of App. > CdiWicketFilter gets injected factory. > @Inject > CdiWebApplicationFactory applicationFactory; > > the Factory get injected the following > @Inject > @Any > Instance<WebApplication> applications; > @Inject > CdiConfiguration cdiConfiguration; > > If there is only one application in a war then the web.xml only needs > <filter> > <filter-name>CdiApplication</filter-name> > <filter-class>org.apache.wicket.cdi.CdiWicketFilter</filter-class> > </filter> > if multiple then additional > <init-param> > <param-name>applicationName</param-name> > <param-value>CdiExample</param-value> > </init-param> > and @WicketApp("CdiExample") added.
i dont see this as an advantage. specifying a class name is trivial. further you are assuming i am running inside a container that has its filter's managed by cdi, this is not always the case so using your cdi filter would fail. one would have to fall back on wicket-filter and specify the cdi application factory that you provide, but that class itself assumes it is managed by cdi, so it wont work either. so you did not leave an escape hatch for people using simple containers. my original code may not be "cdi-pretty" but it works for all containers out there - cdi managed or not. > > No need to start up CDI in init() we do not start up cdi in init, we configure how it interacts with the wicket application. settings such things as conversation propagation mode, etc. > Start using CDI. > > For apps that may want to add CDI they just > <filter> > <filter-name>CdiApplication</filter-name> > <filter-class>org.apache.wicket.cdi.CdiWicketFilter</filter-class> > </filter> > > Start using CDI. > > So I still defend injection of the Cdi Wicket integration code. > > Also if it is removed then code will have to be added to differentiate > which cdi implementation is being used. > > Currently CDI does this so long as two different CDI implementation jars > aren't add, which would be ambiguous. this will still work. you can still inject the configuration using noncontextual and pull the right instance. or use jdk's ServiceLoader to find all implementors. my problem with this is that there is a specific lifecycle to the application that is not managed by cdi. it is not safe to use the application instance after it has been created, you have to wait until wicket calls certain methods on it. by making it managed you are giving the impression that it is safe to inject the instance and use it in various places. it is not, not until it has been properly configured. i do not want to debug cases where my configuration changes to the application disappear because my code got that injected the application and configured it got called before internalInit(). either create a subcpass with @PostConstruct that configures the application - which wont work - people dont like using subclasses - or create a provider. -igor > On Wed, Nov 13, 2013 at 4:31 PM, Igor Vaynberg <igor.vaynb...@gmail.com>wrote: > >> i agree we should restart with the original implementation and >> incrementally introduce the new features - thats what i proposed in >> the original pull request. >> >> i am not a big fan of having the application instance managed. what is >> the value of this? it can be injected using noncontextual just like >> everything else... >> >> -igor >> >> >> On Wed, Nov 13, 2013 at 1:19 PM, Emond Papegaaij >> <emond.papega...@gmail.com> wrote: >> > Hi all, >> > >> > You probably noticed the the flood of emails regarding wicket-cdi these >> > last few days, which IMHO is good, because it means wicket-cdi is alive. >> > However, the current status is that the current (old) implementation of >> > wicket-cdi works badly with CDI 1.1 and the experimental (new) version is >> > broken in various ways. This is not good, as there is no good >> > implementation to use for CDI 1.1 users. >> > >> > I've reviewed parts of the code in wicket-cdi-1.1 and noticed the >> following >> > problems: >> > - Featuritis: it supports all kinds of usecases nobody is every going to >> > use, such as: partly managed applications, per-conversation >> > auto-conversions, per-conversation propagation, package ignores, switched >> > to enable/disable injection on almost everyting. >> > - Buggy: auto-conversations are broken for everything but pages, >> injection >> > in anonymous classes was broken, probably more. >> > - Too much state: configuration options are copied all over the place, >> > objects with different lifecycles share state. >> > - Too much injection: everything is injected, which makes it almost >> > impossible to see what's linked to what. >> > >> > I've also noticed some very nices features: >> > - CDI 1.1 support with conversations via the Weld API >> > - Management of the application and the Wicket-cdi configuration by cdi. >> > - Better implementation of NonContextual injection, using caches. >> > - Better testcases >> > >> > The experimental code is in such a state that is it almost impossible to >> > cleanup. On the other hand, I do not want to loose some of the new >> > features. Therefore, I propose the following: restart the wicket-cdi-1.1 >> > implementation, starting from the current wicket-cdi implementation and >> > reintroducing the features one-by-one. Also, I would like to remove some >> of >> > the existing features, like most of the toggle-switches, and I would like >> > to make the new CdiWebApplicationFactory mandatory to always have the >> > application be managed. All this will still be experimental in wicket 6, >> > but perhaps it can be made the default in 7. As we at Topicus are >> currently >> > starting the migration from JBoss 7.1 to WildFly 8, I can work on this 1 >> or >> > 2 days a week. >> > >> > Let me know what you think, >> > Emond >>