-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 Louis,
On 8/14/18 3:28 PM, Louis Zipes wrote: > Hi all, Just wanted to circle back. There was an early comment > (maybe even in the first response to my question/problem) where > someone mentioned that my set up (Running Tomcat as a Windows > Service and putting the JMX parameters directly in the > Tomcat7.0.54 GUI in the Java tab) SHOULD work and should startup > and shutdown gracefully BUT that if it doesn't then try one of the > of the later versions of Tomcat. > > I did finally get a chance to try Tomcat 8.0.5X and it does seem to > work with no other configuration changes. I can access JMX > (JConsole) and start and shut down the Windows Service running > Tomcat with no issues. Although, now my problem is that my third > party application, that is running doesn't work, but that is not > a problem for this mailing list. > > So I think we can say that in the end the upgrade to a higher > version resolved the issue. Thank you to all that contributed > input! It's very possible that, if you used the service-installer, it simply created a new service that uses the "jvm" launch-strategy. I'd be interested to see if that's the case. Before you spend a lot of time tracking-down the application incompatabilities with 8.0.x, you might want to upgrade to 9.0.x or 8.5.x and start there. Tomcat 8.0.x has reached EOL so it's probably a waste of your time to test against it. Hope that helps, - -chris > -----Original Message----- From: André Warnier (tomcat) > [mailto:a...@ice-sa.com] Sent: Thursday, August 09, 2018 12:40 PM To: > users@tomcat.apache.org Subject: Re: Question about setting > CATALINA_OPTS when starting Tomcat using a Windows Service in > Tomcat 7.0.54 > > - - - external message, proceed with caution - - - > > > Maybe it is time here to quote Arthur Clarke's 3rd law : "Any > sufficiently advanced technology is indistinguishable from magic" > (See : https://en.wikipedia.org/wiki/Clarke%27s_three_laws) > > The process by which Tomcat is started and/or stopped - > particularly under Windows and as a Service - is not very clear in > the on-line documentation. Neither is it it very easy to write a > comprehensive and accurate documentation, because the thing has > gotten to a point where, for mere mortals, it is really quite > complicated. (Have a look at bin/catalina.bat to get an idea). > > So let me give you some overall pointers (some of them quite basic, > I apologise), and maybe in there somewhere, you'll find wat you are > missing to complete the picture and do what you want to do. > > 1) Tomcat is a compiled java application, in java bytecode. To run > this bytecode, you need a JVM. The JVM is machine-executable code, > so to run tomcat, you run a JVM and tell it to run the tomcat > bytecode. 2) the java JVM for Windows is not very good at running > as a Windows Service (it does not handle the appropriate Windows > "signals" etc.). To solve this, when you want to run tomcat as a > Windows Service (or rather - see above - run the JVM as a Windows > Service), you actually run a specialised "wrapper program" which > does work well as a Windows Service, and you ask this wrapper to > start the JVM which runs tomcat. To make matters a bit more > confusing (or maybe, for some, clearer), this generic "Windows > Service JVM wrapper" is renamed to "tomcatV.exe" (where V is the > tomcat version, so for tomcat 9, the program is called > tomcat9.exe). 3) the wrapper program, when it starts the JVM, has > to know which command-line switches it should pass to it. For the > Windows Service flavor of tomcat, these parameters are stored in a > number of special keys in the Windows Registry, and that is where > the wrapper picks them up, before starting the JVM. 4) To make it > easier to set and edit these JVM command-line parameters, tomcat > provides another Windows executable program - a specialised GUI > Registry Editor - which is also renamed according to the tomcat > version, as tomcatVw.exe (where V is the tomcat version, so for > tomcat 9 it would be tomcat9w.exe). > > 5) as a separate bit of knowledge, I would suppose that everyone > knows that on any given host, a given TCP listening port can only > be opened by one process at a time. If a second process tries to > open a port which is already opened by a first process, it will get > an error of the kind "port already in use", and most probably the > second process will then exit (non-gracefully). > > 6) in the tomcat conf/server.xml file, there is a tag : <Server > port="8005" shutdown="SHUTDOWN"> This provides a clue as to how one > actually *stops* tomcat : one opens a TCP connection to locahost > port 8005 (on which tomcat listens), then sends the string > "SHUTDOWN" on that connection. This causes tomcat to shutdown > gracefully, at the end of which it does a "system.exit()" which > shuts down the JVM that runs it. And this in turn causes the JVM > wrapper program to tell Windows that the tomcat Service is shutting > down, before itself exiting. And thus is all well and tidy in the > Windows Service world. > > 7) a helpful feature of tomcat, is that it itself provides code to > connect to localhost port 8005 and send that shutdown string, so > that one does not have to write its own separate program to do > that. The bit that is a bit confusing about this feature however, > is that in order to use that code, one of course needs to start up > another separate instance of tomcat, just to run that code and > actually stop the "real" running tomcat. And of course running a > separate instance of tomcat actually means running a separate > instance of the JVM which runs tomcat. > > Now armed with all the above knowledge, and with the dialog window > offered by the tomcat9w.exe program, it is relatively easy to > figure out what happens (or at least what may happen in your case, > in my modest non-java-expert opinion). > > Looking only at the last 3 tabs of that window (Java / Startup / > Shutdown), one can figure out that : - the "java" tab contains the > path of the JVM to be started, and the command-line parameters that > will be passed to that JVM - the "Startup" tab contains the java > class that the JVM should invoke at the start of tomcat, and the > argument ("start") to pass into that initial call. - the "Shutdown" > tab contains the java class that the JVM should invoke to stop an > already-running tomcat, and the argument ("stop") to pass into that > initial call. (Thus triggering the code in (7) above). > > And I believe that, in the particular case of Tomcat being run as a > Windows Service, here may be the origin of the problem which you > are encountering : the "Java" tab lists command-line options that > are *common* to both the JVM which starts tomcat, and to the > (separate) JVM which stops tomcat. There is only one set of JVM > options, for both cases. Which means that if, in these JVM > command-line options, you pass it one that tells the JVM to open > some extra listening port (which you do to enable JMX), then this > will happen both when a JVM is started because tomcat is being > started, and when a JVM is started because tomcat is being > stopped. And of course the second one will fail, because the first > one has already opened that port. > > (Note that this will happen no matter which level of indirection > you build into the Registry JVM parameters.) > > Why does that happen only with that JMX port, and not with the > other listening ports that tomcat opens ? Well, that is a question > of /when/ these different things happen : the JMX-port command-line > parameter "happens" earlier, because it is something that the JVM > does, before it evens starts running tomcat bytecode. While the > other ports that Tomcat opens, happen in the code of tomcat itself, > when it is being run. And that tomcat code is smart enough to know > that when it is being run with the argument "stop", then it should > not open these other ports mentioned in its configuration file. > > On the face of it, it seems a bit of an unsolvable issue, unless > the tomcat Service wrapper code is changed, to allow for 2 separate > sets of JVM parameters (one for start, with the JMX options; and > one for stop, without these options). Or unless something is done > in the Tomcat code itself, to allow JMX to be started (or not) from > within Tomcat (assuming that's even possible). > > Of course, one could also wonder if you really need JMX when you > run tomcat in production mode. If this is only for testing, you > could run tomcat in a console, where you would not have the same > issue (because you would not have the wrapper with its > single-minded preset JVM options). > > (Or you could switch to Linux ;-)) > > On 09.08.2018 02:06, Daniel Savard wrote: >> Le mer. 8 août 2018 à 12:08, Louis Zipes <louis.zi...@gmcr.com> a >> écrit : >> >>> >>> Hi Calder, I can successfully start up as a Windows service and >>> get JMX working BUT my problem is that Service doesn't stop >>> cleanly (just repeating that problem in case it wasn't made >>> clear). It says the PORT is already in use which led me to try >>> to use Catalina_Opts as per the suggestions on the internet. >>> >>> Port already in use: 8008; nested exception is: >>> java.net.BindException: Address already in use: JVM_Bind >>> >>> If you were able to get JMX working and you can start AND stop >>> the Tomcat service cleanly, do you mind sharing me your >>> 'scrubbed' Java tab contents as I can seem to get the right >>> combination to get it to Start and Stop the service. >>> >>> Thanks, Louis >>> >>> >>> >> Louis, >> >> I believe you need to understand a bit more how things are >> working with Java and the JVM. The -D options are pretty straight >> forward for anyone knowing how you define properties to the JVM >> on the command line. I already told you everything you need to >> know to setup properly your Tomcat. Since you were the one >> talking about CATALINA_OPTS I assumed you did know where and how >> to setup the variable for your installation. Otherwise, just go >> in the setup utility for Tomcat on Windows and put the >> -Dcom.sun.management.conf.file=${catalina.base}/conf/abc.def >> entry there without the CATALINA_OPTS= stanza since this one's >> intent is to set an environment variable for the process to pick >> while the former is passing directly the property to the JVM from >> the Tomcat Windows Setup dialog. There is many ways to do things. >> Bottom line, you need to tell the JVM where is the configuration >> file for JMX and put your properties in there as any other >> properties file. This is standard stuff. >> >> The effect is the JVM now knows your port is a JMX port and it >> will stop to try to use it when it is already in use and free it >> cleanly. >> >> Regards, >> >> ----------------- Daniel Savard >> >> >>> >>> >> > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > For additional commands, e-mail: users-h...@tomcat.apache.org > > --------------------------------------- CONFIDENTIALITY NOTICE: > This message is for intended addressee(s) only and may contain > information that is confidential, proprietary or exempt from > disclosure. If you are not the intended recipient, please contact > the sender immediately. Unauthorized use or distribution is > prohibited and may be unlawful. > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > For additional commands, e-mail: users-h...@tomcat.apache.org > -----BEGIN PGP SIGNATURE----- Comment: GPGTools - http://gpgtools.org Comment: Using GnuPG with Thunderbird - https://www.enigmail.net/ iQIzBAEBCAAdFiEEMmKgYcQvxMe7tcJcHPApP6U8pFgFAltzWnoACgkQHPApP6U8 pFhSfQ//YHoZq7PkViXcPAtBEw0AbNqxwwoj8266rcp9/QcnfuIkhrrC7H5GbGTy KHlu7WBNquasUmlUbx9krroZ6uoalGOmXh8d+s+PuC1SoPT/wJySsTJQtjTHBx5h 1g5G4U0bSb5+/EtZheltmYlpmwXJeUApJiLHYGfwM+yxT+ZVCa4FSOXWI7n1kniO 9UCRqFDH2xD4Lq5kp/XInKM1dICsB9z3FB5lKN06eBy+xDZ8MDMq0UpuSuzpbD8e tRJV70zaSfxF9kdrRzG0l8tE0CN47T7LbV8ucdK49/iSZZMtSkEkCcPx9rXwDEBr vutLL7J+0ftf42TfVAWtbi3coGJaEokWaSi3/6ubomUsecGA2niaHkJhnVcyB2Cc M/7fxs8h7Fy2d3g/PJhvth/R/jufK7stcRYNP/g9dNozplIdAOjRYr22zNk+Ui50 JnOZpJvJePCJvXHJ2/rECiIHs/JWOW3QHMtxcGV0GJfeTY0WSZSgIN5+2x4Q0L4S 83raN693Ey5MOPYrIjiRLV9JMqVGZPf8zzWUCF6wUlKvuq+mr67RechPqUy4cmhm LUqcCBmKyvyyU7gIooHWUuIJpQ57BZEyr5y4auNTVfB3e6UdKaBYlJVf8Gjg5rqe o14a1zWaEfB4G49mPtgDjEcKDQCwJQy+ja5cgubBkreYdJaCkMc= =NNo2 -----END PGP SIGNATURE----- --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org