Hi all,

I found out that in order to control instance creating in Grizzly it is necessary
to override some methods in WebappContext. So I created these two classes:
https://github.com/PavelKastornyy/weld-core/tree/master/environments/servlet/core/src/main/java/org/jboss/weld/environment/grizzly 
However, objects are not injected in servlets as expected. Could anyone of Weld developers comment my code?

Best regards, Alex


Понедельник, 21 мая 2018, 17:49 +03:00 от Martin Kouba <mkouba@redhat.com>:

Dne 21.5.2018 v 16:44 Alex Sviridov napsal(a):
> Hi Martin,
>
> Thank you for your answer. I implemented half of container -
> https://github.com/PashaTurok/core/blob/master/environments/servlet/core/src/main/java/org/jboss/weld/environment/grizzly/GrizzlyContainer.java
>
> and changed WeldServletLifecycle
> https://github.com/PashaTurok/core/blob/20398c204f4e24d2a6f1c1ea3bc1d9381ff8f25f/environments/servlet/core/src/main/java/org/jboss/weld/environment/servlet/WeldServletLifecycle.java#L363
>
>
> To use my Context I do:
> WebappContext webContext = new WebappContext("WebappContext", "");
> Listener listener = new Listener();
> webContext.addListener(listener);
> webContext.deploy(server);
>
> to add some servlet/filter to Grizzly WITHOUT CDI I do :
> ServletRegistration registration =
> webContext.addServlet("ServletContainer",  (Class<Servlet>)
> Class.forName("org.temp.TestServlet"));
> registration.addMapping("/");
>
> I've looked through undertow WeldServletExtension but can't understand
> when and where this extension is called.

In undertow an extension is a service provider of
io.undertow.servlet.ServletExtension, loaded automatically during
startup (see also java.util.ServiceLoader). You need to find out how and
where Grizzly allows to customize the instantiation/injection of
components.

> As I understand I need to make Grizzly webContext use CDI, so I need to
> make some factory for every
> servlet/filter/listener that will create instances of them using
> BeanManager and make Grizzly to use
> these factories. But where is the point where these factories will be
> used? Could you show me the direction?
>
> Best regards, Alex
>
> Понедельник, 21 мая 2018, 15:23 +03:00 от Martin Kouba
> <mkouba@redhat.com>:
>
> Hi Alex,
>
> do you have some publicly available project so that we can discuss a
> real code?
>
> In general, if you want to integrate Weld servlet with a custom servlet
> container:
>
> 1. Implement org.jboss.weld.environment.servlet.Container, e.g.
> GrizzlyContainer
>    - Container#touch() should return true if a specific container is
> detected
>   - Container#initialize() and Container#destroy() can be used to
> init/cleanup the container
>   - note that ContainerContext#getManager() returns a BeanManager
> which
> could be used later, e.g. for dependency injection; you can also obtain
> a BeanManager from the servlet context - see for example [1]
>
> 2. Implement a container specific "injection support"
> - each servlet container should provide its own SPI - you should
> implement this SPI so that injection into servlets, listeners and
> filters is supported; see for example [2] how undertow support is
> implemented
>
> 3. There is no need to "connect" EnhancedListener in any way. It should
> be registeded automatically. However, if you're trying to run an
> embedded servlet container you will need to register
> org.jboss.weld.environment.servlet.Listener manually.
>
> Martin
>
>
> [1]
> https://github.com/weld/core/blob/master/environments/servlet/core/src/main/java/org/jboss/weld/environment/undertow/WeldInstanceFactory.java#L56
>
> [2]
> https://github.com/weld/core/blob/master/environments/servlet/core/src/main/java/org/jboss/weld/environment/undertow/WeldServletExtension.java
>
> Dne 18.5.2018 v 19:52 Alex Sviridov napsal(a):
> > Hi all
> >
> > Could anyone explain how to connect WebappContext that implements
> > ServletContext, to
> > Weld servlet env? I've read the code, but still can't understand
> how to
> > connect SomeContainer,
> > that implements servlet.Container, EnhancedListener and Grizzly
> > WebappContext? Could anyone
> > describe main principles how to do it? I would be very thankful.
> >
> > --
> > Best regards, Alex Sviridov
> >
> >
> > _______________________________________________
> > weld-dev mailing list
> > weld-dev@lists.jboss.org <mailto:weld-dev@lists.jboss.org>
> > https://lists.jboss.org/mailman/listinfo/weld-dev
> >
>
> --
> Martin Kouba
> Senior Software Engineer
> Red Hat, Czech Republic
>
>
>
> --
> Alex Sviridov

--
Martin Kouba
Senior Software Engineer
Red Hat, Czech Republic


--
Alex Sviridov