199 lines
6.3 KiB
Perl
Executable File
199 lines
6.3 KiB
Perl
Executable File
# CCM::Server::Tomcat
|
|
#
|
|
# Copyright (C) 2004 Red Hat Inc. All Rights Reserved.
|
|
#
|
|
# The contents of this file are subject to the CCM Public
|
|
# License (the "License"); you may not use this file except in
|
|
# compliance with the License. You may obtain a copy of
|
|
# the License at http://www.redhat.com/licenses/ccmpl.html
|
|
#
|
|
# Software distributed under the License is distributed on an "AS
|
|
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
# implied. See the License for the specific language governing
|
|
# rights and limitations under the License.
|
|
#
|
|
# Daniel Berrange <berrange@redhat.com>
|
|
# Dennis Gregorovic <dgregor@redhat.com>
|
|
#
|
|
# $Id: Tomcat.pm 1122 2006-04-26 21:17:49Z apevec $
|
|
|
|
=pod
|
|
|
|
=head1 NAME
|
|
|
|
CCM::Server::Tomcat
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
=head1 METHODS
|
|
|
|
=over 4
|
|
|
|
=cut
|
|
|
|
package CCM::Server::Tomcat;
|
|
|
|
use strict;
|
|
use vars qw(@ISA);
|
|
use CCM::Server;
|
|
use CCM::Util;
|
|
use File::Spec;
|
|
|
|
@ISA = qw(CCM::Server);
|
|
|
|
sub new {
|
|
my $proto = shift;
|
|
my $class = ref($proto) || $proto;
|
|
my $self = $class->SUPER::new(@_);
|
|
|
|
$self->{bootstrap_class} = 'com.arsdigita.tools.catalina.startup.Bootstrap';
|
|
$self->{verbose} = 0;
|
|
|
|
bless $self, $class;
|
|
return $self;
|
|
}
|
|
|
|
sub name {
|
|
my $self = shift;
|
|
return "tomcat";
|
|
}
|
|
|
|
sub windowsInstall {
|
|
my $self = shift;
|
|
return if $self->windowsServiceInstalled();
|
|
my $config = File::Spec->catfile($self->getCCMHome(), 'conf', 'server.xml');
|
|
my $command = File::Spec->catfile ($self->getTomcatHome(), 'bin', 'tomcat.exe');
|
|
$command .= " -install " . $self->getServiceName();
|
|
$command .= " " . File::Spec->catfile($self->getJavaHome(), 'jre', 'bin', 'server', 'jvm.dll');
|
|
$command .= " -Djava.class.path=" . CCM::Util::catpath(File::Spec->catfile($self->getTomcatHome(),'bin','bootstrap.jar'),
|
|
File::Spec->catfile($self->getJavaHome(),'lib','tools.jar'),
|
|
File::Spec->catdir($self->getCCMToolsHome(),'server','tomcat','classes'));
|
|
$command .= " " . $self->getSystemProperties();
|
|
$command .= " -start $self->{bootstrap_class} -params -config $config start";
|
|
$command .= " -stop $self->{bootstrap_class} -params -config $config stop";
|
|
$command .= " -out " . File::Spec->catfile($self->getCCMHome(), 'logs', 'catalina-stdout.log');
|
|
$command .= " -err " . File::Spec->catfile($self->getCCMHome(), 'logs', 'catalina-stderr.log');
|
|
$self->run($command);
|
|
open (OUT, "> " . $self->windowsServiceLockFile())
|
|
or CCM::Util::error("could not open " . $self->windowsServiceLockFile());
|
|
print OUT $self->getServiceName();
|
|
close OUT;
|
|
}
|
|
|
|
sub windowsUninstall {
|
|
my $self = shift;
|
|
return unless $self->windowsServiceInstalled();
|
|
my $command = File::Spec->catfile ($self->getTomcatHome(), 'bin', 'tomcat.exe');
|
|
$command .= " -uninstall " . $self->getServiceName();
|
|
$self->windowsStop();
|
|
$self->run($command);
|
|
unlink $self->windowsServiceLockFile();
|
|
}
|
|
|
|
sub start {
|
|
my $self = shift;
|
|
my $command = $self->getCommandLine() . " start";
|
|
if (@{$self->args()}) {
|
|
$command .= " " . join(" ", @{$self->args()});
|
|
}
|
|
if (@_) {
|
|
$command .= " " . join(" ", @_);
|
|
}
|
|
$command .= " >> " . File::Spec->catfile($self->getCCMHome(), 'logs', 'catalina-stdout.log');
|
|
$command .= " 2>> " . File::Spec->catfile($self->getCCMHome(), 'logs', 'catalina-stderr.log');
|
|
$command .= " &";
|
|
CCM::Util::setuser();
|
|
$self->runExec($command);
|
|
}
|
|
|
|
sub stop {
|
|
my $self = shift;
|
|
my $command = $self->getCommandLine() . " stop";
|
|
if (@{$self->args()}) {
|
|
$command .= " " . join(" ", @{$self->args()});
|
|
}
|
|
if (@_) {
|
|
$command .= " " . join(" ", @_);
|
|
}
|
|
$command .= " >> " . File::Spec->catfile($self->getCCMHome(), 'logs', 'catalina-stdout.log');
|
|
$command .= " 2>> " . File::Spec->catfile($self->getCCMHome(), 'logs', 'catalina-stderr.log');
|
|
CCM::Util::setuser();
|
|
$self->runExec($command);
|
|
}
|
|
|
|
sub getCommandLine {
|
|
my $self = shift;
|
|
my $log_dir = File::Spec->catdir($self->getCCMHome(), 'logs');
|
|
my $server_root = $self->getCCMHome();
|
|
my $classpath = $self->getClassPath();
|
|
my $tomcat_home = $self->getTomcatHome();
|
|
my $system_properties = $self->getSystemProperties();
|
|
my $catalina_opts = defined $ENV{'CATALINA_OPTS'} ? $ENV{'CATALINA_OPTS'} : "";
|
|
my $java_opts = defined $ENV{'JAVA_OPTS'} ? $ENV{'JAVA_OPTS'} :
|
|
( defined $ENV{'JRE_ARGS'} ?
|
|
$ENV{'JRE_ARGS'} :
|
|
"" );
|
|
my $command = File::Spec->catfile ($self->getJavaHome(), 'bin', 'java');
|
|
if ($classpath ne "") {
|
|
$command .= " -classpath $classpath";
|
|
}
|
|
$command .= " $java_opts $catalina_opts $system_properties $self->{bootstrap_class}";
|
|
$command .= " -config " . File::Spec->catfile($self->getCCMHome(), 'conf', 'server.xml');
|
|
return $command;
|
|
}
|
|
|
|
sub getTomcatHome {
|
|
my $self = shift;
|
|
if (!defined $self->{tomcat_home}) {
|
|
$self->{tomcat_home} = $ENV{'TOMCAT_HOME'};
|
|
if (!defined $self->{tomcat_home}) {
|
|
if ( -d '/usr/share/tomcat' ) {
|
|
$self->{tomcat_home} = '/usr/share/tomcat';
|
|
} elsif ( -d '/opt/tomcat/latest' ) {
|
|
$self->{tomcat_home} = '/opt/tomcat/latest';
|
|
} else {
|
|
$self->{tomcat_home} = (reverse CCM::Util::versionSort (grep { -d $_ || -l $_ } glob("/opt/tomcat/4*")))[0];
|
|
}
|
|
if (!defined $self->{tomcat_home}) {
|
|
CCM::Util::error ("TOMCAT_HOME not set and no Tomcat installation found", 3);
|
|
}
|
|
}
|
|
}
|
|
return $self->{tomcat_home};
|
|
}
|
|
|
|
sub getClassPath {
|
|
my $self = shift;
|
|
my $classpath = $self->SUPER::getClassPath();
|
|
$classpath = CCM::Util::catpath($classpath, File::Spec->catfile($self->getTomcatHome(), 'bin', 'bootstrap.jar'));
|
|
$classpath = CCM::Util::catpath($classpath, File::Spec->catdir($self->getCCMToolsHome(), 'server', 'tomcat', 'classes'));
|
|
return $classpath;
|
|
}
|
|
|
|
sub getSystemProperties {
|
|
my $self = shift;
|
|
my $props = $self->SUPER::getSystemProperties();
|
|
$props .= " -Djava.endorsed.dirs=" . File::Spec->catdir($self->getTomcatHome(), 'common', 'endorsed');
|
|
$props .= " -Dcatalina.base=" . $self->getTomcatHome();
|
|
$props .= " -Dcatalina.home=" . $self->getTomcatHome();
|
|
return $props;
|
|
}
|
|
|
|
1 # So that the require or use succeeds.
|
|
|
|
__END__
|
|
|
|
=back 4
|
|
|
|
=head1 AUTHORS
|
|
|
|
=head1 COPYRIGHT
|
|
|
|
=head1 SEE ALSO
|
|
|
|
L<perl(1)>
|
|
|
|
=cut
|