aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHerve Quiroz <hq@FreeBSD.org>2009-11-18 22:11:46 +0000
committerHerve Quiroz <hq@FreeBSD.org>2009-11-18 22:11:46 +0000
commit6e3e974f236f1529d735266e780706d4e158976d (patch)
treee161e2f2a407cdb9ae7185565b98dcce100d6139
parent83c73c7572ef63a3c8321308ace21bb9b95ce4bf (diff)
downloadports-6e3e974f236f1529d735266e780706d4e158976d.tar.gz
ports-6e3e974f236f1529d735266e780706d4e158976d.zip
Reorganise the JBoss5 port:
- remove daemonctl, use root startup (following tomcat, geronimo, etc) - allow arbitrary arguments to be handed to JBoss (long standing bug) - reorganise the directory structure to follow hier(7) * JBOSS_HOME = /usr/local/share/jboss5 * deployment directory = /var/jboss5 * log directory = /var/log/jboss5 - Take maintainership - Bump PORTREVISION PR: 139372 Submitted by: Jonathan Chen <jonc@chen.org.nz>
Notes
Notes: svn path=/head/; revision=244444
-rw-r--r--java/jboss5/Makefile108
-rw-r--r--java/jboss5/files/daemonctl.1.in78
-rw-r--r--java/jboss5/files/daemonctl.c.in557
-rw-r--r--java/jboss5/files/jboss5.sh.in112
-rw-r--r--java/jboss5/files/patch-build-common.xml12
-rw-r--r--java/jboss5/files/patch-build.xml39
-rw-r--r--java/jboss5/files/pkg-message.in8
-rw-r--r--java/jboss5/pkg-descr18
8 files changed, 123 insertions, 809 deletions
diff --git a/java/jboss5/Makefile b/java/jboss5/Makefile
index 42cfca56ce31..254b0b3afb26 100644
--- a/java/jboss5/Makefile
+++ b/java/jboss5/Makefile
@@ -5,123 +5,72 @@
# $FreeBSD$
#
-PORTNAME= ${APP_TITLE:L}
+PORTNAME= jboss
PORTVERSION= 5.1.0.GA
+PORTREVISION= 1
PORTEPOCH= 1
CATEGORIES= java devel
MASTER_SITES= SF/${PORTNAME}/JBoss/JBoss-${PORTVERSION}
DISTNAME= ${PORTNAME}-${PORTVERSION}-src
-MAINTAINER= ports@FreeBSD.org
+MAINTAINER= jonc@chen.org.nz
COMMENT= Open-source J2EE application server (5.x family)
-BUILD_DEPENDS= ant:${PORTSDIR}/devel/apache-ant
-
LATEST_LINK= jboss5
USE_JAVA= yes
JAVA_VERSION= 1.5+
USE_ANT= yes
+DATADIR= ${PREFIX}/share/${UNIQUENAME}
+DOCSDIR= ${PREFIX}/share/doc/${UNIQUENAME}
MANUAL_PACKAGE_BUILD= fetches files in build phase
MAKE_ARGS= -buildfile build/build.xml
USE_RC_SUBR= jboss5.sh
-SUB_FILES= pkg-install pkg-deinstall pkg-message daemonctl.1 daemonctl.c
+SUB_FILES= pkg-install pkg-deinstall pkg-message
+PORTDATA= *
.if !defined(NOPORTDOCS)
PORTDOCS= *
.endif
-APP_HOME?= ${PREFIX}/${APP_SHORTNAME}
-DOCSDIR= ${PREFIX}/share/doc/${LATEST_LINK}
-LOG_DIR= ${APP_HOME}/log
-APP_TITLE= JBoss
-APP_SHORTNAME= ${UNIQUENAME}
-CONTROL_SCRIPT_NAME= ${APP_SHORTNAME}ctl
-CONTROL_SCRIPT= ${PREFIX}/bin/${CONTROL_SCRIPT_NAME}
-CONTROL_SCRIPT_MANPAGE_TITLE= ${CONTROL_SCRIPT_NAME:U}
-STARTUP_SCRIPT_NAME= ${APP_SHORTNAME}.sh
-STARTUP_SCRIPT= ${PREFIX}/etc/rc.d/${STARTUP_SCRIPT_NAME}
+VAR_DIR?= /var
+LOG_DIR?= ${VAR_DIR}/log/${UNIQUENAME}
+DEPLOY_DIR?= ${VAR_DIR}/${UNIQUENAME}
USER= www
GROUP= www
-STDOUT_LOG= ${LOG_DIR}/stdout.log
-STDERR_LOG= ${LOG_DIR}/stderr.log
-AUTO_START?= NO
-STOP_TIMEOUT?= 5
-PID_FILE= /var/run/${APP_SHORTNAME}.pid
-JAVA_OPTS=
-JAVA_CP= bin/run.jar:${JAVA_HOME}/lib/tools.jar
-JAVA_MAIN= org.jboss.Main
-MAN1= ${CONTROL_SCRIPT_NAME}.1
+STOP_TIMEOUT?= 10
+PID_FILE= /var/run/${UNIQUENAME}.pid
JBOSSOUTPUT= ${WRKSRC}/build/output/${PORTNAME}-${PORTVERSION}
-APP_HOME_FILES= bin client lib server common
+APP_HOME_FILES= bin/run.jar client lib common
PKGMESSAGE= ${WRKDIR}/pkg-message
-PLIST_FILES= ${CONTROL_SCRIPT:S,^${PREFIX}/,,} \
- ${STDOUT_LOG:S,^${PREFIX}/,,} \
- ${STDERR_LOG:S,^${PREFIX}/,,}
-
-SUB_LIST= APP_HOME=${APP_HOME} \
- APP_SHORTNAME=${APP_SHORTNAME} \
- APP_TITLE=${APP_TITLE} \
- CONTROL_SCRIPT=${CONTROL_SCRIPT} \
- CONTROL_SCRIPT_MANPAGE_TITLE=${CONTROL_SCRIPT_MANPAGE_TITLE} \
- CONTROL_SCRIPT_NAME=${CONTROL_SCRIPT_NAME} \
+SUB_LIST= APP_HOME=${DATADIR} \
+ APP_SHORTNAME=${UNIQUENAME} \
GROUP=${GROUP} \
- JAVA=${JAVA} \
- JAVA_CP=${JAVA_CP} \
- JAVA_HOME=${JAVA_HOME} \
- JAVA_MAIN=${JAVA_MAIN} \
- JAVA_OPTS=${JAVA_OPTS} \
- JAVA_PORT_VERSION=${JAVA_PORT_VERSION} \
- JAVA_PORT_OS_DESCRIPTION=${JAVA_PORT_OS_DESCRIPTION} \
- JAR_FILE=${JAR_FILE} \
LOG_DIR=${LOG_DIR} \
+ DEPLOY_DIR=${DEPLOY_DIR} \
PID_FILE=${PID_FILE} \
PKGNAME=${PKGNAME} \
PORTNAME=${PORTNAME} \
PORTVERSION=${PORTVERSION} \
PREFIX=${PREFIX} \
- STARTUP_SCRIPT=${STARTUP_SCRIPT} \
- STDERR_LOG=${STDERR_LOG} \
- STDOUT_LOG=${STDOUT_LOG} \
STOP_TIMEOUT=${STOP_TIMEOUT} \
USER=${USER}
.include <bsd.port.pre.mk>
-pre-patch:
- @${ECHO_MSG} "Installation settings:"
- @${ECHO_MSG} " Destination directory: ${APP_HOME}"
- @${ECHO_MSG} " Control program location: ${CONTROL_SCRIPT}"
- @${ECHO_MSG} " Startup script location: ${STARTUP_SCRIPT}"
- @${ECHO_MSG} " Location of JDK: ${JAVA_HOME}"
- @${ECHO_MSG} " Location of Java port: ${JAVA_PORT}"
- @${ECHO_MSG} " Startup Java Options: ${JAVA_OPTS}"
- @${ECHO_MSG} " Running as (user/group): ${USER}/${GROUP}"
- @${ECHO_MSG} " Logfile stdout: ${STDOUT_LOG}"
- @${ECHO_MSG} " Logfile stderr: ${STDERR_LOG}"
- @${ECHO_MSG} " Starting after install: ${AUTO_START}"
- @${ECHO_MSG} " Stop time-out: ${STOP_TIMEOUT} sec."
-
-pre-install:
- @${SETENV} PKG_PREFIX=${PREFIX} ${SH} ${PKGINSTALL} ${PKGNAME} PRE-INSTALL
-
do-install:
- cd ${WRKDIR} && ${CC} ${CFLAGS} -o ${CONTROL_SCRIPT_NAME} daemonctl.c
- ${MKDIR} ${APP_HOME} && ${CHOWN} ${USER}:${GROUP} ${APP_HOME}
- ${MKDIR} ${LOG_DIR} && ${CHOWN} ${USER}:${GROUP} ${LOG_DIR}
+ ${MKDIR} ${DATADIR}/bin && ${CHOWN} -R ${USER}:${GROUP} ${DATADIR}
+ ${MKDIR} ${DEPLOY_DIR} && ${CHOWN} ${USER}:${GROUP} ${DEPLOY_DIR}
(cd ${JBOSSOUTPUT} && ${FIND} ${APP_HOME_FILES} |\
- ${CPIO} -pdmu -R ${USER}:${GROUP} ${APP_HOME})
- ${INSTALL} -o ${USER} -g ${GROUP} -m 06754\
- ${WRKDIR}/${CONTROL_SCRIPT_NAME} ${CONTROL_SCRIPT}
- ${INSTALL} -o ${USER} -g ${GROUP} -m 0640 /dev/null ${STDOUT_LOG}
- ${INSTALL} -o ${USER} -g ${GROUP} -m 0640 /dev/null ${STDERR_LOG}
+ ${CPIO} -pdmu -R ${USER}:${GROUP} ${DATADIR})
+ (cd ${JBOSSOUTPUT}/server && ${FIND} . |\
+ ${CPIO} -pdmu -R ${USER}:${GROUP} ${DEPLOY_DIR})
${INSTALL} -o ${USER} -g ${GROUP} -m 0640 /dev/null ${PID_FILE}
- ${INSTALL_MAN} ${WRKDIR}/daemonctl.1 ${MANPREFIX}/man/man1/${CONTROL_SCRIPT_NAME}.1
.if !defined(NOPORTDOCS)
cd ${JBOSSOUTPUT}/docs \
&& ${FIND} . -type d -exec ${MKDIR} ${DOCSDIR}/{} \; \
@@ -129,15 +78,12 @@ do-install:
.endif
post-install:
- @${FIND} -s ${APP_HOME_FILES:S,^,${JBOSSOUTPUT}/,} -not -type d | \
- ${SED} -ne 's,^${JBOSSOUTPUT},${APP_HOME:S,${PREFIX}/,,},p' >> ${TMPPLIST}
- @${FIND} -s -d ${APP_HOME_FILES:S,^,${JBOSSOUTPUT}/,} -type d | \
- ${SED} -ne 's,^${JBOSSOUTPUT},@dirrm ${APP_HOME:S,${PREFIX}/,,},p' >> ${TMPPLIST}
- @${ECHO_CMD} "@dirrm ${APP_HOME:S,^${PREFIX}/,,}/log" >> ${TMPPLIST}
- @${ECHO_CMD} "@dirrm ${APP_HOME:S,^${PREFIX}/,,}" >> ${TMPPLIST}
-.if ${AUTO_START} == "YES"
- @${CONTROL_SCRIPT} start || true
-.endif
+ @${ECHO_CMD} "@cwd ${VAR_DIR}" >> ${TMPPLIST}
+ @${FIND} -s ${JBOSSOUTPUT}/server -not -type d | \
+ ${SED} -ne 's,^${JBOSSOUTPUT}/server/,${DEPLOY_DIR:S,^${VAR_DIR}/,,}/,p' >> ${TMPPLIST}
+ @${FIND} -s -d ${JBOSSOUTPUT}/server -type d | \
+ ${SED} -ne 's,^${JBOSSOUTPUT}/server/,@dirrm ${DEPLOY_DIR:S,^${VAR_DIR}/,,}/,p' >> ${TMPPLIST}
+ @${ECHO_CMD} "@dirrm ${DEPLOY_DIR:S,^${VAR_DIR}/,,}" >> ${TMPPLIST}
.if !defined(BATCH)
@${CAT} ${PKGMESSAGE}
.endif
diff --git a/java/jboss5/files/daemonctl.1.in b/java/jboss5/files/daemonctl.1.in
deleted file mode 100644
index 30547f449ef9..000000000000
--- a/java/jboss5/files/daemonctl.1.in
+++ /dev/null
@@ -1,78 +0,0 @@
-.Dd February 21, 2002
-.Dt %%CONTROL_SCRIPT_MANPAGE_TITLE%% 1
-.Os FreeBSD
-.Sh NAME
-.Nm %%CONTROL_SCRIPT_NAME%%
-.Nd %%APP_TITLE%% server control interface
-.Sh SYNOPSIS
-.Nm
-.Op Fl java-options
-.Ar {start|restart|stop}
-.Sh DESCRIPTION
-The
-.Nm
-program provides an restricted interface to the %%APP_TITLE%%
-application server. The
-.Nm
-program is only accessible to users in the 'www' group, and will
-only invoke the %%JAVA_PORT_OS_DESCRIPTION%% %%JAVA_PORT_VERSION%% JVM.
-.Pp
-Any Java options listed are handed off directly to the JVM. Any
-classpath options will be ignored.
-.Pp
-The program expects exactly one of the following terminating commands:
-.Bl -tag -width indent
-.It Ar start
-Start %%APP_TITLE%%, if it is not already running.
-.It Ar restart
-Restart %%APP_TITLE%%. If it is already running, then it will be stopped and
-then started right after that. Otherwise it will just be started up.
-.It Ar stop
-Stop %%APP_TITLE%%, if it is actually running.
-.El
-.Sh ERRORS
-The following error conditions are detected. They will be checked in the
-specified order. In each case an error message is printed with the name of the
-control program prepended.
-.Pp
-If no argument is passed, then a simple help message is printed and the
-program exists with error code 0.
-.Pp
-If at least one argument is passed, but it is different from
-.Ar start ,
-.Ar restart
-or
-.Ar stop
-then the help message is printed as well, and the program exits with error
-code 1.
-.Pp
-The following errors conditions are defined:
-.Bl -tag -width indent
-.It Em Illegal program argument (error code 1)
-.It Em PID file not found (error code 2)
-.It Em PID file too large (error code 3)
-.It Em PID file contains illegal character (error code 4)
-.It Em Kill of process failed (error code 5)
-.It Em %%APP_TITLE%% is already running (error code 6)
-.It Em %%APP_TITLE%% is not running (error code 7)
-.It Em Unable to chdir to the %%APP_TITLE%% home directory (error code 8)
-.It Em Unable to open the stdout log file (error code 9)
-.It Em Unable to open the stderr log file (error code 10)
-.It Em Unable to start %%APP_TITLE%% (error code 11)
-.El
-.Sh FILES
-.Bl -tag -width -indent
-.It Pa %%PID_FILE%%
-The %%APP_TITLE%% PID file that is used to store the process ID of the
-currently running process in. It is emptied as soon as the server is stopped
-and filled with the process ID when it is started. It should never be writable
-for anyone but
-.Em www ,
-.It Pa %%STARTUP_SCRIPT%%
-A script that starts the
-.Nm
-program. It is used to start %%APP_TITLE%% at startup time.
-.El
-.Sh AUTHORS
-.An Ernst de Haan Aq znerd@FreeBSD.org
-.An Jonathan Chen Aq jonc@chen.org.nz
diff --git a/java/jboss5/files/daemonctl.c.in b/java/jboss5/files/daemonctl.c.in
deleted file mode 100644
index 7bcdc6b7f5e8..000000000000
--- a/java/jboss5/files/daemonctl.c.in
+++ /dev/null
@@ -1,557 +0,0 @@
-/*
- * -*- mode: Fundamental; tab-width: 4; -*-
- * ex:ts=4
- *
- * Daemon control program, with Java Startup options.
- *
- * Original by Ernst de Haan <znerd@freebsd.org>
- * www/jakarta-tomcat4/files/daemonctl.c
- *
- * $FreeBSD$
- */
-
-#include <assert.h>
-#include <fcntl.h>
-#include <signal.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <syslog.h>
-#include <unistd.h>
-#include <sys/errno.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <sys/uio.h>
-
-#define TRUE 1
-#define FALSE 0
-
-/* The interval in seconds between the checks to make sure the process
- died after a kill */
-#define STOP_TIME_INTERVAL 1
-
-#define ERR_ILLEGAL_ARGUMENT 1
-#define ERR_PID_FILE_NOT_FOUND 2
-#define ERR_KILL_FAILED 5
-#define ERR_ALREADY_RUNNING 6
-#define ERR_NOT_RUNNING 7
-#define ERR_CHDIR_TO_APP_HOME 8
-#define ERR_ACCESS_JAR_FILE 17
-#define ERR_STDOUT_LOGFILE_OPEN 9
-#define ERR_STDERR_LOGFILE_OPEN 10
-#define ERR_FORK_FAILED 11
-#define ERR_STAT_JAVA_HOME 12
-#define ERR_JAVA_HOME_NOT_DIR 13
-#define ERR_STAT_JAVA_CMD 14
-#define ERR_JAVA_CMD_NOT_FILE 15
-#define ERR_JAVA_CMD_NOT_EXECUTABLE 16
-
-/*
- Function declarations.
- */
-static void printUsage (void);
-static int readPID (void);
-static void writePID (int pid);
-static void clearPID (void);
-static void start (int javaOpt, char * javaArgs [], int jbossOpt, char * jbossArgs []);
-static void stop (void);
-static void restart (int javaOpt, char * javaArgs [], int jbossOpt, char * jbossArgs []);
-static void logOutput (char *);
-
-/*
- Globals
- */
-static int isQuiet = FALSE;
-static char * optQuiet = "-q", /* quiet option */
- * optConfig = "-config"; /* jboss configuration option */
-
-/**
- * Main function. This function is called when this program is executed.
- *
- * @param argc
- * the number of arguments plus one, so always greater than 0.
- *
- * @param argv
- * the arguments in an array of character pointers, where the last argument
- * element is followed by a NULL element.
- */
-int
-main (
- int argc,
- char *argv [])
-{
- /* Declare variables, like all other good ANSI C programs do :) */
- int i, javaOpt, jbossOpt;
- char *argument, **javaArgs, **jbossArgs;
-
- /* Parse the arguments */
- if (argc < 2)
- {
- printUsage ();
- return 0;
- }
-
- /* XXX: Fix for setting up the environment for the java wrapper script */
- setuid (geteuid ());
- setgid (getegid ());
-
- /*
- Build up java and jboss option blocks.
- */
- javaOpt = jbossOpt = 0;
- for (i = 1; i < argc; i++)
- {
- if (strcmp (argv [i], optQuiet) == 0)
- {
- isQuiet = TRUE;
-
- } else if (strcmp (argv [i], optConfig) == 0)
- {
- jbossOpt += 2;
- if (++i >= argc)
- {
- printUsage ();
- return ERR_ILLEGAL_ARGUMENT;
- }
-
- } else if (*argv [i] == '-')
- {
- javaOpt++;
- }
- }
- if (javaOpt == 0)
- javaArgs = NULL;
- else
- {
- int j = 0;
- javaArgs = malloc (sizeof (char *) * javaOpt);
- for (i = 0; i < argc; i++)
- {
- if (strcmp (argv [i], optQuiet) &&
- strcmp (argv [i], optConfig) &&
- *argv [i] == '-')
- {
- javaArgs [j++] = argv [i];
- }
- }
- }
- if (jbossOpt == 0)
- jbossArgs = NULL;
- else
- {
- int j = 0;
- jbossArgs = malloc (sizeof (char *) * jbossOpt);
- for (i = 0; i < argc; i++)
- {
- if (strcmp (argv [i], optConfig) == 0)
- {
- jbossArgs [j++] = "-c";
- jbossArgs [j++] = argv [++i];
- }
- }
- }
-
- /*
- Decide on just what to call.
- */
- argument = argv [argc - 1];
- if (strcmp ("start", argument) == 0)
- {
- start (javaOpt, javaArgs, jbossOpt, jbossArgs);
-
- } else if (strcmp ("stop", argument) == 0)
- {
- stop ();
-
- } else if (strcmp ("restart", argument) == 0)
- {
- restart (javaOpt, javaArgs, jbossOpt, jbossArgs);
-
- } else {
- fprintf (stderr, "%%CONTROL_SCRIPT_NAME%%: Illegal argument \"%s\".\n", argument);
- printUsage ();
- exit (ERR_ILLEGAL_ARGUMENT);
- }
-
- return EXIT_SUCCESS;
-}
-
-/**
- * Prints usage information to stdout.
- */
-static void
-printUsage (void)
-{
- printf ("Usage: %%CONTROL_SCRIPT_NAME%% [java-options] [-config jbossconfig] {start|stop|restart}\n");
-}
-
-/**
- * Reads a PID from the PID file.
- *
- * @return
- * the PID, or -1 if the file was empty.
- */
-static int
-readPID (void)
-{
- FILE * file;
- int pid;
-
- logOutput (">> Reading PID file (%%PID_FILE%%)...");
- file = fopen ("%%PID_FILE%%", "r");
- if (!file)
- {
- logOutput (" [ FAILED ]\n");
- perror ("%%CONTROL_SCRIPT_NAME%%: Unable to open %%PID_FILE%% for reading: ");
- exit (ERR_PID_FILE_NOT_FOUND);
- }
- if (fscanf (file, "%d", &pid) < 1)
- pid = -1;
- fclose (file);
-
- logOutput (" [ DONE ]\n");
- return pid;
-}
-
-/**
- * Writes a process ID to the specified file. The file is identified by a file
- * handle.
- *
- * @param pid
- * the PID to store, always greater than 0.
- */
-static void
-writePID (
- int pid)
-{
- FILE * file;
-
- logOutput (">> Writing PID file...");
- file = fopen ("%%PID_FILE%%", "w");
- if (!file)
- {
- logOutput (" [ FAILED ]\n");
- perror ("%%CONTROL_SCRIPT_NAME%%: Unable to open %%PID_FILE%% for writing: ");
- exit (ERR_PID_FILE_NOT_FOUND);
- }
- fprintf (file, "%d\n", pid);
- fclose (file);
-
- logOutput (" [ DONE ]\n");
-}
-
-/**
- Truncate the PID file.
- */
-static void
-clearPID (void)
-{
- if (truncate ("%%PID_FILE%%", 0) != 0)
- {
- perror ("%%CONTROL_SCRIPT_NAME%%: Unable to clear %%PID_FILE%%: ");
- exit (ERR_PID_FILE_NOT_FOUND);
- }
-}
-
-/**
- * Checks if the specified process is running.
- *
- * @param pid
- * the process id, greater than 0.
- *
- * @return
- * 0 if the specified process is not running, a different value otherwise.
- */
-static int
-existsProcess (
- int pid)
-{
- int result;
-
- /* Check preconditions */
- assert (pid > 0);
-
- /* See if the process exists */
- result = kill (pid, 0);
-
- /* If the result is 0, then the process exists */
- return result == 0;
-}
-
-/**
- * Kills the process identified by the specified ID.
- *
- * @param pid
- * the process id, greater than 0.
- */
-static void
-killProcess (
- int pid)
-{
- int result;
- unsigned int waited;
- unsigned int forced;
- unsigned int interval = STOP_TIME_INTERVAL;
- unsigned int timeout = %%STOP_TIMEOUT%%;
-
- /* Check preconditions */
- assert (pid > 0);
-
- if (!isQuiet)
- printf (">> Terminating process %d...", pid);
- result = kill (pid, SIGTERM);
- if (result < 0) {
- logOutput (" [ FAILED ]\n");
- fprintf (stderr, "%%CONTROL_SCRIPT_NAME%%: Unable to kill process %d: ", pid);
- perror (NULL);
- exit (ERR_KILL_FAILED);
- }
-
- /* Wait until the process is actually killed */
- result = existsProcess (pid);
- for (waited=0; result == 1 && waited < timeout; waited += interval)
- {
- logOutput (".");
- fflush (stdout);
- sleep (interval);
- result = existsProcess (pid);
- }
-
- /* If the process still exists, then have no mercy and kill it */
- forced = 0;
- if (result == 1)
- {
- /* Force the process to die */
- result = kill (pid, SIGKILL);
- if (result == 0) {
- forced = 1;
- logOutput (" [ KILLED ]\n");
- fprintf (stderr, "%%CONTROL_SCRIPT_NAME%%: Process %d did not terminate within %%STOP_TIMEOUT%% sec. Killed.\n", pid);
- } else if (result != ESRCH) {
- logOutput (" [ FAILED ]\n");
- fprintf (stderr, "%%CONTROL_SCRIPT_NAME%%: Unable to kill process %d: ", pid);
- perror (NULL);
- exit (ERR_KILL_FAILED);
- }
- }
-
- if (forced == 0) {
- logOutput (" [ DONE ]\n");
- }
-}
-
-/**
- * Starts the daemon.
- */
-static void
-start (
- int javaOpt,
- char * javaArgs [],
- int jbossOpt,
- char * jbossArgs [])
-{
- int i, argc;
- char ** argv;
- int pid;
- int result;
- int stdoutLogFile;
- int stderrLogFile;
- struct stat sb;
-
- pid = readPID ();
-
- logOutput (">> Starting %%APP_TITLE%% %%PORTVERSION%%...");
- if (pid != -1)
- {
- /* Check if the process actually exists */
- result = existsProcess (pid);
- if (result == 1)
- {
- logOutput (" [ FAILED ]\n");
- fprintf (stderr, "%%CONTROL_SCRIPT_NAME%%: %%APP_TITLE%% %%PORTVERSION%% is already running, PID is %d.\n", pid);
- exit (ERR_ALREADY_RUNNING);
- }
- }
-
- /* Check if the JDK home directory is actually a directory */
- result = stat ("%%JAVA_HOME%%", &sb);
- if (result != 0) {
- logOutput (" [ FAILED ]\n");
- fprintf (stderr, "%%CONTROL_SCRIPT_NAME%%: Unable to stat %%JAVA_HOME%%: ");
- perror (NULL);
- exit (ERR_STAT_JAVA_HOME);
- }
- if (!S_ISDIR (sb.st_mode)) {
- logOutput (" [ FAILED ]\n");
- fprintf (stderr, "%%CONTROL_SCRIPT_NAME%%: Java home directory %%JAVA_HOME%% is not a directory.\n");
- exit (ERR_JAVA_HOME_NOT_DIR);
- }
-
- /* Check if the Java command is actually an executable regular file */
- result = stat ("%%JAVA%%", &sb);
- if (result != 0) {
- logOutput (" [ FAILED ]\n");
- fprintf (stderr, "%%CONTROL_SCRIPT_NAME%%: Unable to stat %%JAVA%%: ");
- perror (NULL);
- exit (ERR_STAT_JAVA_CMD);
- }
- if (!S_ISREG (sb.st_mode)) {
- logOutput (" [ FAILED ]\n");
- fprintf (stderr, "%%CONTROL_SCRIPT_NAME%%: Java command %%JAVA%% is not a regular file.\n");
- exit (ERR_JAVA_CMD_NOT_FILE);
- }
- result = access ("%%JAVA%%", X_OK);
- if (result != 0) {
- logOutput (" [ FAILED ]\n");
- fprintf (stderr, "%%CONTROL_SCRIPT_NAME%%: Java command %%JAVA%% is not executable: ");
- perror (NULL);
- exit (ERR_JAVA_CMD_NOT_EXECUTABLE);
- }
-
- /* Change directory */
- result = chdir ("%%APP_HOME%%");
- if (result < 0) {
- logOutput (" [ FAILED ]\n");
- fprintf (stderr, "%%CONTROL_SCRIPT_NAME%%: Unable to access directory %%APP_HOME%%: ");
- perror (NULL);
- exit (ERR_CHDIR_TO_APP_HOME);
- }
-
- /* See if the JAR file exists */
- result = access ("%%APP_HOME%%/%%JAR_FILE%%", R_OK);
- if (result < 0) {
- logOutput (" [ FAILED ]\n");
- fprintf (stderr, "%%CONTROL_SCRIPT_NAME%%: Unable to access JAR file %%APP_HOME%%/%%JAR_FILE%%: ");
- perror (NULL);
- exit (ERR_ACCESS_JAR_FILE);
- }
-
- /* Open the stdout log file */
- stdoutLogFile = open ("%%STDOUT_LOG%%", O_WRONLY);
- if (stdoutLogFile < 0) {
- logOutput (" [ FAILED ]\n");
- fprintf (stderr, "%%CONTROL_SCRIPT_NAME%%: Unable to open %%STDOUT_LOG%% for writing: ");
- perror (NULL);
- exit (ERR_STDOUT_LOGFILE_OPEN);
- }
- lseek (stdoutLogFile, (off_t) 0, SEEK_END);
-
- /* Open the stderr log file */
- stderrLogFile = open ("%%STDERR_LOG%%", O_WRONLY);
- if (stderrLogFile < 0) {
- logOutput (" [ FAILED ]\n");
- fprintf (stderr, "%%CONTROL_SCRIPT_NAME%%: Unable to open %%STDERR_LOG%% for writing: ");
- perror (NULL);
- exit (ERR_STDERR_LOGFILE_OPEN);
- }
- lseek (stderrLogFile, (off_t) 0, SEEK_END);
-
- /* Split this process in two */
- switch (pid = fork ())
- {
- case -1:
- logOutput (" [ FAILED ]\n");
- fprintf (stderr, "%%CONTROL_SCRIPT_NAME%%: Unable to fork: ");
- perror (NULL);
- exit (ERR_FORK_FAILED);
- break;
-
- case 0:
- /* Redirect stdout to log file */
- dup2 (stdoutLogFile, STDOUT_FILENO);
-
- /* Redirect stderr to log file */
- dup2 (stderrLogFile, STDERR_FILENO);
-
- /* TODO: Support redirection of both stdout and stderr to the same
- file using pipe (2) */
-
- /*
- Build the argument vector, with the java/jboss options if any.
- */
- argv = malloc (sizeof (char *) * (javaOpt + jbossOpt + 5));
- argc = 0;
- argv [argc++] = "%%JAVA%%";
- for (i = 0; i < javaOpt; i++)
- argv [argc++] = javaArgs [i];
- argv [argc++] = "-cp";
- argv [argc++] = "%%JAVA_CP%%";
- argv [argc++] = "%%JAVA_MAIN%%";
- for (i = 0; i < jbossOpt; i++)
- argv [argc++] = jbossArgs [i];
- argv [argc++] = NULL;
-
- /* Execute the command */
- execv (argv [0], argv);
- perror (NULL);
- break;
-
- default:
- logOutput (" [ DONE ]\n");
- writePID (pid);
- }
-}
-
-/**
- * Stops the daemon.
- */
-static void
-stop (void)
-{
- int pid;
-
- pid = readPID ();
-
- logOutput (">> Checking if %%APP_TITLE%% %%PORTVERSION%% is running...");
-
- /* If there is a PID, see if the process still exists */
- if (pid != -1)
- {
- int result = kill (pid, 0);
- if (result != 0 && errno == ESRCH)
- {
- clearPID ();
- pid = -1;
- }
- }
-
- /* If there is no running process, produce an error */
- if (pid == -1)
- {
- logOutput (" [ FAILED ]\n");
- fprintf (stderr, "%%CONTROL_SCRIPT_NAME%%: %%APP_TITLE%% %%PORTVERSION%% is currently not running.\n");
- exit (ERR_NOT_RUNNING);
- }
- logOutput (" [ DONE ]\n");
-
- /* Terminate the process */
- killProcess (pid);
- clearPID ();
-}
-
-
-/**
- * Restarts the process. If it not currently running, then it will fail.
- */
-static void
-restart (
- int javaOpt,
- char * javaArgs [],
- int jbossOpt,
- char * jbossArgs [])
-{
- stop ();
- start (javaOpt, javaArgs, jbossOpt, jbossArgs);
-}
-
-/**
- Output log to stdout.
- */
-static void
-logOutput (
- char * string)
-{
- if (!isQuiet)
- printf (string);
-}
diff --git a/java/jboss5/files/jboss5.sh.in b/java/jboss5/files/jboss5.sh.in
index 157a5947f826..1bb4a35b0434 100644
--- a/java/jboss5/files/jboss5.sh.in
+++ b/java/jboss5/files/jboss5.sh.in
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# %%APP_TITLE%% startup script.
+# %%APP_SHORTNAME%% startup script.
#
# $FreeBSD$
#
@@ -9,53 +9,105 @@
# REQUIRE: NETWORKING SERVERS
# Add the following lines to /etc/rc.conf to enable %%APP_SHORTNAME%%:
-# %%APP_SHORTNAME%%_enable (bool): Set to "NO" by default.
-# Set it to "YES" to enable %%APP_SHORTNAME%%
-# %%APP_SHORTNAME%%_flags (str): Set to "-server" by default.
-# Extra JVM flags.
-# %%APP_SHORTNAME%%_config (str): Set to "" by default
-# JBoss server config, eg {all|default|minimal|standard}
+# %%APP_SHORTNAME%%_enable (bool): Set to "YES" to enable %%APP_SHORTNAME%%
+# %%APP_SHORTNAME%%_jvm_opts (str): Extra JVM flags.
+# %%APP_SHORTNAME%%_args (str): Optional arguments to JBoss
+# %%APP_SHORTNAME%%_logging (str) JBoss log output. A pipe command may be used.
#
+
. %%RC_SUBR%%
+%%APP_SHORTNAME%%_user="%%USER%%"
+%%APP_SHORTNAME%%_logdir="%%LOG_DIR%%"
+
name="%%APP_SHORTNAME%%"
rcvar=`set_rcvar`
+load_rc_config $name
+
+%%APP_SHORTNAME%%_enable="${%%APP_SHORTNAME%%_enable:-"NO"}"
+%%APP_SHORTNAME%%_jvm_opts="${%%APP_SHORTNAME%%_jvm_opts:-"-server -Xms128m -Xmx512m -XX:MaxPermSize=256m -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000"}"
+%%APP_SHORTNAME%%_logging="${%%APP_SHORTNAME%%_logging:-">> ${%%APP_SHORTNAME%%_logdir}/stdout.log 2>> ${%%APP_SHORTNAME%%_logdir}/stderr.log"}"
+
start_cmd="%%APP_SHORTNAME%%_start"
-restart_cmd="%%APP_SHORTNAME%%_restart"
+stop_cmd="%%APP_SHORTNAME%%_stop"
pidfile="%%PID_FILE%%"
-procname="%%JAVA%%"
-[ -z "$%%APP_SHORTNAME%%_enable" ] && %%APP_SHORTNAME%%_enable="NO"
-[ -z "$%%APP_SHORTNAME%%_flags" ] && %%APP_SHORTNAME%%_flags="-server"
-[ -z "$%%APP_SHORTNAME%%_config" ] && %%APP_SHORTNAME%%_config=""
+JBOSS_HOME="%%APP_HOME%%"
+JBOSS_DEPLOY="%%DEPLOY_DIR%%"
+JBOSS_MAIN="org.jboss.Main"
+JAVA_OPTS="${%%APP_SHORTNAME%%_jvm_opts} \
+ -Djboss.server.base.dir=${JBOSS_DEPLOY} \
+ -Djboss.server.base.url=file://${JBOSS_DEPLOY} \
+ -Djava.endorsed.dirs=${JBOSS_HOME}/lib/endorsed \
+ -classpath ${JBOSS_HOME}/bin/run.jar ${JBOSS_MAIN}"
%%APP_SHORTNAME%%_start ()
{
- checkyesno %%APP_SHORTNAME%%_enable &&
- {
- if [ ! -f ${pidfile} ]
+ if [ ! -d "${%%APP_SHORTNAME%%_logdir}" ]
+ then
+ mkdir -p ${%%APP_SHORTNAME%%_logdir}
+ chown ${%%APP_SHORTNAME%%_user} ${%%APP_SHORTNAME%%_logdir}
+ fi
+
+ echo "Starting %%APP_SHORTNAME%%."
+ daemon -u ${%%APP_SHORTNAME%%_user} sh -c "java ${JAVA_OPTS} ${%%APP_SHORTNAME%%_args} ${%%APP_SHORTNAME%%_logging} &"
+
+ sleep 1 # let daemon(8) and sh(1) finish before executing pgrep(1)
+ pgrep -U ${%%APP_SHORTNAME%%_user} -f ${JBOSS_MAIN} > ${pidfile}
+ chown ${%%APP_SHORTNAME%%_user} $pidfile
+}
+
+%%APP_SHORTNAME%%_stop ()
+{
+ # Subvert the check_pid_file procname check.
+ if [ -f ${pidfile} ]
+ then
+ read rc_pid junk < $pidfile
+ if [ ! -z "${rc_pid}" ]
+ then
+ procname=`ps -o ucomm= ${rc_pid}`
+ fi
+ fi
+
+ rc_pid=$(check_pidfile $pidfile *$procname*)
+
+ if [ -z "${rc_pid}" ]
+ then
+ [ -n "${rc_fast}" ] && return 0
+ if [ -n "${pidfile}" ]
then
- touch ${pidfile}
- chown %%USER%%:%%GROUP%% ${pidfile}
+ echo "${name} not running? (check ${pidfile})."
+ else
+ echo "${name} not running?"
fi
+ return 1
+ fi
- echo "Starting %%APP_SHORTNAME%%."
- %%CONTROL_SCRIPT%% -q ${%%APP_SHORTNAME%%_flags} ${%%APP_SHORTNAME%%_configflag} ${%%APP_SHORTNAME%%_config} start
- }
+ echo "Stopping ${name}."
+ kill ${rc_pid} 2> /dev/null
+ jboss_wait_max_for_pid %%STOP_TIMEOUT%% ${rc_pid}
+ kill -KILL ${rc_pid} 2> /dev/null && echo "Killed."
+ rm -f ${pidfile}
}
-%%APP_SHORTNAME%%_restart ()
+jboss_wait_max_for_pid ()
{
- checkyesno %%APP_SHORTNAME%%_enable &&
- {
- echo "Restarting %%APP_SHORTNAME%%."
- %%CONTROL_SCRIPT%% -q ${%%APP_SHORTNAME%%_flags} ${%%APP_SHORTNAME%%_configflag} ${%%APP_SHORTNAME%%_config} restart
- }
+ _timeout=$1
+ shift
+ _pid=$1
+ _prefix=
+ while [ $_timeout -gt 0 ]
+ do
+ echo -n ${_prefix:-"Waiting (max $_timeout secs) for PIDS: "}$_pid
+ _prefix=", "
+ sleep 2
+ kill -0 $_pid 2> /dev/null || break
+ _timeout=$(($_timeout-2))
+ done
+ if [ -n "$_prefix" ]; then
+ echo "."
+ fi
}
-load_rc_config $name
-
-[ -n "${%%APP_SHORTNAME%%_config}" ] && %%APP_SHORTNAME%%_configflag="-config"
-
run_rc_command "$1"
diff --git a/java/jboss5/files/patch-build-common.xml b/java/jboss5/files/patch-build-common.xml
deleted file mode 100644
index 0bf67a9c68fc..000000000000
--- a/java/jboss5/files/patch-build-common.xml
+++ /dev/null
@@ -1,12 +0,0 @@
---- ./tools/etc/buildmagic/build-common.xml.orig Sun Mar 25 20:25:52 2007
-+++ ./tools/etc/buildmagic/build-common.xml Sun Mar 25 20:27:18 2007
-@@ -20,6 +20,7 @@
- <fail unless="buildmagic.ant.compatible">
- Unsupported Ant version:
- ${ant.version}
-- Please install a version which is compatible with Ant ${buildmagic.ant16.baseversion}.
-+ Please install a version which is compatible with Ant ${buildmagic.ant16.baseversion}
-+ or ${buildmagic.ant17.baseversion}.
- </fail>
-
- <!-- JDK Detection -->
diff --git a/java/jboss5/files/patch-build.xml b/java/jboss5/files/patch-build.xml
deleted file mode 100644
index 710f4c6145fa..000000000000
--- a/java/jboss5/files/patch-build.xml
+++ /dev/null
@@ -1,39 +0,0 @@
---- ./build/build.xml.orig Sun Mar 25 21:29:21 2007
-+++ ./build/build.xml Sun Mar 25 21:30:56 2007
-@@ -40,6 +40,36 @@
- -->
-
- <target name="init" unless="init.disable" depends="_buildmagic:init">
-+ <!-- Make sure we have the right version of Ant -->
-+ <property name="buildmagic.ant15.baseversion" value="1.5"/>
-+ <property name="buildmagic.ant16.baseversion" value="1.6"/>
-+ <property name="buildmagic.ant17.baseversion" value="1.7"/>
-+ <!--
-+ | Add new conditions for other supported Ant versions when they
-+ | become avaialble.
-+ -->
-+
-+ <condition property="buildmagic.ant.compatible">
-+ <or>
-+ <contains string="${ant.version}"
-+ substring="Ant version ${buildmagic.ant15.baseversion}"/>
-+ <contains string="${ant.version}"
-+ substring="Ant version ${buildmagic.ant16.baseversion}"/>
-+ <contains string="${ant.version}"
-+ substring="Ant version ${buildmagic.ant17.baseversion}"/>
-+ </or>
-+ </condition>
-+
-+ <fail unless="buildmagic.ant.compatible">
-+
-+ Unsupported Ant version:
-+
-+ ${ant.version}
-+
-+ Please install a version which is compatible with Ant ${buildmagic.ant15.baseversion} or ${buildmagic.ant16.baseversion}
-+ or ${buildmagic.ant17.baseversion}.
-+
-+ </fail>
- </target>
-
-
diff --git a/java/jboss5/files/pkg-message.in b/java/jboss5/files/pkg-message.in
index e48411f3028c..3be8c48126fd 100644
--- a/java/jboss5/files/pkg-message.in
+++ b/java/jboss5/files/pkg-message.in
@@ -1,7 +1,5 @@
-%%PKGNAME%% has been installed in %%APP_HOME%%.
+%%PKGNAME%% has been installed in %%DATADIR%%.
-If a user should be able to use %%CONTROL_SCRIPT_NAME%%, put it in the group '%%GROUP%%'.
+The deployment directory for applications is %%DEPLOY_DIR%%.
-Use 'man %%CONTROL_SCRIPT_NAME%%' for information about starting and stopping %%APP_TITLE%%.
-
-To run the %%APP_TITLE%% server from startup, add %%APP_SHORTNAME%%_enable="YES" in your /etc/rc.conf. Extra options can be found in the startup script.
+To run the %%PORTNAME%% server from startup, add %%APP_SHORTNAME%%_enable="YES" in your /etc/rc.conf. Extra options can be found in the startup script.
diff --git a/java/jboss5/pkg-descr b/java/jboss5/pkg-descr
index 28764e8a3317..d79340a7115a 100644
--- a/java/jboss5/pkg-descr
+++ b/java/jboss5/pkg-descr
@@ -1,13 +1,17 @@
-JBoss AS 5 GA will be Java EE 5 certified and will include the following core
-technologies.
+This is the final release of the JBoss 5.0 series for the Java EE5 codebase
+that fully complies with the Java EE5 conformance testing certification
+requirements.
- * JBoss Microcontainer - POJO based microcontainer removing the dependency
- on JMX
+Many key features of JBoss 5 are provided by integrating other standalone
+JBoss projects:
+
+ * JBoss Microcontainer 2.0.2 - POJO based microcontainer removing the
+ dependency on JMX
* EJB 3.0 - Fully certified as part of the Java EE 5 compliant JBoss AS 5
- * Hibernate 3.2 - JPA certified
- * JBoss Messaging 1.2 - the next generation messaging platform from JBoss
+ * Hibernate 3.3.1 - JPA certified
+ * JBoss Messaging 1.4.1 - the next generation messaging platform from JBoss
with HA features.
- * JBoss WebServices 2.0 - new custom built JAX-WS compliant WebServices
+ * JBoss WebServices 3.0.4 - new custom built JAX-WS compliant WebServices
stack.
* JBoss Seam 1.1 - a powerful new application framework to build next
generation Web 2.0 applications by unifying and integrating popular