| # YAJSW - Changes |

#### yajsw-stable-12.08

- Bug: Unix supplemental groups
- Bug: setting jna_tmp has no effect
- Change: update to jna-4.2.2 + aix64 lib

#### yajsw-beta-12.07 October 23rd 2016

- Bug: Cannot specify colon in wrapper.console.title
- Bug: error in AlphaNumericComparator when sorting parameters and classpath
- Bug: posix: env vars are not inherited by subprocess if created with posix_spawn
- Bug: configuration include does not work
- Bug: configuration does not correctly read lists
- Change: support working dir with non latin chars
- Change: windows: change drive or UNC path when executing batch file

#### yajsw-beta-12.06 May 8th 2016

- Change: libs: netty-all-4.0.35.Final, commons-cli-1.3.1, commons-collections-3.2.2, commons-configuration2-2.0
- Bug: No application logs on yajsw 11.11 / Ubuntu 14.04
- Bug: Windows 10 DELAYED_AUTO_START

#### yajsw-beta-12.05 Mars 13th 2016

- Bug: java app arguments bad sort

NOTE: Windows: If you have installed java 8 and an older version on the same machine: set the configuration properties wrapper.java.command = <full path to java> wrapper.ntservice.java.command = <full path to java>

#### yajsw-beta-12.04 Dec 24th 2015

- Bug: windows service: bad quotes in java service command line.
- Bug: script not executed: too many concurrent executions
- Bug: posix_spawn: application does not set working dir.
- Bug: Windows 10: Exception in service install
- Bug: query daemon must be executed with root priv
- Bug: process does not start if space char in folder or environment
- Bug: Mac OS X Yosemite: service install fails
- Bug: 'java -jar wrapper.jar -c http://../wrapper.conf' throws class not found exception
- Bug: error writing from system tray icon to stdin of wrapped process
- Bug: some pdh should return long instead of int
- New: support app shutdown listener, similar to JSW
- New: keystore function. See documentation for details.
- Change: update to netty 4.0.33 and jna 4.2.1
- Change: fix APL license header, format source, organize imports

#### yajsw-beta-12.03 October 5th 2015

- Bug: windows service: add quotes to java command if it contains blank
- Bug: genConfig: error parsing java command line
- Bug: JVMController: use parameter instead of fixed timeout when reconnecting
- Bug: wrapper hangs if tray port in use
- Bug: bad quotes in java options
- Bug: Randomly: killed sub-process does not close channel to wrapper thus not allowing restart of application
- Change: Log an error if folder listing returns null (in java this may be a network hdd error)
- Change: update ahessian
- Change: updated groovy scripts: logging
- Change: property: wrapper.posix_spawn is now default for all posix OS
- Change: MyFileHandler due to license conflict
- Change: log if a folder listing returns null (java: error accessing a network drive)

NOTE: property: wrapper.posix_spawn is now default for all posix OS

#### yajsw-beta-12.02 June 23rd 2015

- Bug: posix: when wrapper.app.env is set, "java" is not found -> changed execve to execvpe
- New: property: wrapper.posix_spawn : Note: in a next release this property will be set by default and will override wrapper.fork_hack. This implementation is an adaption from nuprocess
- New: property: wrapper.posix_vfork
- Change: reverted to netty 4 lib: there are some projects out there which require java 6.

NOTE: requires java 6 or higher for both wrapper and wrapped application

#### yajsw-beta-12.01 April 28th 2015

- Bug: Quotes in java command line
- Bug: multiple bugs in RuntimeJavaMain
- Change: switched from quartz to yacron4j.
- Change: removed pause from batch files.
- Change: updated groovy and netty libs
- New: Configuration property: wrapper....script.<n>.maxConcInvoc
- New: Support for vfs-dbx (dropbox). thus command files and automatic updates can be done from dropbox.
- New: Configuration property: wrapper.debug.level
- New: Configuration property: wrapper.filter.debug.default
- New: Configuration properties: wrapper.wrapperJar, wrapper.appJar
- New: Configuration property: wrapper.logfile.desc
- Patch: Make the console output fill the window when resized
- Patch: Startup under AIX 7.1 fails due to StringIndexOutOfBoundsException
- Patch: Fix "No such file or directory" error on Mac OSX with Java 1.7
- Patch: Fix getPid() in MacOSXService
- Patch: MacOSX: Make sure that install script works on vanila machines (when no custom services installed yet and directory is not exists)
- Patch: made sure wrapper works on Mac when installed in directory with spaces
- Patch: MacOsxService does not append configuration parameters to the execution command

NOTE: requires java 7 or higher.

#### yajsw-alpha-12.00 September 14th 2014

- Bug: MacOsX - thanks for the patch
- Bug: WrappedRuntimeProcess: sort arguments according to configuration keys
- Change: update to latest jars: commons-collections-3.2.1, commons-configuration-1.10, jna-4.1.0, netty-all-5.0.0.Alpha2-SNAPSHOT, groovy-all-2.3.0-beta-2
- Change: move groovy dependency to lib/extended
- Change: do not add passwords to command line of processes or services
- Change: minor logging changes and other minor changes.
- Change: license change - see documentation
- Change: regex in configuration files: switched from jrexx to dk.brics.automaton. moved jar to lib/extended. functionality is thus optional. NOTE: regex syntax may have changed

#### yajsw-stable-11.11 January 25th 2014

- Bug: on application restart: stream of prev process is open although new process started.
- Bug: 11.10 zip file incorrect version
- Bug: Linux: quotes and spaces in command line paths
- Bug: Bug: WrappedRuntimeProcess: mkdirs if folder for pid file does not exist
- Bug: Minor changes in RuntimeJavaMain
- Bug: missing .processTerminated invocation in WrappedRuntimeProcess
- Bug: NPE when restartGC is set but no no output format is set.
- Change: logging in gobbler
- New: new: Property wrapper.ntservice.process_priority

#### yajsw-stable-11.10 January 3rd 2014

- Bug: Problems with quotes in windows services and if classpath path contains blank

#### yajsw-stable-11.09 December 23rd 2013

- New: Property: wrapper.runtime.pidfile: create a pid file for runtime applications
- New: Property: wrapper.image.javawrapper: wrap a runtime application with a java application, so that (on winodws) we can restart the wrapper process and reconnect to the secondary java wrapper without restarting the native application.
- New: Property wrapper.filter.debug.<trigger key>=true to enable logging of trigger executions
- New: Property: wrapper.debug.comm: enable tcp/ip communication trace with wrapped application
- New: Property: wrapper.ntservice.stop_dependency: Linux stop dependency
- New: source on sourceforge git
- Change: source folder structure
- Change: src folder structure to meet maven requirements. Gradle build scripts adapted accordingly.
- Change: monitor.gc when wrapper.java.monitor.gc message template is not set, but wrapper.java.monitor.gc.restart is set in this case no gc information is logged to output, but gc data is sent to the controller.
- Change: app shutdown script: be invoked only once; avoid triggering of shutdown hook when executing app shutdown script
  assume that app shutdown script will stop the process. if not it will be killed after timeout
- Change: ahessian: (not relevant for yajsw): new: inverse server rpc.
- Bug: Searching for 32-bit JVMs on Windows x64
- Bug: error in mbean objectname when title includes ":"
- Bug: abs path wrapper.java.classpath with * in linux not working
- Bug: Linux service scripts not compatible with chkconfig
- Bug: "Bad substitution" because of not escaped quotes
- Bug: CyclicBufferFileInputStream: probable endless loop
- Bug: Runtime process does not restart when invoked through a trigger

#### yajsw-stable-11.08 October 27th 2013

- Bug: System tray icon on windows 7
- Change: check java 7 also for wrapped application and system tray icon
- Change: notify port issues for system tray icon

#### yajsw-stable-11.07 July 8th 2013

- Bug: checking java 7
- Bug: Memory Leak -> update to netty 3.5.6
- Bug: wrapped applications started concurrently may have the same out_, err_, in_ file names.
- Bug: Linux: Permission denied since 11.4
- Change: forward wrapper java options used in the configuration to the wrapped application
- New: new property: wrapper.ntservice.reduce_signals
- New: new property: wrapper.console.use_interpolated
- New: new property: wrapper.app.status.log.lines

#### yajsw-stable-11.06 April 20 2013

- Bug: Jna tmp folder
- Bug: yajsw prints wrong version
- Bug: netty: do not use sun.misc.Unsafe, this may crash the JVM (we do not need high performance)
- Bug: windows >= vista and java >= 7: check that java.net.preferIPv4Stack=true is set and set it in the windows batch file and service command line
- Bug: possible loop in JVMController.processStarted()
- Change: minor changes in WrappedJavaProcess.getDOption(), WrappedJavaProcess.reconnect()
- New: new property: wrapper.restart.reload_cache
- New: script: vfsCommandCondition.gv

#### yajsw-stable-11.05 March 3rd 2013

- Bug: WrapperJVMMain.WRAPPER_MANAGER.signalStopping() is broken
- Bug: while (true) {wrappedJavaProcess.init(); wrappedJavaProcess.start(); wrappedJavaProcess.stop() } fails to immediatly stop the application.
- Bug: NPE in WrapperManagerImpl
- Bug: [3605341] NoClassDefFoundError: org/rzo/yajsw/srvmgr/server/Ser
- Change: WrappedProcess.start() now resets the restart counter.

#### yajsw-stable-11.04 January 11th 2013

- New: Autoupdate of wrapper and application. see documentation for details
- New: command "-rw": remove and wait until the service has been removed.
- New: property wrapper.logfile.maxdays
- Bug: Installing a multi-config wrapper as daemon
- Bug: AIX, FreeBSD: Undefined symbol "stdout", error installing daemon
- Bug: Mac OS Can't connect to Window
- Bug: wrapper.app.env broken in 11.03
- Bug: wrapper.cleanup_tmp not working as supposed
- Bug: Nested braces / absolute path in wrapper.conf
- Bug: Changed VFS so that it does not use an xml parser
- Bug: shutdown wait timeout negative
- Bug: JarBuilder: Source code discrepancy
- Change: make yajsw less talkative if wrapper.debug is not set.

NOTE: meaning of wrapper.logfile.maxfiles has changed: if logfile rolling is set to DATE, maxfiles refers to the number of files per day not the total. Set maxdays to limit the total number of files.

#### yajsw-stable-11.03 August 26th 2012

- Bug: 11.02 does not work with Java 1.5
- Bug: .svn dir in src\ahessian\org\jboss\netty\handler\ipfilter
- Bug: java.io.IOException: The handle is invalid -> print message instead of stack trace
- Bug: configuration file: error evaluating include directives with env vars.
- Bug: Problems geting stdout with Solaris 10 sparc:
- Bug: Windows: totalRAM in WindowsXPSystemInformation
- Bug: commons logging, default (log4j) does not log to file.
- Bug: Error creating wrapper.app.pre.script
- Bug: Application could not restart due to hacker TCP/IP connection to wrapper controller
- Bug: ahessian may hang similar to java bug in ReentrantLock
- Change: when setting environment vars: use javas System.getEnv()
- Change: Executing jar files: classpath from manifest are added to the classpath of the application.
- New: wrapper.config.script.<n> for user defined scripts within the configuration
- New: decode.gv groovy script for decoding properties within the configuration file
- New: wrapper.script.<n>.<state>: allow multiple scripts for the same state transition. For compatibility wrapper.script.<state> will be interpreted as <n> being set to "". Execution order of the scripts is the alpha-numeric order of <n>
- New: Unset properties by setting ${return null}
- New: \r\n line endings: wrapper.logfile.format=LPNTM\r\n
- New: property wrapper.cleanup_tmp default: true, clean up the tmp folder of err_ ... files at startup. Note: jna cleans up its files at startup.
- New: property wrapper.tray.spawn_process

#### yajsw-stable-11.02 June 10th 2012

- Bug: cmd line config override broken since 10.5
- Bug: Linux: evaluating wrapper.ntservice.additional
- Bug: same script should not execute concurrently
- Bug: WRAPPER log rolling doesn't work
- Bug: rollmode DATE always keeps 10(=wrapper.logfile.maxfiles) files for every date
- Bug: in stop configuration include of main configuration must be absolute.
- Bug: installDaemon.sh not doesn't work
- Bug: totalRAM() hangs
- New: wrapper.script.reload allow update of scripts without restart of wrapper: file changed date is checked before script execution
- New: wrapper.script.encoding, wrapper.log.encoding, wrapper.conf.encoding configuration properties to set the encoding of the script, log and configuration files.
- New: wrapper.console.pipestreams for wrapped java processes: stdout and stderr are streamed to the wrapper instead of t-ing System.out and System.err
- New: log os, yajsw, jvm versions
- Change: upgraded libraries: configuration-1.8, netty-3.5.0Beta1, commons-vfs2-2.0, jna-3.4.1
- Change: Separated Posix and Windows batch files to folders bat and bin !
- Change: calculate totalRAM/freeRAM only when required.
- Change: build: dependency versions defined in main build script

#### yajsw-stable-11.01 April 11th 2012

- Bug: handling ping timeout, in some cases ping timeout may trigger too early, ping timeout may result in stop instead of restart.
- Bug: Duplicate parameters for launched service
- Bug: Linux: app.wrapper.account doesn't with fork_hack
- Bug: Linux: wrapper.fork_hack spawns java with wrong jna lib
- Bug: Linux: randomly process will not restart
- Bug: wrapper.on_exit.1=SHUTDOWN System.exit(1) does not shutdown wrapper
- Bug: exception when stopping wrapper console using CNTRL-C
- Change: value for property wrapper.on_exit: STOP: will cause the application to stop (note: wrapper will stop depending on the wrapper.control property), SHUTDOWN: will stop the application and the wrapper
- Change: java system property jna.tmpdir for setting the tmp folder for jna library files.Please refer to the documentation. wrapper.tmp.path per default set to jna.tmpdir
- Change: per default tmp files are created in <yajsw>/tmp
- Change: per default log files are created in <yajsw>/log
- Change: reworked log file rolling.
- Change: use wrapper.app.parameter for native exes
- Change: commandCondition.gv: commands for start/stop of cyclic thread dump
- Change: ROLLNUM always appended to logfile
- Change: Linux: installDaemon.sh, startDaemon.sh, stopDaemon.sh calls sudo
- New: properties for restarting the application in case of excessive memory or full scan gc usage: wrapper.java.monitor.gc.threshold, wrapper.java.monitor.gc.restart, wrapper.java.monitor.heap.restart
- New: wrapper.logfile.rollmode= DATE

#### yajsw-stable-11.0 Februray 22nd 2012

- Bug: System tray icon causes exception
- Bug: genConfig: does not handle jdk 6 wildcard in classpath: note: yajsw handles wild cards differently !
- Bug: error resolving wild cards in case classpath is "lib/ folder/*"
- Bug: Specifying java command in environment: better logging if command not found.
- Bug: Not equals configuration under Windows and Unix: replaced in unix batches yajsw with wrapper !!
- Bug: When installing a service "remember" required environment variables.
- Change: wrapper.java.customProcName: if this is an absolute path, the given path is used.
- Change: wrapper.java.command must be a file: Windows: if .exe is missing it is automatically added.
- Change: Enhanced logging when determining java command.
- Change: update to jna release 3.4.0
- Change: update to netty release 3.3.1
- Change: update to groovy release 1.8.6
- New: Configuration property wrapper.save_interpolation, default: value true
- New: Configuration properties for windows services: wrapper.ntservice.delayed_autostart, wrapper.ntservice.failure_actions.reset_period, wrapper.ntservice.failure_actions.reboot_msg, wrapper.ntservice.failure_actions.command, wrapper.ntservice.failure_actions.action, wrapper.ntservice.failure_actions.action_delay
- New: property wrapper.ntservice.java.command for running the service wrapper process with a java command different then wrapper.java.command.
- New: property wrapper.ntservice.java.customProcName for copying the java command of the service wrapper process.

NOTE: JBoss 7: runs only with java version prior to 6_17 or higher than 7_0.

#### yajsw-beta-10.12 December 18th 2011

- Bug: Error evaluating ${...} expressions in configuration. Error installing daemon on Linux
- Bug: yajsw-beta-10.11 manifest missing jars. Note: jars moved from lib/core to lib/extended

#### yajsw-beta-10.11 November 27th 2011

- Bug: Jboss 7 startup fails logging initialisation -> do not use java.util.logging in WrapperJVMMain
- Bug: Error resolving ".." and "." in wrapper.java.classpath property
- Bug: Reworked setenv.gv script
- Bug: Error parsing groovy script -> remove index.list from glazedlist jar file.
- Bug: PosixService.stop() fixed timeout. thanks to ddahlmann for the patch
- Bug: maxmemory parameter doesn't work without initmemory
- Change: Added logging in application scripts
- Change: Absolute Minimum Files To Run On Windows -> removed unused jar files, moved jar files to lib/extended
- Change: "Remember" environment variables and system properties when installing a service. Up to now only interpolations were "remembered"
- New: Interpolated config options become "hard coded" -> new configuration property: wrapper.save_interpolated, default value: true
- New: Sample configuration file for oracle odi
- New: Sample configuration file for JBoss 7
- New: Sample script for thread dump on application exit.

#### yajsw-beta-10.10 October 15th 2011

- Bug: genConfig: error parsing jvm options.
- Bug: process may not restart, if application start fails after first restart
- Bug: tray icon: possible port leak if connection fails.
- Bug: tray icon: multicast discovery: may cause message flood if running on multiple computers in a network
- Bug: windows: install service: bad java exe
- Bug: application not started on linux: new property: wrapper.fork_hack
- Bug: Linux: application restarts every 25 days.
- Change: tray icon: windows: close popup menue on mouse click. note: java implements this only with awt, not with swing -> using jna to listen to mouse events outside java. If anyone knows how to implement this for linux, pls let me know.
- Change: split ahessian.jar -> ahessian.jar, hessian4.jar in future these may be extracted to a separate project.
- Change: AbstractWrappedProcess: remove synchronized from stop(), so we can stop a process while it is restarting/starting.
- New: added authentication to sendMail script.
- New: windows: UAC support: WrapperExe: if required, elevate process for service start, stop, install, remove.
- New: windows: support service installation with delayed autostart: wrapper.ntservice.starttype=DELAYED_AUTO_START
- New: tray icon: property wrapper.tray.look_and_feel = <L&F full class name>
- New: tray icon: display virtual and private memory.

#### yajsw-beta-10.9 August 14th 2011

- Bug: Corrupt source file in distribution
- Bug: NPE in ahessian.
- Bug: genConfig: Error parsing -jar with space in jar path.
- Bug: application not restarted on server with high load: Thread race issue
- Bug: Linux: genConfig: NPE.
- Bug: class not found exception in applications which use commons configuration: error in build script
- Bug: error in build script: adjusted dependencies
- Bug: misspelled "relative" in default configuration.
- Bug: RESTART state change trigger may stop the application
- Bug: Error in DateFileHandler.rotateDate() using 24h time
- Bug: monitor gc: could not find minorGCBean
- Bug: Windows: missing WrappedProcess.getCluster()
- New: method WrappedProcess.gc() & gc button in system tray icon console.
- New: method WrappedProcess.dumpHeap(String file) & dump heap button in system tray icon console
- New: method WrapperJVMMain.WRAPPER_MANAGER.signalStopping(long waitHint).Thanks to ddahlmann for the patch.
- New: method WrapperJVMMain.WRAPPER_MANAGER.getProperties().
- New: Windows: method WrapperJVMMain.WRAPPER_MANAGER.getStopReason(). Returns a string indicating why the application is being stopped: "SERVICE", "COMPUTER", "USER", "PING_TIMEOUT", "RESTART", null. This method can be called within a shutdown hook of the application.
- New: Tray Icon: Configuration properties: wrapper.ntservice.autoreport.waitready, wrapper.tray.text.dialog_exit_tray, wrapper.tray.text.dialog_stop, wrapper.tray.text.dialog_restart, wrapper.tray.text.dialog_exit_wrapper, wrapper.tray.commands. Thanks to shacharo for the patch.
- New: Tray Icon: Dialog before stopping wrapper/application/tray controlled by property: wrapper.tray.dialog. Default: true
- New: Tray Icon: Script to set tray icon state color
- New: windows bat: runConsoleW.bat, systemTrayIconW.bat

#### yajsw-beta-10.8 June 26th 2011

- Bug: Linux: daemon is not shut down cleanly
- Bug: wrapper.restart.reload_configuration error on application restart
- Bug: genConfig aborts for "java -jar app.jar"
- New: Windows Vista and higher: handle session 0 for services: wrapper.ntservice.logon_active_session: wait for user to logon and logon the application as this user. wrapper.ntservice.desktop: the name of the desktop for the application. Should be set to WinSta0\\Default.
- New: Configuration property: wrapper.java.monitor.gc, wrapper.java.monitor.gc.intervall to print gc logging to System.err
- New: Configuration property: wrapper.filter.missing.autostop.<n>. Default true. If set to false the trigger will remain active after the trigger has been activated, resulting in continuous trigger monitoring.
- Change: use commons EnvironmentConfiguration to resolve environment variables in configuration -> correct handling of case under windows.
- Change: systemInformation().totalRAM() hangs on some machines -> avoid invocation if configuration does not require RAM calculation
- Change: win64: got Process.getCommandline to work so we do not need to call wmi.
- Change: do not replace "\\" by "/" in environment variables.
- Change: newest jna and groovy libraries.

#### yajsw-beta-10.7 May 21th 2011

- Bug: Error restarting application when using wrapper.stop.conf
- Bug: Windows: wrapper.java.classpath.5=C:/test/yajsw/lib/core/commons/*.jar does not resolve files. Issue was: new File("C:").getAbsolutePath() returns current working dir instead of C:/
- Bug: Default startup timeout is 15 and not 30 as documented
- Bug: Linux: Error in environment variable expansion
- Bug: setting wrapper.app.pre_main.script causes class not found exception
- Bug: wrapper.restart.reload_configuration does not reload the configuration file.
- Bug: Deadlock if WrappedProcess.start() is called while process is restarting.
- New: Configuration Properties wrapper.java.monitor.deadlock, wrapper.java.monitor.heap for details please refer to the configuration documentation.
- New: Windows: wrapper.console.minimized for indicating if the console of the application should be minimized at startup.

#### yajsw-beta-10.6 March 19th 2011

- Bug: property should be wrapper.logfile.format instead of wrapper.logf.format
- Bug: class cast exception when wrapper.java.app.jar is set
- Bug: yajsw exception when using jrockit jvm.

#### yajsw-beta-10.5 March 6th 2011

This release is dedicated to My Blind Tunes, my kids' first android app. Please support them by downloading the app and if you like it by giving them 5 stars rating. Thanks !

- New: logging format: added 'N' option -> display application name.
- New: one wrapper/service multiple processes: java -jar wrapper.jar -c conf/p1.conf conf/p2.conf. Service name is taken from the first configuration.
- New: maxStartup.gv sample script to check that application reports startup within a timeout by printing a "started" messasge on the console.
- New: sample for running eclipse equinox OSGI server with clean shutdown
- New: maxDuration.gv sample script for checking that an application does not run longer than a given duration
- New: gradle build script for yajsw
- Change: Default logging format: LPNTM
- Change: ahessian and srvmgr now in separate jars.
- Change: reworked logging.
- Change: reworked windows Cluster.java and Pdh.java
- Change: reworked FileUtils moved windows specific code to os.ms.win32 package
- Change: newest groovy and netty releases.
- Bug: Windows 2008 handling of user credentials in service
- Bug: groovy script initialization may cause memory leak if process is restarted often
- Bug: Windows: Windows Services manager reports error when service stops
- Bug: Environment variables are not set in application
- Bug: Linux: GenConfig: command line max 1024
- Bug: Remove shutdown hooks to avoid memory leaks
- Bug: In case wrapper.jar.app.jar is set, add the jar to the classpath

#### yajsw-beta-10.4 October 10th 2010

- Bug: Win64: Exception when switching application account -> use newest jna release.
- Bug: Vista: Wait for service to start before showing "service not started"
- Bug: Linux: account group not set
- Bug: Linux: NPE when starting a daemon
- Bug: Thread race condition within the wrapper when restarting an application.
- Bug: Ping timeout on Windows 2008
- New: new configuration property wrapper.app.env.<key>=<value> for setting application environment variables.
- New: Windows: WrapperJVMMain.WRAPPER_MANAGER.reportServiceStartup() and configuration property wrapper.ntservice.autoreport.startup
- New: Tested on Unbutu 10.10 32 and 64 bit, OpenJdk jdk 6
- Change: Windows: configuration file: convert environment keys to lower case.
- Change: newest netty release.
- Change: ahessian changes for android
- Change: wrapper.daemon.run_level_dir set to a script in wrapper.conf.default should handle most linux distros.
- Change: genConfig: do not set user account, since most users will comment this out.
- Known Issue: Linux: wrapper cannot reconnect to java application, wrapper file descriptors not closed on fork of application.

#### yajsw-beta-10.3 July 29th 2010

- Bug: ClasscastException when defining wrapper.filter.trigger.1=, wrapper.filter.script.1=,wrapper.filter.action.1=
- Bug: Defining wrapper.filter.trigger.1=x, wrapper.filter.script.1=, wrapper.filter.trigger.2=x, wrapper.filter.script.2= will execute only one script
- Bug: Windows Services: under high load, on server reboot, or on high value of wrapper.startup.delay, application start may take longer than windows service timeout -> start application in a separate thread and return to windows service controller asap
- Bug: under high load on application restart: restart triggered by multiple state changes -> supress restart if we are already restarting.
- Bug: Linux: service does not start at boot -> exit codes in line with LSB. On the same occasion: changed posix daemon template to conform to LSB
- Bug: [3011626] wrapper.script.STOP doesn't work
- Bug: [3011629] Windows: service shutdown does not wait for application termination.
- Bug: Exception in CyclicBufferFileInputStream if file is closed.
- Bug: In case the same filter trigger fires for consecutive lines, at random the scripts are called with the wrong line.
- Bug: Cannot start application in case main method is inherited from a super class.
- !! Change: [3011629] new configuration properties: wrapper.filter.script.<n>.timeout, wrapper.script.<state>.timeout.
- Change: updated to newest releases of: groovy, jna, quartz, velocity
- Change: System tray icon now uses asyncrhonous hessian over netty and multicast discovery instead of rmi.
- Change: [3004022] Linux: a group is defined by setting wrapper.app.account = <group>\<user> (note: use \\ in configuration file). if no group is configured change to default group of the user.
- !! Change: Posix: the syntax of wrapper.daemon.run_level_dir has changed: wrapper.daemon.run_level_dir per default ist set to <wrapper.daemon.dir>/rcX.d, for Ubuntu this property should be set to /etc/rcX.d.
- !! Change: Posix: the property wrapper.daemon.k_order has been removed. Use wrapper.daemon.update_rc instead.
- !! New: Posix: wrapper.daemon.update_rc property for defining start and stop run levels. Syntax is similar to the update-rc.d command. Default value is the default of that command.
- New: System tray icon console: pause, clear & filter console output.
- New: wrapper.filter.trigger.1=x, wrapper.filter.script.1=, wrapper.filter.trigger.2=x, wrapper.filter.script.2= will execute scripts and actions in alpha-numeric order of trigger key (<n>) thus allowing one to define the order in which scripts are invoked for the same trigger or for the same state change.

#### yajsw-beta-10.2 April 12th 2010

- Bug: genConfig: generating configuration file for "java -jar x.jar"
- Bug: Windows: when server is under high load: cannot stop wrapped process: isRunning() returns true although process is stopped
- Bug: sendMail.gv: add try/catch - thanks to jeff 303 for the patch
- !! Bug: since beta 10.1: Socket.ReuseAddress(true) in wrapper -> multiple wrappers use same port.
- Bug: Mac OS X: genConfig uses posix methods instead of BSD.
- Bug: Mac OS X: socket exception when restarting application. -> keep wrapper server socket bound on restart.
- Changed: removed counter in WrapperManagerImpl. Now waiting until startup timeout.
- Changed: logging in WrapperManagerImpl if wrapper.debug=true
- Changed: extended JSW migration guide to include environment variables
- New: experimental - multicast discovery: service manager client can discover service manager servers and the port on which they are listening.
- New: sample configurations for activemq and jboss
- New: configuration property wrapper.java.debug.port -> sets the java -Xdebug ... property and overrides timeouts to maximum value
- New: configuration property wrapper.jmx.user, wrapper.jmx.password -> sets the credentials for remote access to the wrapper jmx server
- New: included sample security profile file. Fine grained security profile can be generated using src\build\secmanager.
- New: wrapper.app.pre_main.script: script executed before the main method is invoked but after the WrapperManager has been configured and a connection has been established to the wrapper.

####

#### yajsw-beta-10.1 February 20th 2010

- Bug: Windows: JVM crashed when getting process environment
- Bug: ServiceManagerServer: minor bugs.
- Bug: Linux genConfig: NullPointerException getting classpath from environment
- Bug: Linux: Classpath File not found
- Change: Network Install: can use yajsw zip from sourceforge
- Change: Hessian Android-able, first step to service manager client on android -> removed hessian.jar from lib folder

#### yajsw-beta-10.0 February 7th 2010

- Bug: genconfig : error parsing java command line
- Bug: Exception in VFS due to DocumentBuilderFactory.newInstance(), when xerces is available in a jar manifest but not in classpath
- Bug: genConfig: get CLASSPATH from process environment
- Bug: [2931270] Linux daemon only stops after timeout expired
- Bug: Linux: File handlers not closed: handlers and pipes are now closed
- Bug: Linux: ConnectionRefusedException on application restart
- Bug: In case of gobler panic: do not restart if already in restart state.
- Bug: Gobler checks old process -> used process id
- Bug: Linux: classpath wildcard error when path is absolute
- Change: WrappedProcess.stop(): stop process if process is in state RESTART.
- Change: [2910062]move println to logging. Thanks to lokman for the patch.
- New: ServicesManager client + server - prototype windows only
- New: network loading: can load a zip -> does not required webdav. Demo changed to run from yajsw.sourceforge.net

####

#### yajsw-alpha-9.5 November 24th 2010

- Bug: Posix: pid file location
- Bug: genConfig: `-Xms512m -Xmx1024m -XX:MaxPermSize=256m not parsed correctly`
- Bug: MacOsX fork process
- Bug: "operation on non socket" error on windows -> switched from mina to netty, so that we can use OIO instead of NIO. Added HANDLE_FLAG_PROTECT_FROM_CLOSE in WindowsXPProcess.start(). This seems to help, but do not ask me why.
- Bug: Since 9.4: error using commons Configuration in java application. -> split wrapper.jar in 2 jars: wrapper.jar, wrapperApp.jar.
- Bug: Windows: service does not stop when application stops
- Bug: Restart native application
- Bug: Solaris installDaemon
- Bug: [2875747] Posix: wrapper.shutdown.timeout has no effect
- Bug: Posix: systemTrayIcon: start daemon -> daemon may hang: tray icon should not start a sub process but call <link> start
- Bug: Stack overflow in CyclicBufferFilePrintStream in case wrapper is slower than application.
- Bug: [892090] Enabling the tray icon is broken and not well documented
- Change: Posix: added conf/pid/description to daemon script header
- Change: optimized CyclicFileBuffer
- Change: [2897101] Posix: multiple daemon run levels: wrapper.daemon.run_level_dir.<n>, wrapper.daemon.k_order.<n>, wrapper.daemon.s_order.<n> for same <n> a k or s link is created in the given folder.
- Change: newest jna.jar and groovy.jar
- Change: genConfig: rewrite parsing java command line -> tools.jar no longer required.
- Change: restructured src folder
- New: property to check how often a message must appear on the screen within a time period: wrapper.filter.missing.trigger.<n>=poll sucsessfull, 1, 10
- New: property to define a script for calculation of restart delay. wrapper.restart.delay.script. Thus restart delay can be set for example to a linear function, or to check availability of resources before restarting.
- New: property to set a pre application script which is executed within the wrapped application before the main method is executed: wrapper.app.pre.script. This can be used to define network printers and disks before starting a service.
- New: Windows Cluster: New method process.cluster.groupInfo: returns a Map<String, String> with <group-name, current-node-of-group>. One may thus start/stop the application when specific cluster groups change.
- New: Java Web Start support: boot wrapper through java web start
- New: enabled multiple commands: java -jar wrapper.jar -ity <conf> : install, start service and start tray icon.

NOTE:
take care when building wrapper.jar, wrapperApp.jar, wrapperWS.jar:
wrapper.jar should not include the classes: ...yajsw.app.* except for *Impl*.
wrapperApp.jar includes only the classes ...yajsw.app.* + ...yajsw.boot.* except for *Impl*
both have the same manifest.
wrapperWS.jar is built by running the class WebStartBooter with JVM option -verbose:class and using JarBuilder (see src/builder/...). This jar has to be signed. You may use build/sign.bat for this.

####

#### yajsw-alpha-9.4 September 20 2009

- Bug: NPE in WindowsXPProcess.kill
- Bug: windows: user account/password
- Bug: win64 reconnect: getting command line NPE in case server is overloaded
- Bug: MacOsX: launchd typo
- Bug: endless loop in CyclicFileBuffer
- Bug: windows: service description corrupt
- Change: newest mina.jar and jna.jar
- New: loglevel STATUS, but log first 20 lines of app output to see if something went wrong during startup.
- New: unit tests using testNG and Groovy and jmock
- New: groovy scripting in wrapper configuration -> groovy jar now part of core libs
- New: enter passwords through CLI or system tray icon

NOTE: this release is buggy on MacOsX this will be solved in a next release

#### yajsw-alpha-9.3 August 28 2009

- Bug: do not log restart when stopping service
- Bug: Windows: time out on service stop
- Bug: Remote Launch: /x/x could not be copied
- Change: service install: if service is already installed uninstall it first then reinstall it
- Change: System Tray Icon now runs in a separate process. New: Buttons for: stop wrapper, start service, wrapper thread dump
- Change: Remote Launch: allow /**/ pattern in path for recursive folder download
- Change: JVMController: logging changed to info.
- Change: avoid jna multiple loading of same library
- New: cofiguration sample for Apache Derby

#### yajsw-alpha-9.2 August 20 2009

- Bug: wrapper hangs on cntrl-c
- Bug: network launch: webdav does not work -> new configuration-snapshot jar
- Bug: network launch: handling of wild cards reworked. For now supporting: .../*/*.jar only to one level.
- Bug: service wrapper stops before application if condition script is active
- Bug: allow stopper configuration to set its own logging properties
- Bug: system tray hangs on wrapper exit
- Change: jackrabit jar now includes only the webdav client
- New: network launching demo: remote launch tomcat

#### yajsw-alpha-9.1 July 28 2009

- Bug: vfs-snapshot, configuration-snapshot jars built with jdk 1.6 instead of jdk 1.5
- Bug: [2828484] wrapper.java.initmemory.relative

#### yajsw-alpha-9.0 July 26 2009

- New: enable platform dependent includes: include=${<system-prop>}.x.conf
- New: wrapper.restart.reload_configuration
- New: Experimental: support jnlp similar configuration: wrapper.codebase, wrapper.cache, wrapper.cache.local, wrapper.resource.<n>
- New: Support JNLP configuration
- New: support remote configuration file
- New: wrapper.startup.delay
- Bug: Windows: Handle leak on native application restart
- Bug: genConfig throws Exception when java command contains main args
- Bug: ubuntu 9.04-x86 crash in genConfig.sh
- Bug: when wrapper.control = TIGHT, do not stop application on JVMMain.WRAPPER_MANAGER.restart()
- Bug: Windows: service requires long time to stop, since alpha-8.4
- Bug: Windows bat files
- Bug: Posix shell scripts
- Bug: Linux daemon script generation
- Change: genConfig: service name of java application: console title or main class name.

#### yajsw-alpha-8.4 June 1st 2009

- Bug: WrappedProcess.reconnect(pid) does not connect
- Bug: WrappedRuntimeProcess: wrapper.working.dir not set
- Bug: Exception on restart due to ping timeout
- Bug: call to java "-Ddir=c:\" will cause a parse exception in the java launcher
- New: wrapper.control
- New: windows cluster aware: wrapper.windows.cluster.script
- Bug: GenConfig: split jvmArgs so that we can quote them

#### yajsw-alpha-8.3 May 4th 2009

- New: property wrapper.ntservice.additional.<n> for setting service wrapper java options, generally this would be for setting -Xmx
- New: property wrapper.exit_on_main_exception for setting exit code of java application in case the main method throws an exception
- Bug: wrapping groovy scripts.
- New: groovified YAJSW : WrapperBuilder
- New: Sample: nutch recrawl script, nutch solr crawl script
- Bug: Windows: on shutdown of wrapper jna DeleteNativeLibrary exec may hang -> do not spwan this exec.
- Bug: wrapper.java.classpath.<n> = ${var} not expanded
- Bug: replace out.print with log.info

#### yajsw-alpha-8.2 April 16th 2009

- New: Property wrapper.java.dump.override = true : Output thread dump to the wrapper tee stream, thus overriding any streams set with System.setErr()
- Bug: threaddump with backlog appender
- Bug: space in application jar path

#### yajsw-alpha-8.1 April 14th 2009

- Bug: Windows: avoid double quotes in command line when starting a process or installing a service
- Bug: Windows: error in case classpath file has absolute path.
- New: divided <yajsw>/lib directory to sub directories. see here. -> Allow for more compact distributions
- Bug: thread dump: use "original" stream to bypass logger streams.

#### yajsw-alpha-8.0 April 11th 2009

- NEW: configuration property wrapper.script.<state> wrapper.script.<state> .args
- NEW : State SHUTDOWN
- NEW: configuration property wrapper.port, wrapper.port.min, wrapper.port.max
- Bug: Posix, Windows: handling of spaces in path
- NEW: support for FreeBSD 32 and 64
- Change: DEFAULT_EXIT_ON_MAIN_TERMINATE = -1 for compatibility with JSW
- NEW: Linux, Solaris: System Tray Console: display threads, cpu, memory, handles (handles == number of file descriptors)
- NEW: commandCondition.gv script
- NEW: runScript.bat to test scripts
- Change: Install Service: "remember" the lookup variables (eg ${..}) so we run the service with the same environment variables as those used when the service was installed -> when an env var is changed the service has to be reinstalled.
- Change: wrapper.java.command: first check if this is relative to wrapper.jar parent folder (eg wrapper home), thus defining wrapper.java.command=jre/bin/java will resolve to <yajsw>/jre/bin/java if this file exists

#### yajsw-alpha-7.1 March 22nd 2009

- NOTE: WrapperExe now sets its working dir -> may require change in configuration if files are relative (example: use scripts/sendMail.gv instead of ../scripts/sendMail.gv)
- Bug: Linux: + MacOsX: missing templates folder + templates folder not used
- Bug: WindowsXPProcess: Exception while reading console title under SYSTEM user
- Bug: wrong state of WrappedProcess in case process does not start.
- Tested: Linux 64 bit (Suse 11.1 64 bit) :OK
- Tested: FreeBSD 32 bit (FreeBSD 7.1) : OK (note: does not yet run on FreeBSD 64 bit)
- Bug: missing src folder
- Change: check arguments in groovy scripts
- Bug: parse trigger configuration properties.
- Change: package refactoring for BSD + MacOsX
- Tested: Oracle/JRockit JVM on Win32 : OK
- Change: add log to groovy scripts - see example in sendMail.gv
- Change: log groovy script exceptions, so we may have these on file.
- Change: wrapper working directory: executing runConsole or startService or startDaemon should work with the same configuration even if files are relative -> set working directory of WrapperExe and WrapperMainService* to the wrapper home directory (the location of wrapper.jar)
- New: Alpha Release for solaris. Tested runConsole with sol-10-u6-ga1-x86. Note: could not get stdout/in/err -> workaround using default file numbers 0, 1, 2. genConfig + Daemon not yet tested.

#### yajsw-alpha-7.0 Feb 28th 2009

- New: Initial Mac OS X support, Note: wrapper runs only with JDK 1.5 (32 bit) Application may run on JDK 1.6 (64 bit), still buggy, no system tray support
- Bug: Linux: daemon.vm
- New: Mac OS X: wrapper.launchd.dir, wrapper.launchd.template properties
- Change: daemon.vm template and launchd.plist.vm now in directory templates.
- Bug: Windows: Handle, thread, file, memory leak when restarting process
- New: Extended System Tray to include application and wrapper status, application resources (currently only winodws), writing to System.in ( currently only standard ascii characters)
- New: full win64 support (tested on Windows 2003 x64). Wrapper and Application may run on 64 bit jdk.
- Bug: TeeInputStream.
- Change: switched to MINA 2.0.0-M4 -> use Timer instead of KeepAliveFilter
- Bug: Thread leak
- Change: reworked linux scripts
- Bug: class loading : slf4j issue
- Bug: Linux: System.out hangs
- Change: wrapper.console.visible: default: false
- Change: using Cycler (Thread.sleep) instead of Timer, so we are not influenced by system time changes.
- Change: pinger Thread with high priority, so we do not miss pings.
- Bug: short living applications state remains running

#### yajsw-alpha-6.0 January 5th, 2009

- New: property wrapper.groovy: wrap groovy scripts
- New: property wrapper.stop.conf : stop a wrapped application by invoking another application
- Change: genConfig: paths in generated configuration are now realtive to workingDir.
- New: script for sending SNMP traps
- New: Linux: properties wrapper.daemon.run_level_dir, wrapper.daemon.k_order, wrapper.daemon.s_order. wrapper -i now installs symbolic links to daemon script
- New: property wrapper.ntservice.starttype, wrapper.ntservice.account, wrapper.ntservice.password
- Change: Linux: default pid dir: /var/run
- New: property wrapper.app.account and wrapper.app.password Is used for Linux and Windows. It is used for nt services, posix daemons, and console applications.
- Bug: file conf/daemon.gv missing in alpha-5.1
- New: property wrapper.tray, wrapper.tray.icon : enable system tray icon.
- New: script for displaying tray messages
- New: properties wrapper.java.maxmemory, wrapper.java.maxmemory.relative, wrapper.java.initialmemory, wrapper.java.initialmemory.relative
- Bug: Linux: spaces in command line calling application removed.
- New: genConfig: get application account
- Change: Log file: directory is created if it does not exist

#### yajsw-alpha-5.1 December 22, 2008

- Bug: genConfig.bat and genConfig.sh

#### yajsw-alpha-5.0 December 21, 2008

- New: groovy scripts can now be passed arguments from the wrapper configuration properties
- New: condition scripts for controlling process execution through conditions such as time interval, file existence, mail receiption etc.
- New: groovy scripts maintain their bindings between invocations
- New: -q, -qs options for service status query
- Linux: configuration generator now available for Linux
- Linux: java -jar wrapper.jar options -i (install) -t (start) -s(stop) -q/-qs (query) are now available for Linux and Windows.

- -i creates a script for starting a wrapper daemon and copies the file to /etc/init.d
- -t starts the daemon
- -s stops the daemon
- -u removes the script from the daemon dir.

- New: STATE_ABORT: in case the process could not be started after max_failed_invocations.

#### yajsw-alpha-4.0 November 16 2008

- New: Configuration Generator, Given the pid of a running process, generate a configuration file to wrap the process (currently available only for win32)
- New: JMX support
- Resolved bug with wrapper.tmp.path

#### yajsw-alpha-3.1 November 5 2008

- Resolved bug with wrapper.timer.cron

#### yajsw-alpha-3.0 November 2 2008

- repackaged source code, renamed some classes. NOTE: org.rzo.yajsw.WrapperMain -> org.rzo.yajsw.app.WrapperJVMMain
- added support for wrapping native exes. Restriction: cannot reconnect to native exes.
- added support for Linux. The following functions are not yet available for Linux: visible console, automatic install of daemons
- This version is stable on Windows and is being used in production on win32 and win64

#### yajsw-alpha-2.0 August 20 2008

- Regular Expressions Filters
- Groovy and Shell Script actions
- Sample Groovy script for sending emails
- Job Scheduling with Quartz
- Windows services now bug free
- -Xrs is inherited to sub-processes if running as service
- Cpu affinity and process priority
- Automatic JVM selection
- Separate class loading for YAJSW libraries and for JVM Application

#### yajsw-alpha-1.0 April 14 2008

Initial release
This Alpha 1.0 Release is a proof of concept implementing only the main functions and configuration properties.