Good, cheap, non-tomcat servlet container?

Specifically, not using the Jasper jsp compiler, as it can't be counted on to recompile a changed .jsp (see http://issues.apache.org/bugzilla/show_bug.cgi?id=33453). I am frustrated with Apache software quality and (lack of)support, and searching for alternatives to Tomcat. It would also have to either work with JBoss or include an EJB stack with similar functionality to JBoss.

I have looked at Sun Application Server, which appears to use Tomcat in its entirety, and Jetty, which uses Jasper.

[510 byte] By [jleecha] at [2007-10-2 17:00:36]
# 1

Hi,

Have you tried looking into Macromedia's, JRun?

I personally haven't used it, but its an alternative application server.

There's also Resin, by Caucho technology.

Again, I've only read about these application servers, but have never used them but they are alternatives.

See how you go.

stevekatsarasa at 2007-7-13 18:14:09 > top of Java-index,Enterprise & Remote Computing,Web Tier APIs...
# 2

> Specifically, not using the Jasper jsp compiler, as

> it can't be counted on to recompile a changed .jsp

> (see

> http://issues.apache.org/bugzilla/show_bug.cgi?id=3345

> 3). I am frustrated with Apache software quality and

> (lack of)support, and searching for alternatives to

> Tomcat. It would also have to either work with JBoss

> or include an EJB stack with similar functionality to

> JBoss.

>

> I have looked at Sun Application Server, which

> appears to use Tomcat in its entirety, and Jetty,

> which uses Jasper.

I also have frustration(s) on Tomcat, in many aspects.

I recommend Resin Web server as the 'frustration buster'.

http://www.caucho.com/

The tech-lead Scott Ferguson is a very knowledgeable man and frequently gives insightfull

answers on Resin user mailing list.

hiwaa at 2007-7-13 18:14:09 > top of Java-index,Enterprise & Remote Computing,Web Tier APIs...
# 3

Here's a quote from Resin ML archive:

--

<quote>

From Resin users ML archive:

Q:

I have a general question about the most effective way to process JSP page

updates.

My impression of the JSP engine is that in the event of a change to the JSP

file (changed file modification date), the JSP page is automatically

recompiled and reloaded. This is a great feature -- it means you have the

flexibility that is often found in interpreted languages like Perl in terms

of not having to restart the server when changes are made.

Unfortunately for me, that flexibility breaks down when I start including

JavaBeans, or other Java classes into my JSP pages through the "import"

directive. There doesn't seem to be any way to make a JSP page also

dependent on another external class file, and to force recompilation if

that external class file

Here's an example...

start of file MyJSP.jsp...

<@ page language=java

import="com.mycompany.MyClass,caucho.sql.db.*,java.io.*" />

....some JSP code mixed with HTML....

end of file MyJSP.jsp

For the above JSP file, the servlet engine doesn't seem to recognize that

the JSP page is dependent on the file "com.mycompany.MyClass". If I make

any changes to the file MyClass.java and recompile, the changes won't take

effect until I restart the servlet engine.

Any thoughts on how to make a JSP file explicitly dependent on another

external file?

I suppose you could try to use a utility like make to help manage

dependencies, but this gets ugly -- especially for compiled JSP page

servlet classes which are temporary anyways. Any suggestions for a solution

to this problem?

-- Bryan Bunch

A:

You don't actually need to recompile the JSP pages, you just need them

reloaded. JSP pages are just like any other Java classes; you usually can

compile classes independently. The only case where you need the JSP pages

recompiled is if you change 'final static' constants.

If your classes are in the global classpath, there's nothing Resin can do. I

don't know how you're loading your classes like com.mycompany.MyClass.

However, you can put them in WEB-INF/classes or in a jar in WEB-INF/lib. When

any class/jar in either changes, Resin will reload the entire application

including any JSPs. I'm pretty sure this is what you want.

Resin lets you add to the auto-update class path. Here's how:

<http-server>

<classpath id='/home/myhome/ws/classes'/>

<classpath id='/home/myhome/ws/myjar.jar'/>

...

</http-server>

If any of the classes in /home/myhome/ws/classes changes, Resin will reload

the application just like it reloads a JSP.

If you're really daring, you can have Resin compile your beans for you.

(There are a few important bugs fixed in the latest snapshot, so you would

want to use the snapshot.) That way, you get auto-compilation and

auto-loading of your beans when you change any Java source. This is certainly

helpful for small test cases, but it can get confused for large projects.

<classpath id='/home/myhome/ws/classes' source='/home/myhome/ws/src'/>

-- Scott

</quote>

hiwaa at 2007-7-13 18:14:09 > top of Java-index,Enterprise & Remote Computing,Web Tier APIs...