1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
package Inline::Java::Server ;
@Inline::Java::Server::ISA = qw(Exporter) ;
# Export the cast function if wanted
@EXPORT_OK = qw(start stop status) ;
use strict ;
use Exporter ;
use Carp ;
require Inline ;
require Inline::Java ;
use File::Spec ;
$Inline::Java::Server::VERSION = '0.53_90' ;
# Create a dummy Inline::Java object in order to
# get the default options.
my $IJ = bless({}, "Inline::Java") ;
$IJ->validate(
SHARED_JVM => 1
) ;
sub import {
my $class = shift ;
my $a = shift ;
my @actions = () ;
if ($a eq 'restart'){
push @actions, 'stop', 'sleep', 'start' ;
}
else{
push @actions, $a ;
}
my $host = $IJ->get_java_config("HOST") ;
my $bind = $IJ->get_java_config("BIND") ;
my $port = $IJ->get_java_config("PORT") ;
foreach $a (@actions){
if ($a eq 'sleep'){
sleep(5) ;
next ;
}
my $status = Inline::Java::Server::status() ;
if ($a eq 'start'){
if ($status){
print "SHARED_JVM server on port $bind:$port is already running\n" ;
}
else{
Inline::Java::Server::start() ;
my $pid = Inline::Java::__get_JVM()->{pid} ;
print "SHARED_JVM server on port $bind:$port started with pid $pid\n" ;
}
}
elsif ($a eq 'stop'){
if (! $status){
print "SHARED_JVM server on port $host:$port is not running\n" ;
}
else {
Inline::Java::Server::stop() ;
print "SHARED_JVM server on port $host:$port stopped\n" ;
}
}
elsif ($a eq 'status'){
if ($status){
print "SHARED_JVM on port $host:$port is running\n" ;
}
else {
print "SHARED_JVM on port $host:$port is not running\n" ;
}
}
else{
croak("Usage: perl -MInline::Java::Server=(start|stop|restart|status)\n") ;
}
}
exit() ;
}
sub status {
my $socket = undef ;
eval {
$socket = Inline::Java::JVM::setup_socket(
$IJ->get_java_config("HOST"),
$IJ->get_java_config("PORT"),
0,
1
) ;
} ;
if ($@){
return 0 ;
}
else {
close($socket) ;
return 1 ;
}
}
sub start {
my $dir = $ENV{PERL_INLINE_JAVA_DIRECTORY} ;
Inline->bind(
Java => 'STUDY',
SHARED_JVM => 1,
($dir ? (DIRECTORY => $dir) : ()),
) ;
}
sub stop {
# This will connect us to the running JVM
Inline::Java::Server::start() ;
Inline::Java::capture_JVM() ;
Inline::Java::shutdown_JVM() ;
}
1 ;
|