On Fri, Sep 13, 2013 at 9:27 PM, Niki Dokovski <nick...@gmail.com> wrote:

>
>
>
> On Fri, Sep 13, 2013 at 8:55 PM, Nick Williams <
> nicho...@nicholaswilliams.net> wrote:
>
>>
>> On Sep 13, 2013, at 12:42 PM, Igor Urisman wrote:
>>
>> > I couldn't agree more.  WebSocket is provided by the container.  But the
>> > time any app code gets to run, Spring of Fall, container ought to be
>> done.
>> > -Igor.
>> >
>> >
>> > On Fri, Sep 13, 2013 at 10:38 AM, Christopher Schultz <
>> > ch...@christopherschultz.net> wrote:
>> >
>> >> -----BEGIN PGP SIGNED MESSAGE-----
>> >> Hash: SHA256
>> >>
>> >> Konstantin,
>> >>
>> >> On 9/13/13 7:50 AM, Konstantin Kolinko wrote:
>> >>> I see no issue here, as both WebSocket implementation and Spring's
>> >>> WebApplicationInitializer rely on use of
>> >>> "javax.servlet.ServletContainerInitializer" to initialize
>> >>> themselves.
>> >>>
>> >>> Reading the Servlet specification 3.1, I see no words in the
>> >>> specification on the ordering of ServletContainerInitializer
>> >>> instances. (It would be reasonable that they were covered by ch.
>> >>> "8.2.2 Ordering of web.xml and web-fragment.xml", but I see no
>> >>> explicit wording there).
>> >>
>> >> The fact that Tomcat uses an SCI is an implementation detail, so I'm
>> >> not sure the spec is relevant. I think it's reasonable for an SCI to
>> >> expect that the environment Tomcat provides is available without
>> >> having to resort to implementation-specific hacks like re-ordering
>> >> their own SCIs with respect to Tomcat's.
>>
>
>> The problem of SCIs and ordering is one that will surely be a matter of
>> extensive discussion for Servlet 3.2. I intend to lobby heavily for a
>> solution to SCI ordering in Servlet 3.2; importantly, a solution that uses
>> existing facilities so that 3.0 and 3.1 containers can implement it
>> retroactively with the existing API.
>>
>> From a discussion Mark and I had several months ago, Tomcat actually
>> orders SCIs according to the web fragment ordering. This isn't portable,
>> because it's not required in the spec--some containers do this, others
>> don't. The Spring web fragment has no defined order (see [1]). However, you
>> can define an absolute order in your deployment descriptor (web.xml):
>>
>>     <absolute-ordering>
>>         <others />
>>         <name>spring_web</name>
>>     </absolute-ordering>
>>
>> Since Tomcat orders SCIs according to web-fragment order, this /should/
>> work. However, I don't know whether container-provided SCIs abide by this.
>> For example: In Jetty, container SCIs always come before application SCIs
>> (and if Tomcat did this, you wouldn't be having a problem).
>>
>
> Chris is correct that this is an implementaion detail and current
> implementation uses initialization mechanism which is not precise. Since
> the container exposes the ws implementation and by the spec the
> ServletContext should contain the ServerContainer implementaion as
> attribute, I expect that to be found in whatevet application related
> framework I use. Perhaps the implementaion can be improved in way that
> WsSci is invoked first.
>
> Ordering of SCIs is still a problem for Servlet 3.2.
>

Mark, what is your opinion on the topic? I looked at the implementation of
WebappServiceLoader and perhaps it could be improved in a sense of the
ordering of the web-fragments. What I noticed is that the jars of the
web-fragments are processed according the ordering defined in the
descriptors. WebappServiceLoader  public Collection<T> load(Class<T>
serviceType). However the results of the processing are put in a collection
with unpredictable iteration order (servicesFound), Hence later when the
results are obtained from the scanned resources and new instances of SCis
are obtained the instantiation order is undefined.

Thoughts?


> Someone more familiar with the implementation (like Mark) could
>> undoubtedly tell you whether this will work, but it won't hurt to try.
>> Again, if it does work, it may only work in Tomcat; it might not work in
>> any other containers.
>>
>> [1]
>> https://github.com/spring-projects/spring-framework/blob/master/spring-web/src/main/resources/META-INF/web-fragment.xml
>
>
>

Reply via email to