Hi Martin, I realized that some of the directories were created with the ec2-user in some of my previous tries before running daemon.sh. I am deleting all these dirs/files and see if daemon.sh works now.
Cheers, Fred On Sat, Aug 25, 2012 at 9:20 AM, Fred Janon <fja...@gmail.com> wrote: > Thanks for the suggestions Martin, I'll give them a try in a couple of > hours, I've got to do something now. > > I tried the same daemon script at boot time from init.d and I get the same > issue, it runs under root. Does that mean that my setting for the tomcat > user for jsvc is not working? I assumed that jsvc would take that identity > to do everything, including creating the dirs and files. > > Thanks > > Fred > > On Sat, Aug 25, 2012 at 3:40 AM, Martin Gainty <mgai...@hotmail.com>wrote: > >> save yourself a ton of permission-errors grief >> >> login tomcat >> mkdir /datadisk1/tomcat/conf/Catalina/localhost >> BTW when you do a >> ls -al /datadisk1/tomcat/conf/Catalina/localhost >> you should have god rights rwd pretty much everything >> >> sudo is tricky because you'll need to add tomcat user to run the tomcat >> daemon(sh) to >> >> /etc/sudoers >> >> but then you'll only have permission to run daemon(.sh) >> access to temp, work and log folders have not been granted >> >> >> cd $CATALINA_BASE >> chown tomcat work >> chown tomcat logs >> chown tomcat temp >> >> Your clock is 6 hours ahead of me so you will receive this email very >> early am..i assume you're in CET >> I'll check back SAT roughly 8am CST >> Martin Gainty >> ______________________________________________ >> Verzicht und Vertraulichkeitanmerkung/Note de déni et de confidentialité >> >> Diese Nachricht ist vertraulich. Sollten Sie nicht der vorgesehene >> Empfaenger sein, so bitten wir hoeflich um eine Mitteilung. Jede unbefugte >> Weiterleitung oder Fertigung einer Kopie ist unzulaessig. Diese Nachricht >> dient lediglich dem Austausch von Informationen und entfaltet keine >> rechtliche Bindungswirkung. Aufgrund der leichten Manipulierbarkeit von >> E-Mails koennen wir keine Haftung fuer den Inhalt uebernehmen. >> >> Ce message est confidentiel et peut être privilégié. Si vous n'êtes pas le >> destinataire prévu, nous te demandons avec bonté que pour satisfaire >> informez l'expéditeur. N'importe quelle diffusion non autorisée ou la copie >> de ceci est interdite. Ce message sert à l'information seulement et n'aura >> pas n'importe quel effet légalement obligatoire. Étant donné que les email >> peuvent facilement être sujets à la manipulation, nous ne pouvons accepter >> aucune responsabilité pour le contenu fourni. >> >> >> >> >> > From: fja...@gmail.com >> > Date: Sat, 25 Aug 2012 00:22:50 +0200 >> > Subject: Re: Issue building the Unix daemon (jsvc) with the "configure" >> script in Tomcat7 >> > To: users@tomcat.apache.org >> >> > >> > Hi Jeff, >> > >> > I tried both: >> > >> > [ec2-user@ip-10-34-89-185 bin]$ ./daemon.sh start >> > Cannot set group id for user 'tomcat' >> > Error validating user 'tomcat' >> > >> > With sudo, I get the permissions issue. ec2-user is a sudoer. >> > >> > sudo ./daemon.sh start >> > >> > *SEVERE: Unable to create directory for deployment: >> > /datadisk1/tomcat/conf/Catalina/localhost* >> > Aug 24, 2012 1:29:12 PM org.apache.catalina.startup.HostConfig >> > deployDirectory >> > INFO: Deploying web application directory >> /datadisk1/tomcat/webapps/examples >> > Aug 24, 2012 1:29:12 PM org.apache.catalina.core.StandardContext >> > postWorkDirectory >> > *WARNING: Failed to create work directory >> > [/datadisk1/tomcat/work/Catalina/localhost/examples] for context >> [/examples] >> > * >> > Aug 24, 2012 1:29:13 PM org.apache.jasper.EmbeddedServletOptions <init> >> > *SEVERE: The scratchDir you specified: >> > /datadisk1/tomcat/work/Catalina/localhost/examples is unusable.* >> > >> > I am trying to see the whole command passed to jsvc but I am not fluent >> in >> > shell scripts and I can't get to echo it yet. >> > >> > Fred >> > >> > On Fri, Aug 24, 2012 at 10:45 PM, Jeff MAURY <jeffma...@jeffmaury.com >> >wrote: >> > >> > > It probably means your current user (ec2-user) has not the rights to >> run as >> > > tomcat user. >> > > Try the same command with sudo in front, if ec2-user is part of the >> sudoers >> > > >> > > Jeff >> > > >> > > >> > > On Fri, Aug 24, 2012 at 4:09 PM, Fred Janon <fja...@gmail.com> wrote: >> > > >> > > > Ah! Thanks Jeff, you are right, thanks. I checked and the OpenJDK >> > > installed >> > > > is not the full JDK (??? confusing). I had to install the >> OpenJDK-dev to >> > > > get the full JDK. >> > > > >> > > > I managed to build the jsvc (yeah!), now I am getting an error after >> > > > starting tomcat using daemon.sh, it seems that it runs a root, not >> tomcat >> > > > as I configured setenv.sh. tomcat cannot create some dirs, reported >> in >> > > > catalina-daemon.out. >> > > > >> > > > If I launch tomcat without being root, I get this error: >> > > > >> > > > [ec2-user@ip-10-34-89-185 bin]$ ./daemon.sh start >> > > > Cannot set group id for user 'tomcat' >> > > > Error validating user 'tomcat' >> > > > >> > > > Not sure what this means, I have a tomcat user in the tomcat group. >> > > > >> > > > If I launch tomcat using that command: >> > > > >> > > > sudo ./daemon.sh start >> > > > >> > > > with setenv.sh: >> > > > >> > > > export CATALINA_HOME=/datadisk1/tomcat >> > > > export CATALINA_OPTS="-server -Xms128M -Xmx512M" >> > > > export JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre >> > > > export TOMCAT_USER=tomcat >> > > > >> > > > then catalina-daemon.out shows: >> > > > >> > > > Aug 24, 2012 1:29:11 PM >> org.apache.catalina.core.AprLifecycleListener >> > > init >> > > > SEVERE: An incompatible version 1.1.22 of the APR based Apache >> Tomcat >> > > > Native library is installed, while Tomcat requires version 1.1.24 >> > > > Aug 24, 2012 1:29:11 PM >> org.apache.catalina.core.AprLifecycleListener >> > > init >> > > > SEVERE: An incompatible version 1.1.22 of the APR based Apache >> Tomcat >> > > > Native library is installed, while Tomcat requires version 1.1.24 >> > > > Aug 24, 2012 1:29:11 PM >> org.apache.catalina.core.AprLifecycleListener >> > > init >> > > > SEVERE: An incompatible version 1.1.22 of the APR based Apache >> Tomcat >> > > > Native library is installed, while Tomcat requires version 1.1.24 >> > > > Aug 24, 2012 1:29:11 PM >> org.apache.catalina.core.AprLifecycleListener >> > > init >> > > > SEVERE: An incompatible version 1.1.22 of the APR based Apache >> Tomcat >> > > > Native library is installed, while Tomcat requires version 1.1.24 >> > > > Aug 24, 2012 1:29:11 PM >> org.apache.catalina.core.AprLifecycleListener >> > > init >> > > > SEVERE: An incompatible version 1.1.22 of the APR based Apache >> Tomcat >> > > > Native library is installed, while Tomcat requires version 1.1.24 >> > > > Aug 24, 2012 1:29:11 PM org.apache.coyote.AbstractProtocol init >> > > > INFO: Initializing ProtocolHandler ["http-bio-8080"] >> > > > Aug 24, 2012 1:29:11 PM org.apache.coyote.AbstractProtocol init >> > > > INFO: Initializing ProtocolHandler ["ajp-bio-8009"] >> > > > Aug 24, 2012 1:29:11 PM org.apache.catalina.startup.Catalina load >> > > > INFO: Initialization processed in 1316 ms >> > > > Aug 24, 2012 1:29:12 PM org.apache.catalina.core.StandardService >> > > > startInternal >> > > > INFO: Starting service Catalina >> > > > Aug 24, 2012 1:29:12 PM org.apache.catalina.core.StandardEngine >> > > > startInternal >> > > > INFO: Starting Servlet Engine: Apache Tomcat/7.0.29 >> > > > Aug 24, 2012 1:29:12 PM org.apache.catalina.startup.HostConfig start >> > > > *SEVERE: Unable to create directory for deployment: >> > > > /datadisk1/tomcat/conf/Catalina/localhost* >> > > > Aug 24, 2012 1:29:12 PM org.apache.catalina.startup.HostConfig >> > > > deployDirectory >> > > > INFO: Deploying web application directory >> > > > /datadisk1/tomcat/webapps/examples >> > > > Aug 24, 2012 1:29:12 PM org.apache.catalina.core.StandardContext >> > > > postWorkDirectory >> > > > *WARNING: Failed to create work directory >> > > > [/datadisk1/tomcat/work/Catalina/localhost/examples] for context >> > > > [/examples] >> > > > * >> > > > Aug 24, 2012 1:29:13 PM org.apache.jasper.EmbeddedServletOptions >> <init> >> > > > *SEVERE: The scratchDir you specified: >> > > > /datadisk1/tomcat/work/Catalina/localhost/examples is unusable.* >> > > > Aug 24, 2012 1:29:13 PM org.apache.catalina.startup.HostConfig >> > > > deployDirectory >> > > > INFO: Deploying web application directory >> /datadisk1/tomcat/webapps/ROOT >> > > > Aug 24, 2012 1:29:13 PM org.apache.catalina.core.StandardContext >> > > > postWorkDirectory >> > > > WARNING: Failed to create work directory >> > > > [/datadisk1/tomcat/work/Catalina/localhost/_] for context [] >> > > > Aug 24, 2012 1:29:13 PM org.apache.jasper.EmbeddedServletOptions >> <init> >> > > > SEVERE: The scratchDir you specified: >> > > > /datadisk1/tomcat/work/Catalina/localhost/_ is unusable. >> > > > Aug 24, 2012 1:29:13 PM org.apache.catalina.startup.HostConfig >> > > > deployDirectory >> > > > INFO: Deploying web application directory >> /datadisk1/tomcat/webapps/docs >> > > > Aug 24, 2012 1:29:13 PM org.apache.catalina.core.StandardContext >> > > > postWorkDirectory >> > > > WARNING: Failed to create work directory >> > > > [/datadisk1/tomcat/work/Catalina/localhost/docs] for context [/docs] >> > > > Aug 24, 2012 1:29:13 PM org.apache.jasper.EmbeddedServletOptions >> <init> >> > > > SEVERE: The scratchDir you specified: >> > > > /datadisk1/tomcat/work/Catalina/localhost/docs is unusable. >> > > > Aug 24, 2012 1:29:13 PM org.apache.catalina.startup.HostConfig >> > > > deployDirectory >> > > > INFO: Deploying web application directory >> > > /datadisk1/tomcat/webapps/manager >> > > > Aug 24, 2012 1:29:13 PM org.apache.catalina.core.StandardContext >> > > > postWorkDirectory >> > > > WARNING: Failed to create work directory >> > > > [/datadisk1/tomcat/work/Catalina/localhost/manager] for context >> > > [/manager] >> > > > Aug 24, 2012 1:29:13 PM org.apache.jasper.EmbeddedServletOptions >> <init> >> > > > SEVERE: The scratchDir you specified: >> > > > /datadisk1/tomcat/work/Catalina/localhost/manager is unusable. >> > > > Aug 24, 2012 1:29:13 PM org.apache.catalina.startup.HostConfig >> > > > deployDirectory >> > > > INFO: Deploying web application directory >> > > > /datadisk1/tomcat/webapps/host-manager >> > > > Aug 24, 2012 1:29:13 PM org.apache.catalina.core.StandardContext >> > > > postWorkDirectory >> > > > WARNING: Failed to create work directory >> > > > [/datadisk1/tomcat/work/Catalina/localhost/host-manager] for context >> > > > [/host-manager] >> > > > Aug 24, 2012 1:29:13 PM org.apache.jasper.EmbeddedServletOptions >> <init> >> > > > SEVERE: The scratchDir you specified: >> > > > /datadisk1/tomcat/work/Catalina/localhost/host-manager is unusable. >> > > > Aug 24, 2012 1:29:13 PM org.apache.coyote.AbstractProtocol start >> > > > INFO: Starting ProtocolHandler ["http-bio-8080"] >> > > > Aug 24, 2012 1:29:13 PM org.apache.coyote.AbstractProtocol start >> > > > INFO: Starting ProtocolHandler ["ajp-bio-8009"] >> > > > Aug 24, 2012 1:29:13 PM org.apache.catalina.startup.Catalina start >> > > > INFO: Server startup in 1613 ms >> > > > >> > > > I am not sure my "export TOMCAT_USER=tomcat" is right, or if I am >> missing >> > > > something. >> > > > >> > > > Regards, >> > > > >> > > > Fred >> > > > >> > > > On Fri, Aug 24, 2012 at 12:01 PM, Jeff MAURY < >> jeffma...@jeffmaury.com >> > > > >wrote: >> > > > >> > > > > Fred, >> > > > > >> > > > > you are getting confused by the term OpenJDK. It comes in two >> flavor, >> > > JRE >> > > > > and JDK. I have some .h files on my Ubuntu server, but not under >> > > > > /usr/lib/jvm/java-1.6.0-openjdk but under >> /usr/lib/jvm/java-6-openjdk >> > > > > >> > > > > Regards >> > > > > Jeff >> > > > > >> > > > > >> > > > > On Fri, Aug 24, 2012 at 8:52 AM, Fred Janon <fja...@gmail.com> >> wrote: >> > > > > >> > > > > > Hi Jeff, >> > > > > > >> > > > > > Thanks, but I read the instructions and requirements for a C >> compiler >> > > > an >> > > > > > the JDK. As shown in my original message there is a JDK >> > > > > > >> > > > > > > /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/* >> > > > > > >> > > > > > but no "jni_md.h" in the Open JDK. As I said the "jni_md.h" >> seems to >> > > be >> > > > > in >> > > > > > the Windows JDK, but not in the Linux one. >> > > > > > >> > > > > > Cheers, >> > > > > > >> > > > > > Fred >> > > > > > >> > > > > > On Fri, Aug 24, 2012 at 7:51 AM, Jeff MAURY < >> jeffma...@jeffmaury.com >> > > > >> > > > > > wrote: >> > > > > > >> > > > > > > You need a JDK to be installed on your machine and it seems >> you've >> > > > > only a >> > > > > > > JRE >> > > > > > > >> > > > > > > Jeff >> > > > > > > >> > > > > > > >> > > > > > > On Thu, Aug 23, 2012 at 10:12 PM, Fred Janon < >> fja...@gmail.com> >> > > > wrote: >> > > > > > > >> > > > > > > > Hi, >> > > > > > > > >> > > > > > > > I am trying to build the Unix deamon jsvc in AWS EC2 Linux. >> I did >> > > > not >> > > > > > > > install Tomcat7 that comes with the AWS Linux, I downloaded >> > > Tomcat7 >> > > > > > from >> > > > > > > > the Apache Tomcat website, I installed it and ran Tomcat7 >> > > > > successfully. >> > > > > > > Now >> > > > > > > > I am trying to build the daemon to run Tomcat7 as a daemon. >> I get >> > > > an >> > > > > > > error >> > > > > > > > running the "configure" script as indicated in the Tomcat >> > > > > > documentation. >> > > > > > > I >> > > > > > > > did a lot of searching on the web and cannot find a >> solution to >> > > > this >> > > > > > > issue. >> > > > > > > > I am not fluent in shell scripting, so my understanding of >> > > > > "configure" >> > > > > > is >> > > > > > > > very limited. >> > > > > > > > >> > > > > > > > Do I need to regenerate the "configure" script or do I need >> to >> > > > modify >> > > > > > the >> > > > > > > > script? >> > > > > > > > >> > > > > > > > The error is: >> > > > > > > > *checking for JDK os include directory... Cannot find >> jni_md.h in >> > > > > > > > /usr/lib/jvm/jre/* >> > > > > > > > *configure: error: You should retry --with-os-type=SUBDIR* >> > > > > > > > * >> > > > > > > > * >> > > > > > > > It looks like *"jni_md.h"* is part of the Windows JDK, *but >> it's >> > > > not >> > > > > in >> > > > > > > the >> > > > > > > > Linux OpenJDK on CentOS.* >> > > > > > > > >> > > > > > > > I don't really understand why the message says >> "*with-os-type*" >> > > > where >> > > > > > it >> > > > > > > > seems to mean JDK? >> > > > > > > > >> > > > > > > > As indicated in the INSTALL.txt below, I am reporting the >> issue, >> > > > > hoping >> > > > > > > > that someone can give me a solution or a patch for the >> script... >> > > > > > > > >> > > > > > > > "Depending on your JDK layout, configure might fail to find >> the >> > > JNI >> > > > > > > > machine dependant include file (jni_md.h). If that's the >> case use >> > > > the >> > > > > > > > --with-os-type=<subdir> parameter where subdir points to the >> > > > > directory >> > > > > > > > within JDK include directory containing jni_md.h file. >> > > > > > > > If your operating system is supported, configure will go >> thru >> > > > > cleanly, >> > > > > > > > otherwise it will report an error (please send us the >> details of >> > > > your >> > > > > > > > OS/JDK, or a patch against the sources)." >> > > > > > > > >> > > > > > > > Below is the console output running configure and some >> > > information >> > > > > > about >> > > > > > > > the jdk installed. >> > > > > > > > >> > > > > > > > [ec2-user@ip-10-244-162-78 unix]$ *./configure* >> > > > > > > > *** Current host *** >> > > > > > > > checking build system type... i686-pc-linux-gnu >> > > > > > > > checking host system type... i686-pc-linux-gnu >> > > > > > > > checking cached host system type... ok >> > > > > > > > *** C-Language compilation tools *** >> > > > > > > > checking for gcc... gcc >> > > > > > > > checking for C compiler default output file name... a.out >> > > > > > > > checking whether the C compiler works... yes >> > > > > > > > checking whether we are cross compiling... no >> > > > > > > > checking for suffix of executables... >> > > > > > > > checking for suffix of object files... o >> > > > > > > > checking whether we are using the GNU C compiler... yes >> > > > > > > > checking whether gcc accepts -g... yes >> > > > > > > > checking for gcc option to accept ANSI C... none needed >> > > > > > > > checking for ranlib... ranlib >> > > > > > > > checking for strip... strip >> > > > > > > > *** Host support *** >> > > > > > > > checking C flags dependant on host system type... ok >> > > > > > > > *** Java compilation tools *** >> > > > > > > > *checking for JDK os include directory... Cannot find >> jni_md.h in >> > > > > > > > /usr/lib/jvm/jre/* >> > > > > > > > *configure: error: You should retry --with-os-type=SUBDIR* >> > > > > > > > >> > > > > > > > [ec2-user@ip-10-244-162-78 unix]$ find / -name 'jni_md.h' >> > > > > 2>/dev/null >> > > > > > > > >> > > > > > > > [ec2-user@ip-10-244-162-78 unix]$ find / -name '*jni*' >> > > 2>/dev/null >> > > > > > > > /usr/share/java-jni >> > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> > > > >> > > >> /datadisk1/tomcat/bin/commons-daemon-1.0.10-native-src/windows/src/javajni.c >> > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > >> > > > >> > > >> /datadisk1/tomcat/bin/commons-daemon-1.0.10-native-src/windows/include/javajni.h >> > > > > > > > >> > > > > > > > Installed Packages >> > > > > > > > java-1.6.0-openjdk.i686 >> > > installed >> > > > > > > > >> > > > > > > > ---------------------------------------- >> > > > > > > > [ec2-user@ip-10-244-162-78 unix]$ *./configure >> > > > > > > > -with-java=/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre* >> > > > > > > > *** Current host *** >> > > > > > > > checking build system type... i686-pc-linux-gnu >> > > > > > > > checking host system type... i686-pc-linux-gnu >> > > > > > > > checking cached host system type... ok >> > > > > > > > *** C-Language compilation tools *** >> > > > > > > > checking for gcc... gcc >> > > > > > > > checking for C compiler default output file name... a.out >> > > > > > > > checking whether the C compiler works... yes >> > > > > > > > checking whether we are cross compiling... no >> > > > > > > > checking for suffix of executables... >> > > > > > > > checking for suffix of object files... o >> > > > > > > > checking whether we are using the GNU C compiler... yes >> > > > > > > > checking whether gcc accepts -g... yes >> > > > > > > > checking for gcc option to accept ANSI C... none needed >> > > > > > > > checking for ranlib... ranlib >> > > > > > > > checking for strip... strip >> > > > > > > > *** Host support *** >> > > > > > > > checking C flags dependant on host system type... ok >> > > > > > > > *** Java compilation tools *** >> > > > > > > > checking JAVA_HOME... >> /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre >> > > > > > > > *checking for JDK os include directory... Cannot find >> jni_md.h in >> > > > > > > > /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/* >> > > > > > > > *configure: error: You should retry --with-os-type=SUBDIR* >> > > > > > > > >> > > > > > > > ----------------------------------------- >> > > > > > > > configure script excerpt: >> > > > > > > > >> > > > > > > > echo "$as_me:$LINENO: checking for JDK os include directory" >> > > > >&5 >> > > > > > > > echo $ECHO_N "checking for JDK os include directory... >> $ECHO_C" >> > > >&6 >> > > > > > > > JAVA_OS=NONE >> > > > > > > > if test -f $JAVA_HOME/$JAVA_INC/jni_md.h >> > > > > > > > then >> > > > > > > > JAVA_OS="" >> > > > > > > > else >> > > > > > > > for f in $JAVA_HOME/$JAVA_INC/*/jni_md.h >> > > > > > > > do >> > > > > > > > if test -f $f; then >> > > > > > > > JAVA_OS=`dirname $f` >> > > > > > > > JAVA_OS=`basename $JAVA_OS` >> > > > > > > > echo " $JAVA_OS" >> > > > > > > > break >> > > > > > > > fi >> > > > > > > > done >> > > > > > > > if test "x$JAVA_OS" = "xNONE"; then >> > > > > > > > echo "$as_me:$LINENO: result: Cannot find jni_md.h in >> > > > > > > > ${JAVA_HOME}/${OS}" >&5 >> > > > > > > > echo "${ECHO_T}Cannot find jni_md.h in ${JAVA_HOME}/${OS}" >> >&6 >> > > > > > > > { { echo "$as_me:$LINENO: error: You should retry >> > > > > > > > --with-os-type=SUBDIR" >&5 >> > > > > > > > echo "$as_me: error: You should retry --with-os-type=SUBDIR" >> > > >&2;} >> > > > > > > > { (exit 1); exit 1; }; } >> > > > > > > > fi >> > > > > > > > fi >> > > > > > > > >> > > > > > > > ----------------------------------------- >> > > > > > > > >> > > > > > > > Thanks >> > > > > > > > >> > > > > > > > Fred >> > > > > > > > >> > > > > > > >> > > > > > > >> > > > > > > >> > > > > > > -- >> > > > > > > Jeff MAURY >> > > > > > > >> > > > > > > >> > > > > > > "Legacy code" often differs from its suggested alternative by >> > > > actually >> > > > > > > working and scaling. >> > > > > > > - Bjarne Stroustrup >> > > > > > > >> > > > > > > http://www.jeffmaury.com >> > > > > > > http://riadiscuss.jeffmaury.com >> > > > > > > http://www.twitter.com/jeffmaury >> > > > > > > >> > > > > > >> > > > > >> > > > > >> > > > > >> > > > > -- >> > > > > Jeff MAURY >> > > > > >> > > > > >> > > > > "Legacy code" often differs from its suggested alternative by >> actually >> > > > > working and scaling. >> > > > > - Bjarne Stroustrup >> > > > > >> > > > > http://www.jeffmaury.com >> > > > > http://riadiscuss.jeffmaury.com >> > > > > http://www.twitter.com/jeffmaury >> > > > > >> > > > >> > > >> > > >> > > >> > > -- >> > > Jeff MAURY >> > > >> > > >> > > "Legacy code" often differs from its suggested alternative by actually >> > > working and scaling. >> > > - Bjarne Stroustrup >> > > >> > > http://www.jeffmaury.com >> > > http://riadiscuss.jeffmaury.com >> > > http://www.twitter.com/jeffmaury >> > > >> > >