Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Tomcat Wiki" for change 
notification.

The "Tomcat/Howto" page has been changed by KonstantinKolinko.
The comment on this change is: Removed all content of the page. The up-to-date 
version of all this is /HowTo..
http://wiki.apache.org/tomcat/Tomcat/Howto?action=diff&rev1=22&rev2=23

--------------------------------------------------

+ This page is obsolete. See [[HowTo|HowTo]] for the up-to-date version. 
- This seems like an old page... Should it be a DeleteMe page?
- 
- [For more details on running Tomcat on Mac OS X, see:  
http://wiki.apache.org/tomcat/TomcatOnMacOS?highlight=%28mac%29 ]
- 
- Here are some notes on getting Java and Tomcat to run on a Max with OSX 
(10.3.5 as at this writing).
- 
- These notes are the result of several weeks playing with different things and 
asking a LOT of questions on several mailing lists.
- 
- The following assumes you have Java already installed - it is installed by 
default on every Mac OSX or later - but I thought I'd issue a caveat.
- 
- I hope these notes are of use to someone out there.
  
  ----
+ CategoryObsolete
  
- THE SITUATION
- I wanted to learn about JSP on my Mac with OSX. I installed it first time on 
a WinXP Pro PC but my development machine is a Mac.
- 
- 
- THE SOLUTION
- NB - Because I had already installed and played with a separate install of 
Tomcat (the one installed by Apple's XCode was out of date as was the one I 
downloaded from another site), I was ready to give up!
- 
- In my case I wanted to get rid of all the other installations and start from 
scratch.
- 
- ----
- 
- #1
- Download Jakarta Tomcat - use the Binaries line - I d/loaded 
jakarta-tomcat-5.0.27.tar.gz
- 
- Extract the files (unless your browser automatically extracts them).
- 
- Navigate (using the Finder) to Macintosh HD > Library.
- 
- If there is not already a folder in Macintosh HD > Library called Tomcat then 
create one.
- 
- If there is already a Tomcat folder (my situation) but the Tomcat installed 
is out of date then delete all the files already in that folder.
- 
- #2
- Copy all the unstuffed files from the "jakarta-tomcat-5.0.27.tar.gz" download 
and put all the files into the Tomcat folder.
-  
- I just named it Tomcat as it saves some typing in the Terminal :)
- 
- So the directory structure becomes:
- 
- Macintosh HD > Library > Tomcat > <extracted files>
- 
- #3
- We then need to set the JAVA_HOME environment variable - this is almost the 
same as setting the WinXP Environment Variable.
- 
- Download the preference pane "RCEnvironment"
- (http://www.rubicode.com/Software/RCEnvironment/) 
- 
- Copy the Pref Pane to Macintosh HD > Library > Preference``Panes 
- 
- Go to System Preferences and click the Pane for "Environment Variables"
- 
- JAVA_HOME is defined as /Library/Java/Home.
- 
- In the left hand column enter "JAVA_HOME" and in the left hand column enter  
"/Library/Java/Home". Click Apply.
- 
- 
- #4
- Open the /Library/Tomcat/conf/tomcat-users.xml file with a plain text editor. 
As a default Mac``OSX installation Tomcat only has basic roles and users set up.
- 
- What is configured as default is:
- 
- <?xml version='1.0' encoding='utf-8'?>
- <tomcat-users>
-    <role rolename="tomcat"/>
-    <role rolename="role1"/>
-    <user username="tomcat" password="tomcat" roles="tomcat"/>
-    <user username="both" password="tomcat" roles="tomcat,role1"/>
-    <user username="role1" password="tomcat" roles="role1"/>
- </tomcat-users>
- 
- 
- An example of what it *SHOULD* look like follows:
- 
- <?xml version='1.0' encoding='utf-8'?>
- <tomcat-users>
-   <role rolename="tomcat"/>
-   <role rolename="role1"/>
-   <role rolename="manager"/>
-   <role rolename="admin"/>
-   <user username="tomcat" password="tomcat" roles="tomcat,admin,manager"/>
-   <user username="both" password="tomcat" roles="tomcat,role1"/>
-   <user username="role1" password="tomcat" roles="role1"/>
- </tomcat-users>
- 
- 
- In this case a role, a user and password have been set up with the name 
"tomcat". You can change this later.
- 
- 
- #5
- Reboot.
- 
- 
- #6
- To start Tomcat go to Terminal.
- 
- The path to Tomcat via the Finder is Macintosh HD > Library > Tomcat.
- 
- But to get to that directory using the Terminal, type in:
- 
- cd /Library/Tomcat/bin
- 
- Do an "ls" - you should see a file called "startup.sh"
- 
- Any shell (".sh") file can be executed in the terminal by putting period and 
a slash before the file name (eg: startup.sh) executes the shell script.
- 
- ./startup.sh
- 
- Terminal should display 4 lines looking like this:
- 
- Using CATALINA_BASE:   /library/tomcat
- Using CATALINA_HOME:   /library/tomcat
- Using CATALINA_TMPDIR: /library/tomcat/temp
- Using JAVA_HOME:       /Library/Java/Home
- Users-Computer:/library/tomcat/bin user$ 
- 
- Wait about 30 seconds.
- 
- (There are some notes and a couple of Preference Panes for automating the 
starting and stopping of Tomcat.
- After trying them all on 5 different computers - this is the simplest!)
- 
- 
- #7
- Open a browser window - enter "127.0.0.1:8080" - the default Tomcat page 
should open.
- 
- If you click the Tomcat Administrator or Tomcat Manager links in the upper 
left hand of the default Tomcat page you will be asked for a user name and 
password.
- 
- As mentioned above, use "tomcat" and "tomcat".
- 
- ----
- 
- Misc Notes (not finished):
- 
- The directory structure:
- 
- Tomcat > webapps > jsp-examples
- Tomcat > webapps > servlets-examples
- 
- The pages on the Tomcat default page are:
- 
- http://127.0.0.1:8080/jsp-examples/
- http://127.0.0.1:8080/servlets-examples/
- 
- Interesting that when connected to a LAN the 127.0.0.1 does not work - 
instead I have to use my IP#.
- 
- ----
- 
- By : Brynley Blake (31 August 2004)
- 
- With CONSIDERABLE help from Joachim, Tracy, Tom, Samuel and Jonel from the 
Apple Web and Java Developer mailing lists.
- 
- 
- ----
- 
- 
- '''How do I load a properties file?'''
- 
- Here are 2 most popular ways::
- 
- 1) Use a Resource``Bundle. See the java docs for the specifics of how the 
Resource``Bundle class works. Using this method, the properties file must go 
into the WEB-INF/classes directory or in a jar file contained in the 
WEB-INF/lib directory.
- 
- 2) Another way is to use the method get``Resource``As``Stream() from the 
Servlet``Context class. This allows you update the file without having to 
reload the webapp as required by the first method. Typical code snippet, 
without all the try catches: 
- 
- {{{    // Assuming you are in a Servlet extending HttpServlet 
-     // This will look for a file called "/more/cowbell.properties" relative 
-     // to your servlet Root Context 
-     InputStream is = 
getServletContext().getResourceAsStream("/more/cowbell.properties"); 
-     Properties  p  = new Properties(); 
-     p.load(is); 
-     is.close();  }}}
- 
- ----
- 
- '''How do I use log4j for all Tomcat log output?'''
- 
- To have Tomcat use log4j universally, place both '''log4j.jar''' and the 
Jakarta '''commons-logging.jar''' into the '''$TOMCAT_HOME/common/lib''' 
directory.  Create your log4j properties file as 
'''$TOMCAT_HOME/common/classes/log4j.properties''' and configure the root 
logger.  Here is the basic log4j.properties I used for this myself:
- {{{
- log4j.rootLogger=info, R
- log4j.appender.R=org.apache.log4j.ConsoleAppender
- log4j.appender.R.layout=org.apache.log4j.PatternLayout
- log4j.appender.R.layout.ConversionPattern=%-5p %-30.30c{1} %x - %m%n
- }}}
-   If you only need to use log4j in your own web app, just include log4j (and 
any log4j properties file) in your WAR.
- 
- (I could not find this in any FAQ or documentation as of Feb 11 04, but it 
has been discussed several times on the mailing list.)
- 
- ----
- 
- '''How do I configure the Connectors?'''
- 
- On the FAQ there are links to Other Resources which should have a relevant 
link to your
- config. If not, there are the JK docs. The JK docs for 3, 4, and 5 are all 
virtually the same. JK2 is not quite ready for production. (YMMV) Lucky  - 
there is a new committer which has been committing a lot of good jk2 patches so 
this statement may be outdated. (As of Dec 1, 2003 its not)
- 
- 
- ----
- 
- '''Tomcat Crashed What do I do?'''
- 
- These steps are in no particular order ...
- 
-  *  0. Read the FAQ
-  *  1. Read the RELEASE NOTES - there is something about Linux in it
-  *  2. First look at the stack traces. I hope a stack trace was produced 
before the failure aborted the JVM process. After you get a few stack traces, 
see if a pattern appears. Trace back to source code if needed.
-  *  3. Patch the OS. (Or in some cases - UN-patch the OS)
-  *  4. Patch the JVM. (Or in some cases - UN-patch the JVM)
-  *  5. Linux Problem? - Read the RELEASE-NOTES
-  *  6. Look at commercial vendor support for other servlet engines. Sometimes 
the problem is Universal regardless of servlet engine and maybe a 
jvm/os/application code issue
-  *  7. Google - Maybe someone had this problem. I bet they did.
-  *  8. Google groups (I love Google newsgroups)
-  *  9. If the JVM is from a commercial vendor, (eg: IBM, HP) check their 
release notes and news groups
-  *  10. Using a database? Make sure jdbc type4 drivers are used. Check their 
release notes and news groups.
-  *  11. Tweak JVM memory params. Setting memory too high can be as bad as 
having memory too low. (If your memory settings are set too high, 1.3 JVMs may 
freeze while waiting for the entire gc to finish. Also if the JVM has too much 
memory, if may be starving other resources on the machine which are needed 
which may be causing unforeseen exceptions. In a nutshell, throwing more memory 
doesn't always solve the problem. YMMV)
-  *  12. Turn off the JIT compiler. See the Java Docs on how to do this.
- 
- 
- TomcatWeb also has some short step-by-step Tomcat - Webserver interfacing 
documentation.
- {{{   }}}
- ----
- 
- ''' How do I share sessions across webapps?'''
- 
- You cannot share sessions directly across webapps, as that would
- be a violation of the Servlet Specification.  There are workarounds,
- including using a singleton class loaded from the common classloader
- repository to hold shared information, or putting some of this shared
- information in a database or another data store.  Some of these approaches
- have been discussed on the tomcat-user mailing list, whose archives
- you should search for more information.
- 
- Sharing sessions across contains for clustering or replication is
- a different matter altogether.
- 
- ----
- 
- ''' Why doesn't the netbeans example build for me? '''
- 
- I have found 2 issues with the build.xml provided here:
- http://jakarta.apache.org/struts/faqs/netbeans.html
- 
- First, add this to the top of your properties:
- <property environment="env" />
- 
- Next find this line in the "war" target:
- <classes dir="${build.dir}" includes="**/*.properties" />
- 
- Change it so it reads like this:
- <classes dir="${src.dir}" includes="**/*.properties" />
- 
- Now it will work!
- 
- ----
- 
- '''I'm encountering classloader problems when using JNI under Tomcat'''
- 
- The important thing to know about using JNI under Tomcat is that one cannot 
place the native libraries OR their JNI interfaces under the WEB-INF/lib or 
WEB-INF/classes directories of a web application and expect to be able to 
reload the webapp without restarting the server. The class that calls 
System.loadLibrary(String) must be loaded by a classloader that is not affected 
by reloading the web application itself.
- 
- Thus, if you have JNI code that follows the convention of including a static 
initializer like this:
- 
- {{{  class FooWrapper { 
-     static { 
-         System.loadLibrary("foo"); 
-     } 
- 
-     native void doFoo(); 
-   } }}}
- 
- then both this class and the shared library should be placed in the 
$CATALINA_HOME/shared/lib directory.  ''(Or $CATALINA_HOME/common/lib, as 
/shared/lib didn't work for me.)''
- 
- ''Note that under Windows, you'll also need to make sure that the library is 
in the {{{java.library.path}}}.  Either add {{{%CATALINA_HOME%\shared\lib}}} to 
your Windows PATH environment variable, or place the DLL files in another 
location that is currently on the {{{java.library.path}}}.  There may be a 
similar requirement for UNIX based system (I haven't checked), in which case 
you'd also have to add {{{$CATALINA_HOME/shared/lib}}} to the PATH environment 
variable.  (Note: I'm not the original author of this entry.)''
- 
- The symptom of this problem that I encountered looked something like this -
- {{{    java.lang.UnsatisfiedLinkError: Native Library WEB-INF/lib/libfoo.so 
already loaded in another classloader 
-         at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1525) }}}
- 
- 
- ----
- 
- '''How can I access members of a custom Realm or Principal?'''
- 
- When you create a custom subclass of `RealmBase` or `GenericPrincipal` and 
attempt to use those classes in your webapp code, you'll probably have problems 
with `ClassCastException`.  This is because the instance returned by 
`request.getUserPrincipal()` is of a class loaded by the server's classloader, 
and you are trying to access it through you webapp's classloader.  While the 
classes maybe otherwise exactly the same, different (sibling) classloaders 
makes them different classes.
- 
- This assumes you created a {{{My``Principal}}} class, and put in Tomcat's 
server/classes (or lib) directory, as well as in your webapp's webinf/classes 
(or lib) directory.  Normally, you would put custom realm and principal classes 
in the server directory because they depend on other classes there.
- 
- Here's what you would like to do, but it throws `ClassCastException`:
- {{{
- MyPrincipal p = request.getUserPrincipal();
- String emailAddress = p.getEmailAddress();
- }}}
- 
- Here are 4 ways you might get around the classloader boundary:
- 
- 1) ''Reflection''
- {{{
- Principal p = request.getUserPrincipal();
- String emailAddress = p.getClass().getMethod("getEmailAddress", 
null).invoke(p, null);
- }}}
- 
- 2) ''Move classes to a common classloader''
- 
- You could put your custom classes in a classloader that is common to both the 
server and your webapp - e.g., either the "common" or bootstrap classloaders.  
To do this, however, you would also need to move the classes that your custom 
classes depend on up to the common classloader, and that seems like a bad idea, 
because there a many of them and they a core server classes.
- 
- 3) ''Common Interfaces''
- 
- Rather than move the implementing custom classes up, you could define 
interfaces for your customs classes, and put the interfaces in the common 
directory.  You're code would look like this:
- 
- {{{
- public interface MyPrincipalInterface extends java.security.Principal {
-   public String getEmailAddress();
- }
- 
- public class MyPrincipal implements MyPrincipalInterface {
- ...
-   public String getEmailAddress() {
-     return emailAddress;
-   }
- }
- 
- public class MyServlet implements Servlet {
-   protected void doGet(HttpServletRequest request, HttpServletResponse 
response) throws ServletException, IOException {
-     MyPrincipalInterface p = (MyPrincipalInterface)request.getUserPrincipal();
-     String emailAddress = p.getEmailAddress();
- ...
- }
- }}}
- 
- ''Notice that this method gives you pretty much the webapp code you wanted in 
the first place''
- 
- 4) ''Serializing / Deserializing''
- 
- You might want to try serializing the response of 
'request.getUserPrincipal()' and deserialize it to an instance of 
[webapp]My``Principal.
- 
- 
- 
- ----
- 
- '''Setting up SSL - from the tomcat user list archives'''
- 
- with Verisign:
- 
- http://marc.theaimsgroup.com/?l=tomcat-user&m=106285452711698&w=2
- 
- and :
- 
- http://marc.theaimsgroup.com/?l=tomcat-user&m=107584265122914&w=2
- 
- with [[OpenSSL]]:
- 
- http://marc.theaimsgroup.com/?l=tomcat-user&m=106293430225790&w=2
- 
- or this:
- 
- http://marc.theaimsgroup.com/?l=tomcat-user&m=106453566416102&w=2
- 
- and this:
- 
- http://marc.theaimsgroup.com/?l=tomcat-user&m=106621232531781&w=2
- 
- 
- Plus, "what SSL is all about anyway":
- 
- http://marc.theaimsgroup.com/?l=tomcat-user&m=106692394104667&w=2
- 
- If you're looking for a certificate provider, check here: 
http://www.sslshopper.com/
- ----
- '''How do I install Tomcat as a service under Unix'''
- {{{
-  #!/bin/sh
-  # chkconfig: - 85 15
-  # description: Tomcat is a servlet container
-  PROGRAM=$CATALINA_HOME/bin/catalina.sh
-  if [ -f $PROGRAM ]; then
-         echo "$1ing" `basename $0`
-         su - tomcat -c "$PROGRAM $1"
-  fi
- }}}
- 
- ----
- '''How do I install Tomcat as a service under Windows?'''
- 
- ----
- '''How to UTF-8 your site?'''
- see [[Tomcat/UTF-8]]
- 
- ----
- 
- '''How do I add a question to this page?'''
- 
- Anyone may edit this page to add their own content. That is why this page is 
part of a Wiki and not a hardcoded static file in the FAQ. 
- 
- But do not add questions without answers to this page. If you have a question 
about how to do something in tomcat which has not been addressed yet, ask the 
tomcat-user list: [ http://jakarta.apache.org/tomcat/faq/tomcatuser.html ] Once 
you've figured out how to fix your problem, come back and update the Wiki to 
allow the rest of us to benefit from what you've learned!
- ----
- CategoryCategory
- 

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to