Re: orion + multi processor's X86 PC

2001-01-28 Thread Scott Stirling

The way Java works with respect to CPUs is it implements threading
through the native OS it's running on.  That way the programmer doesn't
have to deal with OS-specific process and threading architectures in his
code. The only time this isn't the case is with older VM's on Linux and
UNIX where green threads were used.  Green threads were a user-level
thread library that made the JVM appear to the OS as a single-threaded
process.  You can still find green threads in some 1.2.x JVMs on Linux
and Solaris, but I wouldn't recommend anything less than a 1.3 JVM
anyway.

So a JVM running on an SMP system is responsible for cooperating with
the OS to manage threads across the processors.  Orion, JRun, Tomcat,
etc. do nothing to limit or enhance SMP support in the Java code because
it is entirely up to the JVM and the OS.

That said, any recent JVM  (i.e., 1.3) from any JVM vendor will support
SMP because they all rely on native thread implementations.  

Scott Stirling 

On 26 Jan 2001 08:42:01 +0100, PHiL wrote:
 Hi,
 
 We planned to go on production state of our developpement under ORION, but
 we don't have a clue on multiprocessors (SMP) and Orion.
 
 If we run a X86 PC server with 2 XEON and sun's JVM 1.3 + Orion + NT or
 2000, is this will be enought to take advantage of SMP ???
 Maybe we need to run 2 JVMs and setup a "cluster like" config ???
 
 If someone expirience this, just let us know.
 
 Thanks.
 
 PHiL.
 
 
 





Orion and J2EE licensing

2000-12-15 Thread Scott Stirling

I'm trying to grasp some J2EE licensing concepts.  I'm trying to decide if
Sun is fleecing some companies over J2EE branding fees while leaving others
alone for arbitrary or capricious reasons.  I just posted a long message
about it to the jbosslicense group at
http://www.egroups.com/group/jbosslicense.  There are some very disturbing
issues that are not only philosophically interesting, but important to Java
developers, organizations and companies who are basing business goals and
decisions on server-side Java software.  If any of the folks at Orion can
comment, that would be fascinating, since Orion is one of the few J2EE
servers I know of that's closed-source, but not (as far as I know) branded
J2EE.  However, I believe the open source J2EE servers out there are as much
at risk of being sued or halted by Sun as Orion, based on my understanding
of J2EE licensing and branding thus far.  If anyone can point to me to some
resources on this, please do.

I notices these relevant comments from the Orion FAQ:

"Q: What sets Orion apart from other application servers?

A: Many things make Orion a leader among application servers. A few of these
things are:
Superb performance. Orion is easily the fastest J2EE-based Application
Server
Orion is the only commercially available application server with full J2EE
support
Unique development features like auto-deploy and full hot-swap.
Very affordable pricing"

Now, since Orion has not (so far as I am aware) licensed J2EE from Sun,
there's no way they have the Sun compatibility test suite (CTS) for J2EE, so
they obviously haven't even tried to pass the tests.  Since BEA, IONA and
iPlanet have passed the CTS, I hardly think Orion is "the only commercially
available application server with full J2EE support."  And I would think
that sort of claim is precisely what would put Orion at the risk of being
dogged by Sun attorneys.

Here's another interesting quote:

"Q: Any plans to offer your source under a Linux-style license?

A: No, there are currently no such plans.
In fact, if we did, Sun might sue us since they see any implementation of
the J2EE specification as their intellectual property that we can not show
to anyone."

This makes no sense.  The source code for the RI of J2EE can be downloaded
by anyone who agrees to the Sun Community Source License.  jBoss implements
a large part of the J2EE specs, and that's LGPLed.  While I agree with the
Orion FAQ that there are certainly issues of intellectual property with J2EE
software, I don't agree with that logic at all.

I'll say the same thing I said about jBoss on the other list (substituting
"Orion" for "jBoss" everywhere):

"If Orion is allowed to implement many of the foundational J2EE
specs (JNDI, JTA, EJB, etc.), without paying a commercial license fee
for the specs and Sun APIs like BEA, IBM, IONA and others have done,
doesn't that tear a huge hole in the integrity and legality of Sun's
J2EE branding and licensing?  It makes it appear as though Sun is
unfairly targeting large businesses who use their APIs and specs,
while leaving open source/small businesses alone.  That would be
capricious, and I think illegal of Sun.

This may not be an issue now, because Orion is just gaining ground in
the business world.  But in 6-9 months, if Orion gains momentum, I
would expect the J2EE licensees to start complaining about loss of
market share to a product that's never commercially licensed the APIs,
never paid the contractual fees, and never passed the compatibility
tests.  They would pressure Sun to enforce the J2EE and Sun Community
Source License rules on Orion as a commercial product.  This could
also apply to JONAS, OpenEJB, Enhydra, jBoss etc."


I know this stirs up the pot, so to speak, and I know some people couldn't
care less.  But for my career and my interests in server-side Java and
things like open source and open standards, I think these issues are very
important.  I'm trying to get some feedback from like-minded folks or from
official representatives of commercial concerns on how these issues touch
them, whether they feel they've been resolved, how they understand/cope with
them, or even if their attitude is "we'll cross that bridge when Sun's
lawyers bring us to it."

Best regards,

Scott Stirling
West Newton, MA





RE: www.orionserver.com down again

2000-12-13 Thread Scott Stirling

That's because it was put back up in the interim.  I've noticed these
downtimes before too.

Scott Stirling
West Newton, MA

-Original Message-
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED]]On Behalf Of Juan Gargiulo
Sent: Wednesday, December 13, 2000 3:34 PM

The site works for me

-Original Message-
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED]]On Behalf Of Gerald
Gutierrez
Sent: Wednesday, December 13, 2000 11:36 AM


Once again the web site is down. This time a scan shows me that something
is listening on port 80, and one can connect to it via [telnet
www.orionserver.com 80], but nothing comes back. I'm not sure about the
other customers and potential customers of the Orion server, I'd like some
explanation for these frequent down-times. Is this the quality of service
that one can expect of this application server?





RE: Transaction across several different methods in Session beans

2000-12-13 Thread Scott Stirling

Maybe you're calling begin() and commit() on two different UserTransactions.
Does the line where you assign the return value of UserTransaction.begin()
to utx work?  That looks weird (shorthand coding style), but if it works I
guess it's OK.  The type of utx isn't declared anywhere in the code you
posted.

Check these lines:

 public void begin()
  {
try
{
  utx = ejbCtx.getUserTransaction().begin();
}


and:

  public void commit()
  {
try
{
  ejbCtx.getUserTransaction().commit();
}

Scott Stirling
West Newton, MA

-Original Message-
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED]]On Behalf Of Lopez Esteban
Sent: Wednesday, December 13, 2000 6:14 AM
To: Orion-Interest
Subject: Transaction across several different methods in Session beans


Hi all,
I'm trying to use UserTransactions in a stateful session bean to associate
itself with a transaction across several diferent methods, but it does not
work. My code is:

Stateful Session Bean:
public class TransactionBean implements SessionBean
{
  private SessionContext ejbCtx;
   private Entity entityRole = null;

  public void setSessionContext(SessionContext context)
throws RemoteException, EJBException
  {
  ejbCtx = context;
  }

  public void ejbActivate() throws RemoteException, EJBException
  {
  }

  public void ejbPassivate() throws RemoteException, EJBException
  {
  }

  public void ejbRemove() throws RemoteException, EJBException
  {
  }

  public void ejbCreate() throws CreateException, EJBException,
RemoteException
  {
  }


  public void createEntity(String id)
  {
try
{
  Context context = new InitialContext();
  EntityHome entityHome =
(EntityHome)PortableRemoteObject.narrow(context.lookup("java:comp/env/entity
"),
EntityHome.class);
  ejbEntity = entityHome.create(id);
}
catch (Exception ne)
{
  ejbEntity = null;
  ne.printStackTrace();
}
  }

  public void setDescription(String description) throws RemoteException
  {
if (ejbEntity == null)
{
  throw(
new RemoteException("Entity is null, use createEntity() first"));
}
try
{
  ejbEntity.setDescription(description);
}
catch (RemoteException re)
{
  re.printStackTrace();
}
  }

  public void begin()
  {
try
{
  utx = ejbCtx.getUserTransaction().begin();
}
catch(Exception e)
{
  e.printStackTrace();
}
  }

  public void commit()
  {
try
{
  ejbCtx.getUserTransaction().commit();
}
catch(Exception e)
{
  e.printStackTrace();
}

  }

  public void rollback()
  {
try
{
  ejbCtx.getUserTransaction().rollback();
}
catch(Exception e)
{
  e.printStackTrace();
}
  }
}

and my client is:

public class TransactionTest
{
  public static void main(String[] args)
  {
try
{
  Context context = new InitialContext();
  TransactionHome home =
(TransactionHome)PortableRemoteObject.narrow(context.lookup("java:comp/env/t
ransaction"),
TransactionHome.class);
  Transaction tx = home.create();
  tx.begin();
  tx.createEntity("tx entity");
  tx.setDescription("tx description");
  tx.commit();
}
catch (Exception e)
{
  e.printStackTrace();
}
  }
}

I'm using Orion 1.4.4 and Windows 98. I set
transaction-typeBean/transaction-type in the ejb-jar.xml of Transaction
Bean and
container-transaction
description/
method
description/
ejb-nameentity/ejb-name
method-name*/method-name
/method
trans-attributeRequired/trans-attribute
/container-transaction

for Entity bean.

When I try to use this I catch the folow exception:
java.lang.IllegalArgumentException: No active Transaction
at
com.evermind.server.ApplicationServerTransactionManager.commit(JAX)
at transaction.TransactionBean.commit(TransactionBean.java:127)
at
Transaction_StatefulSessionBeanWrapper0.commit(Transaction_StatefulSessionBe
anWrapper0.java:190)
at java.lang.reflect.Method.invoke(Native Method)
at com.evermind.server.rmi.bf.do(JAX)
at com.evermind.util.f.run(JAX)

Any ideas.
Thanks, Esteban





RE: Distributed Transaction without EJB.

2000-12-13 Thread Scott Stirling

I'm not sure for JTS.  I suspect maybe with CORBA, but I've never thought
about it.

Theoretically? Yes.  In J2EE? No.

Servlets are designed for fast, stateless, dynamic processing.  Distributed
transactions require a transaction manager and resource managers.  The key
to having them work is the transaction manager, which ensures the
coordination of the distributed resources involved.  As long as you can
communicate your desires and maintain state from servlets to the transaction
manager, you can have your distributed transactions.  As I said, servlets
weren't designed to maintain state, so they aren't the best candidate for
this sort of thing (but when does that ever stop an architecture from being
built? -- I know, snide remark).  I'm sure there are non-EJB transaction
managers out there that can handle interaction with servlets via RMI or
CORBA.  JTS is an implementation of a transaction manager that supports
CORBA's OTS and X/Open's JTA.  I don't know if that would allow you to do
what you're asking.  JTS is not officially part of J2EE, so I haven't had to
deal with it personally.

Scott Stirling
West Newton, MA


-Original Message-
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED]]On Behalf Of Winston Ng
Sent: Tuesday, December 12, 2000 6:58 PM
To: Orion-Interest
Subject: Distributed Transaction without EJB.


Hi All,

Is it possible to perform distributed transaction using JTA/JTS from a
servlet without using EJB at all?

From reading some of the past posting, one of the benefits of using EJB over
Servlets is that EJB can provide distributed transaction but not servlets.
However, isn't it true that the feature is provided via JTA/JTS and
therefore can be provided using servlets???

Thanks
Winston





RE: EJB2.0 Generated class uncompilable

2000-12-08 Thread Scott Stirling

Take the version you have and do:

cd $ORION_HOME
java -jar autoupdate.jar

This will pull down the latest released build from Orion.  Pretty sweet
feature.

Scott Stirling
West Newton, MA

-Original Message-
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED]]On Behalf Of Serge
Knystautas

I'm somewhat new to Orion (I've walked through all the examples and am using
it to learn EJB 2.0), and was curious where you can get the 1.4.4 version?
I assume this is beta or worse quality non-public release, which I'm more
than happy to use, and any directions as to how to get advanced releases
would be appreciated.

Serge Knystautas
Loki Technologies
http://www.lokitech.com/






Orionserver.com down??

2000-12-05 Thread Scott Stirling

What's up with www.orionserver.com?  It's been down all day.

Scott Stirling
West Newton, MA




RE: Running two instances of Orion on the same IP and port

2000-11-28 Thread Scott Stirling
Title: Running two instances of Orion on the same IP and port



This 
has nothing to do with Orion per se. It's a fact of life that only one 
processat a time can bind to a port on a host. For example, say you 
had Orion bound to port 25 along with your email server. Who would try 
tohandle SMTP requests to port 25? Orion or the mail server? 
The answer is whoever bound the port first. And once a process has bound 
to a critical port (such as a Web server binding to port 80), it usually doesn't 
"let go" until the process is stopped.

Scott 
Stirling
West 
Newton, MA

  -Original Message-To: 
  Orion-InterestSubject: Running two instances of Orion on the same 
  IP and port
  Orioners, 
  Has anyone ever tried to run two instances of Orion on the 
  same machine, IP and port. What I am trying to do is have a second 
  instance of Orion listen to only certain virtual hosts (headers) and the first 
  pick up any unknown or blank headers.
  The reason for us doing it this way is to have a test 
  installation of Orion that will be restarted often and a second 'stable 
  'installation that will run some ancillary sites for our internal 
  network.
  I know that binding a second IP to the box and having the 
  second Orion listen on that IP would probably work. Is there an obvious 
  reason that the way I am attempting always gives me an "Error starting HTTP 
  server: Address already in use" error on the second instance?
  thanx, 
  Larry 


RE: Custom Tags Bug? Please help...

2000-11-15 Thread Scott Stirling

It is.  It's so obvious it can easily be overlooked:

For example:

public class Foo extends Object { }

How do you get a class to compile that has a field named 'class'?  I
couldn't do it.  The normal convention is to use the field name 'clazz' when
you mean 'class' in Java.

One thing to check is that the type of this variable is the same when its
set(Type t) and get(){ return Type t;} methods are called, and that you
aren't mixing types with a 1.3 JVM.  The 1.3 JVM is stricter about some of
the JavaBean conventions.

Scott Stirling

-Original Message-
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED]]On Behalf Of Duffey, Kevin
Sent: Wednesday, November 15, 2000 4:03 PM
To: Orion-Interest
Subject: RE: Custom Tags Bug? Please help...


I would think class is a reserved word in java. For example MyClass.class
refers to the Class of the class. I would rename it from class to myClass or
something. Same for your getter/setter methods.

 -Original Message-
 From: Claudio Cordova [mailto:[EMAIL PROTECTED]]
 Sent: Wednesday, November 15, 2000 9:55 AM
 To: Orion-Interest
 Subject: Custom Tags Bug? Please help...


 Hello, I have questions about custom tags, I don't know for
 sure they are
 bugs but they seem like it.

 BUG #1

 I have a custom tag with a required attribute called "class".
 When I use it
 in a page the compiler displays an error like:

  500 Internal Server Error

 Error parsing JSP page /webdev/advtags/forTag.jsp line 13

 Property 'class' of bean/tag
 'com.taglib.wdjsp.mut.ForPropertyTag' is read
 only


 The tag has a "setClass" method. Why is this happening? If I
 change the
 attribute name to anything else it works!


 BUG #2

 The method "isValid" from the TagExtraInfo class is getting
 called as many
 times as there are attributes in the tag...Each time the
 TagData object has
 one more attribute value?  Is this correct?








RE: DeadlockException

2000-11-14 Thread Scott Stirling

Does Orion do more than check a timeout value for deadlock detection?  Some
servers just assume a deadlock if a method call takes too long.  That's the
simplest type of deadlock detection.

Anyway, I use CtrlPause/Break to get a stack dump on Windows (i.e, I
don't think CtrlScrLk will work, will it?). The Ctrl\ combo also
works on both Windows and UNIX. A real stack dump from the JVM will tell you
more about what K-5 and E-6 are, and show you a call stack for the two
threads that are deadlocked.

So did the Orion server print out that deadlock info, or was that somehow
percolated from the JVM?  That's interesting.  You're extremely lucky if the
JVM detects a deadlock for you, which it sometimes does.  Having spent many
hours wading through stack dumps from problem apps and buggy JVMs, I think
if you have the exact deadlock info like you do below (thread A is locking
resource x and thread B is locking resource y, etc.) you're pretty darn
fortunate.  Lots of times that deadlocks occur, JVMs don't detect it.

Disable JIT when before you try to catch this in a stack dump, or else you
won't be able to see the line numbers in the stack traces.

Scott Stirling

-Original Message-
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED]]On Behalf Of Mike Clark
Sent: Tuesday, November 14, 2000 2:23 PM
To: Orion-Interest
Subject: Re: DeadlockException


Ah, nothing quite like two threads in a deadly embrace!  At least the
server detects the deadlock and prints some useful debug for deadlock
situations.

Try generating a VM dump using

   Windows: Ctrl Scroll Lock
   *nix   : kill -QUIT server process id

In general, you're looking for a thread in the MW state that has
already locked a monitor on which some other MW thread is trying to
synchronize.

In your case, thread 5 and thread 6 are deadlocked, both waiting to
synchronize on a monitor held by the other.  The stack trace
information may help you determine where the deadlock is occurring.

Mike

--- Thomas Hertz [EMAIL PROTECTED] wrote:

 Hello,

 AC Does anyone know what the following error means?

 AC 11/14/00 10:51 PM Error in bean
 com.netregistry.aucom.accounting.BillingAccount:
 AC Error in ejbPassivate
 AC com.evermind.server.DeadlockException: Deadlock detected: thread
 11 is waiting for
 AC resource entity 1003 held by thread 11

 AC Any ideas on how to track it down?

 Just ten minutes before I read this message I encountered the same
 error in my application. (1.4.4)

 com.evermind.server.rmi.OrionRemoteException: Transaction was rolled
 back:
 com.evermind.server.DeadlockException: thread 6 is waiting for
 resource entity K-5
 held by thread 5 in transaction [Transaction
 4d:1:0:0:0:0:0:0:0:e2:0:e2:d4:67:89:da]
 who is waiting for resource entity E-6 held by thread 6 in
 transaction [
 Transaction 4a:1:0:0:0:0:0:0:0:e2:0:e2:d4:67:89:93]; nested exception
 is:

 I am not quite sure what that means exactly. Can anybody help us?

 Thanks in advance,

/Thomas





RE: XSLT processors

2000-10-12 Thread Scott Stirling

Oh, you caught that!  I thought it might slip by after I sent it and realized it
myself.  Yes, I did get it right in the book.

More pluses/minuses on Xerces and Xalan:

Xalan Java is the XSLT processor, which was 843 KB last time I checked.  It
depends on Xerces by default, which was/is around 1.5 MB.  The plus is that you
can use Xalan with other XML parsers that support DOM 2/SAX 1.

Scott

 -Original Message-
 From: [EMAIL PROTECTED]
 [mailto:[EMAIL PROTECTED]]On Behalf Of Christian Sell
 Sent: Thursday, October 12, 2000 3:10 AM
 To: Orion-Interest
 Subject: Re: XSLT processors


 To my knowledge, Xerces is an XML parser, and Xalan does the XSLT stuff.
 Hope you got that right in your book :-).






RE: HARDWARE FOR J2EE apps

2000-10-11 Thread Scott Stirling

Why would you use mySQL over Postgresl?  They're both free, but Postgresql has a
JDBC driver that's XA-compliant.  Also, mySQL is known to blow away your whole
database if it has a bad crash, whereas Postgresql is better at persisting data
through a bad crash.

How does Interbase 6 compare to Postgresql?  Is it free?

Scott Stirling
West Newton, MA

 -Original Message-
 From: [EMAIL PROTECTED]
 [mailto:[EMAIL PROTECTED]]On Behalf Of Duffey, Kevin
 Sent: Wednesday, October 11, 2000 4:01 PM
 To: Orion-Interest
 Subject: RE: HARDWARE FOR J2EE apps


 Hi,

  sounds very nice but what about the database? how do you cluster that
  without spending an arm and a leg? our experience is, that
  it's not that
  hard to set up clustered web services with static pages and
  servlets but
  the really expensive part is, when you want that high
  availability for your
  database. it doesn't buy you much if you have highly
  available ejbs when
  the database server goes down. many people use clustered
  apache/jserv on
  linux and cheap pc-hardware for high volume transactional
  websites but have
  a large enterprise sun running oracle in the back. anyone out
  there running
  a configuration with orion that includes a database with
  failover that
  doesn't blow up the budget too much (compared to other components)?

 Well, to start off with there is mySQL and the one I like the most is
 Interbase 6..a free powerful RDBMS. However, as far as clustering them..I
 don't quite know the best way. I would think a load-balancer or a switch or
 something, would be required. Nobody ever said it was cheap! ;) I used to
 think $25,000 could easily set up a website from front to back, software,
 hardware, etc..but not even close these days. If you are just starting out,
 I would use Orion for front-end and ejb-logic tiers in a clustered
 environment (for developing/testing), with a single server running mySQL or
 Interbase for the database. Once you get some funding and move beyond the
 concept phase, you should put a sizeable chunk to invest in co-locating your
 site and doing the full load-balancing setup. I would estimate a cheap setup
 with 2 front-end web/servlet servers failed over, 2 ejb servers, and a
 database cluster will still run around $100,000, to co-lo it..which is
 probably the best thing to do to make sure its up 24/7.








RE: XSLT processors

2000-10-11 Thread Scott Stirling

You'll probably get lots of replies on this, and I'm no XSLT guru by any means,
but I have some words.

1. When you write your XSLT sheets, you can specify a few output helper methods:

 xsl:output method="html" indent="yes" omit-xml-declaration="yes"/


2. You determine in your XSLT what rules and replacements happen to the input
data.  If you input XML and you want to output HTML or WML or Java (BTW, this is
how JRun creates servlets from JSPs: JSP parsed to--XML--apply XSLT-- get
Java) or whatever, you match up expected input XML elements in your XSLT, and
specify template data that you want to replace the XML element (at least this is
the easy way to do it):

Here's a section of XSLT where I am matching against incoming RSS XML elements
(channel, title, and item) and outputting an HTML table of that data:

xsl:template match="channel"

  table border="1" cellpadding="2" cellspacing="0"
tr bgcolor="#aa"
  td
b
  font size="+1" color="#ff"
xsl:value-of select="title"/
  /font
/b
  /td
/tr

tr
 td
xsl:apply-templates select="item"/
  /td
/tr
  /table
/xsl:template

Usually you use these XSLT engines by instantiating an instance of the engine or
an interface to it, and passing XML, XSL, and an instance of an OutputStream to
one or many constructors/methods.  The engine takes the two input sources, does
its magic, and spits out the output to the out stream of your choice.

I used Xerces to write a custom tag for a JSP book I co-wrote that's coming out
in a month or so.  The tag looks like this on a JSP, for example:

synd:rdf rdfURL="http://www.slashdot.org/slashdot.rdf"
  xslURI="xml/rdf092.xsl"/

It's slowed by the initial request for the RDF page, but if you have all your
XML and XSL local or in a database, this stuff goes much quicker (but doing
syndication will always require someone/something to hit the Web for updates).
The code is very simple and just uses the Xerces APIs to do the processing.

You could also include the dynamic XML output of one JSP into another JSP or
servlet, which could then call XSLT engine APIs and a stylesheet to convert the
XML to another type of data.

My main beef about Xerces is that it's 1.5 MB.  That's way too big if all you
want is a fast, light XSLT engine.  But its' free and it's got features and it
works well and its very easy to use.  James Clark has a lightweight XSLT
processor:

http://jclark.com/xml/xt.html

Here are some other pointers:

Producing HTML tables with XSLT
http://www.cogsci.ed.ac.uk/~dmck/xslt-tutorial.html

List of Books, articles and papers:
http://www.oasis-open.org/cover/xsl.html#articles

See in particular the free online stuff from the "XSLT Programmer's Reference,"
By Michael Kay.  Lots of free code and examples you can download.  I've also
found the Cocoon XSL examples from xml.apache.org to be helpful.

Scott Stirling
West Newton, MA


-Original Message-
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED]]On Behalf Of Duffey, Kevin
Sent: Wednesday, October 11, 2000 3:57 PM
To: Orion-Interest
Subject: RE: XSLT processors


I would be interested in knowing how to even use an XSLT engine! I know I can
get JSP to output XML with a header, but how do I actually pass the XML to the
XSLT engine, and how do I specify I want HTML or WML output? Is it a servlet,
and you just call upon it somehow from a JSP page or when a request is made,
inside you grab the page using a URL connection to get XML output from the JSP
page, then pass it on to an XSLT engine somehow? I guess I should buy a book on
this topic..but I was hoping it would be easy enough to figure out.

Thanks.