I'm not sure this solves my problem...

If I pull my Servlet out of my application's code then the instance will be 
constructed and loaded by Tomcat as usual, but then the Servlet can't access 
my application's internal data.  I need the Servlet to have a callback into 
my application for it to obtain the data required for generating the response.

As a more complex example, imagine creating an HTTP front-end to, say, a 
Java-based text editor.  For the Servlet to see what's happening within the 
editor -- which file is being edited, where's the cursor, etc --it'll need 
direct access the editor's data structures.  Spilling and updating this data 
to a shared file/database/whatever would be wasteful; in my intended 
application there's 100+ megs of constantly changing data that the Servlet 
may need to examine when generating its response.

Todd

On Friday 02 November 2001 14:10, Craig R. McClanahan wrote:
> Here's the Tomcat 4 approach -- 3.x has similar things but I'm not as
> familiar with the details.
>
> You have two fundamental choices, based on whether you want to use
> server.xml to configure Tomcat or not:
>
> * To use server.xml, you just need to set up an environment
>   like the "catalina.sh" script does, and call
>
>     Bootstrap.main("start");
>
>   in a separate thread.  When you ultimately want to shut things
>   down, call:
>
>     Bootstrap.main("stop");
>
> * To configure all the components yourself, you will use the
>   org.apache.catalina.startup.Embedded class (similar to
>   EmbeddedTomcat in 3.x).  This class includes a dummy main()
>   program that demonstrates how you do things.
>
> For actually processing the requests yourself, you would only need a
> single webapp (the ROOT webapp) with a web.xml that configures your
> servlet to handle all requests (i.e. a <servlet-mapping> with a pattern of
> "/*").  There's no need for interceptors (3.x) or valves (4.x) to do this.
>
> I would recommend you implement the application logic as a standard
> servlet, in its own class, and separate the startup/shutdown issues out to
> their own class.  There is nothing to be gained by combining them.
>
> Craig
>
> On Fri, 2 Nov 2001, Todd Wright wrote:
> > Date: Fri, 2 Nov 2001 12:25:23 -0400
> > From: Todd Wright <[EMAIL PROTECTED]>
> > Reply-To: Tomcat Users List <[EMAIL PROTECTED]>
> > To: [EMAIL PROTECTED]
> > Subject: Embedding Tomcat with intra-app Servlets
> >
> >
> > I'd like to embed Tomcat within my Java application, but where some
> > Servlet requests would *directly* call into my running application's code
> > (+data). The current "EmbededTomcat" support seems to be aimed at
> > launching a stand-alone Tomcat that only supports file contexts, with no
> > callback support for access to the launching application.
> >
> > I'm thinking of Tomcat 3.3, 'though 4.0 could be used if required.
> >
> > For example, suppose I have a calendar application that I'd like to add
> > web support.  Inside my application I have all the data I need, and I'd
> > like my servlets to directly access my the data structures.  Flattening
> > the data out to an external database/filesystem is not an option.  All
> > Servlet requests would funnel into my application so I can call my own
> > (inner) Servlet.   I still want Tomcat to do the HTTP parsing, SSL,
> > sessions, Servlet-API, etc. My application must load the internal Servlet
> > instance.
> >
> > Can I use an interceptor, or (if needed) pull apart "EmbededTomcat"?  Is
> > there an example of how to do this?  I hope it's clear why this would be
> > a very useful embedding scenario...
> >
> > Pseudocode:
> >
> >     public class MyApp implements Runnable {
> >
> >        /** launcher */
> >        public static void main(String[] args) {
> >            // launch!
> >           (new MyApp()).run();
> >        }
> >
> >        public void run() {
> >           // create my internal Servlet before Tomcat is launched
> >           //
> >           // this inner class is defined later in this method
> >           Servlet myServlet = new MyServlet();
> >
> >           // launch Tomcat
> >           EmbeddedTomcat et = new EmbeddedTomcat();
> >           et.setArgs(new String[] {"start"});
> >           et.execute();
> >
> >           //
> >           // hand-waving here!   Could be moved to before the
> > "et.execute()". //
> >           insert myServlet into Tomcat to handle all "/*" requests
> >
> >           //
> >           //  I now want "myServlet" to be called with all "/*" requests
> >           //
> >
> >           // run forever in this example...
> >        }
> >
> >        /**
> >         * sample internal data method.
> >         *
> >         * MyServlet will call this method
> >         */
> >        public String getInternalString() {
> >           return "foo";
> >        }
> >
> >        /**
> >         * My inner servlet -- has access back into "MyApp"
> >         *  instance (non-static).
> >         */
> >        private class MyServlet extends HttpServlet {
> >           public void doGet(
> >               HttpServletRequest request,
> >               HttpServletResponse response)
> >                    throws IOException, ServletException  {
> >            response.setContentType("text/html");
> >            PrintWriter out = response.getWriter();
> >            out.println("<html><body>Internal String is ");
> >
> >            // access internal MyApp method/data!
> >            out.println(getInternalString());
> >
> >            out.println("</body></html>");
> >        }
> >     }
> >
> > Thanks!
> >    Todd
> >
> > --
> > To unsubscribe:   <mailto:[EMAIL PROTECTED]>
> > For additional commands: <mailto:[EMAIL PROTECTED]>
> > Troubles with the list: <mailto:[EMAIL PROTECTED]>
>
> --
> To unsubscribe:   <mailto:[EMAIL PROTECTED]>
> For additional commands: <mailto:[EMAIL PROTECTED]>
> Troubles with the list: <mailto:[EMAIL PROTECTED]>

--
To unsubscribe:   <mailto:[EMAIL PROTECTED]>
For additional commands: <mailto:[EMAIL PROTECTED]>
Troubles with the list: <mailto:[EMAIL PROTECTED]>

Reply via email to