users@jersey.java.net

[Jersey] Re: Forcing servlet loading?

From: Pavel Bucek <pavel.bucek_at_oracle.com>
Date: Wed, 14 Sep 2016 16:29:13 -0700

Hi Uri,

it's not possible to assess this issue without having some more
information about the server itself.

Was there any log produced? Is the JVM still running? Can you do jstack
<pid>?

Also, how is your edu.mit.WeirdQuery servlet using Jersey? Why don't you
use org.glassfish.jersey.servlet.ServletContainer?

(I mean something like:

<servlet>
     <servlet-name>testServlet1</servlet-name>
     <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
     <init-param>
         <param-name>javax.ws.rs.Application</param-name>
         <param-value>org.glassfish.jersey.tests.integration.servlet_25_init_1.Servlet25init1</param-value>
     </init-param>
     <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
     <servlet-name>testServlet1</servlet-name>
     <url-pattern>/servlet_path/*</url-pattern>
</servlet-mapping>

)

Ah, you most likely do the JNI stuff there somehow and then extending or
wrapping Jersey Servlet (is that correct?). Anyway, it could be
implemented in a class managed by Jersey, but that shouldn't really matter.

Regards,
Pavel


On 14/09/16 16:04, Blumenthal, Uri - 0553 - MITLL wrote:
>
> I have the following problem.
>
> First, my configuration. My environment is comprised of:
>
> 1.Somebody else’s specialized server that talks proprietary protocol
> and does weird things, and that is accessible over the network;
>
> 2.My Tomcat server that houses my RESTful servlet
> edu.mit.WeirdQueryimplemented in Jersey;
>
> 3.Native C library that implements interface to that weird server.
>
> My servlet (2) needs to talk to that remote server (1). The only way
> to do so is by invoking functions in that native library (2). I
> implemented the interface between (2) and (3) via JNI. At
> initialization the native library gets loaded, connection to the
> server (1) established, and from that point on my servlet (2) can
> process RESTful requests and interact with that weird server.
>
> As I understand, currently Tomcat (and/or Jersey) would load my
> servlet when the first REST request arrives for it (and then my
> servlet would run @PostConstruct init()and do all those nifty things
> to get the connection up and running).
>
> It all works, but there is a problem: for reasons I don’t want to
> delve into right now, I need to initialize my servlet (2) when the
> Tomcat comes up, rather than when the first REST request comes in, and
> Tomcat/Jersey load and initialize my servlet.
>
> I tried to trick Tomcat into loading my servlet by adding the
> following to its web.xml file:
>
> <servlet>
>
> <servlet-name>my-servlet</servlet-name>
>
> <servlet-class>edu.mit.WeirdQuery</servlet-class>
>
> <load-on-startup>2</load-on-startup>
>
> </servlet>
>
> to make Tomcat load it upon startup. The result was that the servlet
> and the server both froze. L
>
> Yes, I know this server doesn’t display the best manners – but it’s
> not under my control, and I need to proxy RESTful requests for it.
>
> Would appreciate any advice.
>
> Thanks!
>
> --
>
> Regards,
>
> Uri Blumenthal
>