+
+# Configure the log attached to event emails.
+#wrapper.event.default.email.attach_log=TRUE
+#wrapper.event.default.email.maillog.lines=50
+#wrapper.event.default.email.maillog.format=LPTM
+#wrapper.event.default.email.maillog.loglevel=INFO
+
+# Enable specific event emails.
+#wrapper.event.wrapper_start.email=TRUE
+#wrapper.event.jvm_prelaunch.email=TRUE
+#wrapper.event.jvm_start.email=TRUE
+#wrapper.event.jvm_started.email=TRUE
+#wrapper.event.jvm_deadlock.email=TRUE
+#wrapper.event.jvm_stop.email=TRUE
+#wrapper.event.jvm_stopped.email=TRUE
+#wrapper.event.jvm_restart.email=TRUE
+#wrapper.event.jvm_failed_invocation.email=TRUE
+#wrapper.event.jvm_max_failed_invocations.email=TRUE
+#wrapper.event.jvm_kill.email=TRUE
+#wrapper.event.jvm_killed.email=TRUE
+#wrapper.event.jvm_unexpected_exit.email=TRUE
+#wrapper.event.wrapper_stop.email=TRUE
+
+# Specify custom mail content
+wrapper.event.jvm_restart.email.body=The JVM was restarted.\n\nPlease check on its status.\n
+
+#********************************************************************
+# Wrapper Windows NT/2000/XP Service Properties
+#********************************************************************
+# WARNING - Do not modify any of these properties when an application
+# using this configuration file has been installed as a service.
+# Please uninstall the service before modifying this section. The
+# service can then be reinstalled.
+
+# Name of the service
+wrapper.name=Raplaxxxxxxxx
+
+# Display name of the service
+wrapper.displayname=Rapla Server xxxxxxxx
+
+# Description of the service
+wrapper.description=Rapla resource-management server xxxxxxxx
+
+# Service dependencies. Add dependencies as needed starting from 1
+wrapper.ntservice.dependency.1=
+
+# Mode in which the service is installed. AUTO_START, DELAY_START or DEMAND_START
+wrapper.ntservice.starttype=AUTO_START
+
+# Allow the service to interact with the desktop.
+wrapper.ntservice.interactive=false
+
diff --git a/Rapla/service/doc/index.html b/Rapla/service/doc/index.html
new file mode 100644
index 0000000..35078dc
--- /dev/null
+++ b/Rapla/service/doc/index.html
@@ -0,0 +1,12 @@
+
+
+ Java Service Wrapper Documentation
+
+
+ Complete documentation can be found online:
+ http://wrapper.tanukisoftware.org
+
+ Java docs are available online as well:
+ http://wrapper.tanukisoftware.org/jdoc/index.html
+
+
diff --git a/Rapla/service/doc/readme.txt b/Rapla/service/doc/readme.txt
new file mode 100644
index 0000000..6332f32
--- /dev/null
+++ b/Rapla/service/doc/readme.txt
@@ -0,0 +1,7 @@
+Java Service Wrapper
+
+Complete documentation can be found online:
+http://wrapper.tanukisoftware.org
+
+Java docs are available online as well:
+http://wrapper.tanukisoftware.org/jdoc/index.html
diff --git a/Rapla/service/doc/revisions.txt b/Rapla/service/doc/revisions.txt
new file mode 100644
index 0000000..3b8dcea
--- /dev/null
+++ b/Rapla/service/doc/revisions.txt
@@ -0,0 +1,2511 @@
+Java Service Wrapper Revision History.
+--------------------------------------
+
+3.5.6
+* Fix a problem on UNIX platforms where the log file path was being calculated
+ incorrectly if an absolute path was specified for wrapper.logfile, and the
+ file did not already exist. A warning message was being displayed but the
+ Wrapper would continue using the default log file. There was a problem in
+ the message displayed which caused a crash on some platforms include Mac OSX.
+ Introduced in version 3.5.5.
+* Fix a problem on Windows platforms where the Wrapper would crash if it could
+ not access the directory of the configured wrapper.logfile.
+ Introduced in version 3.5.5. Bug #3087424.
+* Improve the way warnings are logged when there are problems writing to the
+ configured wrapper.logfile so that the message will now be logged into the
+ log file that the Wrapper ends up using in case it is successful in falling
+ back to a default log file.
+* Fix a problem on Windows platforms where wrapper.java.additional.
+ properties that were specified on the command line, and contained spaces,
+ were not being requoted correctly when building up the Java command line.
+ Introduced in version 3.3.6.
+* Fix a problem where the warning message logged for invalid values of the
+ wrapper.java.additional. property, contained corrupted text. Introduced
+ in version 3.3.6.
+* Fix a problem on UNIX platforms where an invalid value for the
+ wrapper.java.additional. property was correctly being reported and then
+ skipped, but the resulting command line to launch the JVM had a blank value
+ that was causing the JVM to fail to launch. An invalid value is any value
+ that does not begin with a "-" character.
+* Add a new WRAPPER_INIT_DIR environment variable which can be used to
+ reference the working directory from which the Wrapper was launched. This is
+ needed for certain applications because the Wrapper always changes its
+ working directory to the location of the Wrapper binary.
+* Modify the UNIX shell script so it no longer changes the current working dir
+ to the location of the script. This is no longer needed because the Wrapper
+ has been changing the working directory to its own location since version
+ 3.2.0.
+* Add a new wrapper.request_thread_dump_on_failed_jvm_exit.delay property to
+ control how long the Wrapper will wait after doing a thread dump before
+ killing the Java process. This delay has always been hardcoded to 5 seconds.
+* Clean up the text of several warning messages about invalid configuration
+ values to make them more consistent.
+* (Professional) Add a new wrapper.jvm_kill.delay property which makes it
+ possible to control the amount of time to allow between the jvm_kill event
+ being fired and the JVM actually being killed. Useful if an external event
+ command is fired that needs to do something with the JVM process first.
+* (Professional) Fix a problem where the output of the
+ wrapper.event..message and wrapper.event..loglevel
+ properties were not displaying correctly on UNIX platforms.
+* (Professional) Fix a problem on UNIX platforms where the Java side of the
+ Wrapper was not being correctly notified if a large number of child
+ processes that had been launched with WrapperManager.exec, exited at the
+ same instant. Some of them were going into a defunct state until the next
+ child exited, at which point they would be cleaned up. This was mainly an
+ issue on JVM shutdown if the user code was calling WrapperProcess.waitFor()
+ as part of its shutdown process. WaitFor calls at any point were getting
+ stuck and would remain so until another child exited. As part of this fix,
+ there were also several changes to the Windows implementation to bring the
+ two code bases into sync.
+* Fix a problem on Windows when multiple threads were creating Childobjects,
+ Handles could have been unintendedly get inherited by another Child Process,
+ causing problems on reading/writing to the Input/Output/Errorstream.
+* Fix a problem on solaris and AIX when errno calls were not thread safe due
+ to a compiler switch.
+* Fix a problem where debug level warning output while loading the Wrapper
+ configuration was being displayed on startup. This could be fixed because
+ the Wrapper actually loads the configuration twice, and such output is now
+ only logged on the second call.
+* (Standard, Professional) Remove the undocumented ability to define a single
+ file share mapping without the index. This would cause confusion if used,
+ and complicated the code.
+* (Standard, Professional) Fix a byte alignment problem caused by a bad
+ compiler directive on Windows platforms. It was known to cause a crash when
+ defining mapped drives on 64-bit Windows versions. The problem was in the
+ source since version 3.3.7, but is not known to cause any other issues.
+* (Standard, Professional) Modify the messages displayed when network shares
+ are mapped or fail for some reason. Also add messages about them being
+ unmapped on shutdown.
+* On some Windows platforms, a failure to delete a rolled log file was not
+ being reported correctly. The system function to delete a file was
+ returning success even if it had failed. We now double check.
+* Fix a deadlock in the code that is used to send data to the Java process.
+ It was only possible if debug level output was enabled and log file rolling
+ was enabled. Introduced in 3.3.7.
+* Fix a problem where the WrapperManager.getWrapperLogFile() was not returning
+ the accurate log file name until the first time the log file was rolled after
+ each JVM invocation. This was only noticeable if the wrapper.logfile
+ contained either the "ROLLNUM" or "YYYYMMDD" tokens.
+* Correct an error message that was displayed on UNIX platforms when the
+ configured java binary could not be accessed. The message referenced a
+ buffer whose contents were undefined on some platforms.
+
+3.5.5
+* Add new wrapper.filter.trigger. action, "SUCCESS". If this gets triggered
+ then the Wrapper will treat the current JVM invocation as a success, and
+ reset its internal failed invocation counter. This is useful for
+ applications that need to be restarted frequently.
+* (Standard, Professional) Ignore Juniper Network Connect hostIds as they
+ change on each reboot and are thus unreliable as hostIds.
+* Added a PASS_THROUGH setting to the UNIX shell script and Windows
+ AppCommand.bat.in files which tells them to pass any extra arguments directly
+ on to the JVM when it is launched.
+* Added a FIXED_COMMAND setting to the UNIX shell script and Windows
+ AppCommand.bat.in files to make it possible to run either without specifying
+ a command. Mainly useful in conjunction with PASS_THROUGH.
+* (Standard, Professional) Added a --passthrough option to the exe
+ customization, in order to tell the wrapper to precede the whole command line
+ through to the application in the JVM.
+* (Standard, Professional) Added a --conf option to change the default conf
+ file, the wrapper tries opening when no conf file was explicitly specified.
+* Added wrapper.ntservice.account.prompt. If set to TRUE the wrapper will
+ prompt for all account details (domain, account name, password).
+* Fix a minor issue in #include file declarations where a leading space was not
+ required.
+* Add a new #include.required directive which works the same as the #include
+ directive except that it will output an error and prevent the loading of the
+ configuration if the included file does not exist. Normally include files
+ are optional by design.
+* Modify the error messages displayed when configuration files fail to load so
+ they now provide more information about where specifically the problem was.
+* Disabled the forced reloading of the SYSTEM (and if set to a specific
+ account, the user) registry before launching the Wrapper as a service on
+ Windows. This was done originally in Windows NT because changes to the
+ configured environment were not being reflected when running a service unless
+ the system was first rebooted. Microsoft appears to have solved this problem
+ in Windows XP and 2003. In Windows 7 and 2008, this was actually causing a
+ problem because the SYSTEM registry contains a setting "USERNAME=SYSTEM" by
+ default that was overwriting the USERNAME when run as specific user. It was
+ decided to disable this registry loading for Windows versions starting with
+ XP and 2003. Of the supported versions, only 2000 is now reloading its
+ environment. The only difference from version 3.5.4 and earlier that could
+ be found is that when running as the SYSTEM user on Windows 7 or 2008, the
+ USERNAME environment variable will now be set to the host name followed by a
+ dollar sign rather than SYSTEM. This is actually how all other services
+ work. But just in case this is a problem, it can we resolved by adding a
+ "set.USERNAME=SYSTEM" property into the Wrapper configuration file.
+ Bug #3061490.
+* (Standard, Professional) Fix a problem for Solaris and HP-UX where the socket
+ timeout properties for the email notifications were ignored.
+* (Standard, Professional) Added wrapper.ntservice.recovery. properties to
+ define system level actions in the event that the Wrapper process itself
+ has a failure.
+* (Standard, Professional) Fixed a problem in the WrapperProcess.waitFor() and
+ WrapperProcess.exitValue() call, where it would fail to return when called
+ after the Wrapper had initiated the shutdown of the JVM.
+* (Standard, Professional) Add WrapperProcessConfig.setSoftShutdownTimeout(int)
+ method to tell the Wrapper how long to wait after nicely asking the child
+ process to shutdown cleanly when calling WrapperProcess.destroy(). Once the
+ timeout has ellapsed, the child process will be forcibly terminated. This
+ timeout had been hard coded to 5 seconds in earlier versions.
+* Add more detailed usage output to the UNIX shell script.
+* Make it possible to 'pause' and 'resume' the JVM from the UNIX shell and
+ Windows batch scripts.
+* (Professional) Fix a minor memory memory leak while initializing timers.
+* Fix a memory leak which could happen if there were any invalid strings in
+ localization resources.
+* (Professional) Fix a bug where the wrapper.event..command.argv.
+ properties were not correctly parsed on Windows. This issue was introduced
+ in version 3.5.0.
+* (Professional) Add the ability to define wrapper.event.default.command.argv.
+ properties that will be used if the event specific specific commands are not
+ defined. Mainly useful for testing.
+* Fix a problem occuring when the wrapper failed to roll the log file causing
+ to write to the wrapper's default log (wrapper.log) file rather than
+ continuing to write to the current logfile.
+* (Standard, Professional) Fix a put problem in the internal hash map
+ implemenation used for localization where values could be lost. This was
+ not a visible issue because of the data used.
+* Add new wrapper.filter.allow_wildcards. property and make it possible to
+ specify wrapper.filter.trigger. patterns which contain '*' and '?'
+ wildcards.
+* Add a commented alternative in the default OutOfMemoryError filter
+ configuration to make it more specific to only trigger on uncaught exception
+ stack traces. This is to avoid output like that from the
+ -XX:+PrintClassHistogram JVM argument from causing the JVM to restart with a
+ false out of memory warning. See the wrapper.filter.trigger.
+ OutOfMemoryError example for more details.
+* Localize the default filter message.
+* Added ISO-8859-* encoding support and a few other encodings.
+* (Standard, Professional) Fix a problem on UNIX versions, parsing dates in
+ license keys that was introduced in version 3.5.0. Windows verisons did not
+ have this problem. All license upgrade terms and lease terms which contained
+ "08" or "09" as either a month or day were being parsed incorrectly. This
+ was leading the Wrapper to interpret those date components as "00". If the
+ number was the date, then this would cause the date to be set to the last day
+ of the previous month. If it was the month however, it would cause the date
+ to be set to December of the previous year. For example "2010-08-20" was
+ being interpreted as "2009-12-20", and "2010-10-08" was being interpreted as
+ "2009-09-30". This would have prevented some licenses from being able to
+ start because the upgrade terms were in effect prior to the Wrapper's release
+ date. Some trial licenses could also have stopped early because their lease
+ term end was earlier that it should may have been. For normal licenses, his
+ will have no effect on installations once they are up and running because
+ they do not use the lease term.
+* Fix a problem on Windows when a service received several service control
+ codes in rapid succession. Since version 3.5.1, the Wrapper was only to
+ process a single control code in each cycle of its main loop. This was
+ resulting in messages like "Previous control code (4) was still in queue,
+ overwriting with (4)." in the logs. The Wrapper can now handle up to 25
+ control codes per 10ms cycle.
+* Fix a problem where it was not possible to send passthrough arguments to the
+ JVM when installing or updating a Windows Service. Passthrough using the
+ "--" argument was added in 3.5.2.
+* Add a new wrapper.pause_on_startup property which makes it possible to tell
+ the Wrapper to go directly into a paused state without ever launching a JVM.
+* Fix a problem where the STOP command set in a command file was being ignored
+ if the Wrapper was currently in a paused state.
+* Make it possible to specify DEFAULT for the configuration file encoding.
+ This will cause the file to be loaded using the default system encoding. We
+ added this by request, but recommend using a portable encoding like UTF-8 to
+ ensure that the configuration file will load correctly on all systems.
+* Added a WRAPPER_LANG environment variable which makes it possible to reference
+ the current locale language code in the configuration file. One common use
+ is to do localization using inclues.
+ (e.g. #include ../conf/wrapper-%WRAPPER_LANG%.conf)
+
+3.5.4
+* Add optional support for custom public static methods in the
+ WrapperSimpleApp and WrapperStartStopApp helper classes. Feature Request
+ #2812276.
+* Add a new special configuration file directive "#properties.debug" which
+ enables debug output about the properties as they are loaded by the
+ configuration file. This can be useful to tell if and why certain properties
+ are being overwritten. Feature Request #3042959.
+* Fix a minor problem where the "#include.debug" configuration file directive
+ was sticky so it would be enabled when the configuration file was reloaded
+ even if the reloaded configuration file no longer had the directive set.
+ This was only an issue if the wrapper.restart.reload_configuration property
+ was set.
+* Messages about missing included configuration files that were output when the
+ #include.debug" configuration file directive was active were being logged at
+ the ERROR level even though they were not problems.
+* Fix a minor problem where the WRAPPER_JAVA_HOME environment variable was not
+ correctly being set to final when it was set internally by Wrapper. This
+ could lead to unexected results if the user overwrote it later in their
+ configuration file.
+* Fix a problem on AIX and z/OS, when running the Wrapper without any
+ arguments. The Wrapper was attempting to use the default wrapper.conf file
+ but the check for the file was failing causing the Wrapper to continue even
+ though the file did not exist. This caused a confusing error message to be
+ displayed, but was otherwise harmless.
+* Clean up some debug code associated with sleeping where log output was being
+ queued when it did not need to be.
+* (Standard, Professional) Consolidate some redundant code associated with
+ waiting for interfaces on startup.
+* (Professional) Fix a problem in the email feature of the Wrapper where a
+ subject of more than 27 bytes in length when encoded as UTF-8. This was
+ caused by a miscalculation in the Base64 conversion of the subject.
+* (Professional) Fix a problem when the WrapperManager.exec method which takes
+ an array of command elements was called on Windows. The command elements
+ need to be combined into a single command line, but if any of the elements
+ contained spaces, the resulting command line was not being correctly quoted.
+* Add a new wrapper.java.command.resolve property to control whether or not the
+ Wrapper tries to resolve any symbolic links in the Java command, specified
+ with the wrapper.java.command property. Historically, it has always done so,
+ but some jvm started applications like run-java-tool on Gentoo will fail if
+ it is run directly as they have a check to make sure it is launched via a
+ symbolic link.
+* Fix a problem on Windows versions where a path to the Wrapper binary,
+ including the Wrapper binary itself, which was more than 100 characters would
+ cause a buffer overflow when installing the service. A second similar
+ problem would happen if the same path was more than 128 characters, whenever
+ the Wrapper was launched. These were both very old issues and only happened
+ on 32-bit versions of Windows XP and 2000. Microsoft documentation says that
+ the issue should also exist on the 64-bit versions, but we were unable to
+ reproduce it there. Newer versions of Windows are all fine.
+
+3.5.3
+* Fix a typo in the UNIX shell scripts that was causing "command not found"
+ errors to be shown when running the Community Edition.
+* Add new wrapper.console.fatal_to_stderr, wrapper.console.error_to_stderr,
+ and wrapper.console.warn_to_stderr properties to control whether the output
+ at the FATAL, ERROR, and WARN log levels go to stdout or stderr. In the past
+ they all went to stdout. With this change, FATAL and ERROR log levels now
+ default to stderr output.
+* Fix a problem where the shell script would produce unexpected results if the
+ Standard or Professional Edition shell scripts were used with the Community
+ Edition Wrapper. Fix was in Wrapper binary by changing the default ERROR and
+ FATAL log level console output to stderr rather than stdout.
+* (Standard, Professional) Fix a problem where script error message output was
+ not being shown if the wrapper.conf file specified in the script did not
+ exist.
+* Fix a problem where errors from failed forks on Windows were always being
+ flushed immediately rather than honoring the value of the
+ wrapper.console.flush property.
+* Fix a problem on Windows 2000 systems where a new feature added in 3.5.2 was
+ preventing the Wrapper from running because the API used was too new.
+* Change the font of the wrapperw dialog in order to have prettier output of
+ multibyte characters.
+* Add a line feed after the first message when starting the Wrapper from the
+ UNIX script.
+* Add a note in the debug output so the configured java temporary directory is
+ always logged to help with debugging.
+* Add a workaround for a bug in both Sun and IBM JVMs which cause an invalid
+ exception to be thrown when a socket is already bound. It had been causing
+ the Wrapper to report: "Unexpected exception opening backend socket:
+ java.net.SocketException: Unrecognized Windows Sockets error: 0: JVM_Bind":
+ http://bugs.sun.com/view_bug.do?bug_id=6965962
+* Add the encoding of the subjects in the event mails to be always UTF-8
+ Base-64 encoded.
+* Add new wrapper.event..email.smtp.auth.type,
+ wrapper.event..email.smtp.auth.userid, and
+ wrapper.event..email.smtp.auth.password properties which make it possible
+ to do LOGIN and PLAIN connection authorizations. Currently SSL (STARTTLS)
+ connections to the mail are server are not yet supported.
+* Fix a buffer overflow while loading the configuration file on Mac OSX
+ versions. Introduced in 3.5.0.
+* Fix a several memory leaks on UNIX versions that were added in 3.5.0, as well
+ as a few others on all platforms, some from quite early versions.
+* Fix some places where a resolved path of exactly MAX_PATH characters in
+ length could have resulted in a buffer overflow.
+* (Standard, Professional) Fix a memory leak disposing language packs.
+* Go through and increase the consistency of text strings.
+* Fix a problem on HP-UX where the Wrapper was logging a warning that the
+ configured JVM was invalid if it was a PA-RISC 2.0 binary. Bug #3037317.
+* Fix a problem where the WrapperManager was failing to trap and hide errors
+ initializing the MBean server on some JVMs that did not support it.
+
+3.5.2
+* Added new command line argument "--" . All arguments following will be
+ preceded and passed to the java application. The arguments are attached after
+ the arguments used in wrapper.app.parameter.
+* Fixed a problem in the shell script which could lead to report failed starts
+ of a daemon incorrectly on the command line.
+* Implemented some small logic in the wrapper script which tries to change the
+ permissions of the wrapper binary to executable if it wasn't set.
+* The Demo Application had problems locating the right conf file on Unix
+ platforms and failed to launch the internal demonstration wrapper process.
+* Improved the error message logged if the Windows version of the Wrapper exits
+ with an internal error. It now logs more information about the internal
+ state of the Wrapper as well as saving a mini dump file which can be sent to
+ support to make it easier to diagnose the cause of the problem.
+* Fix a problem where the names and displayNames in WrapperWin32Service
+ instances were corrupted. List affected the WrapperManager.listServices()
+ and WrapperManager.sendServiceControlCode() methods. There was a similar
+ problem with the WrapperManger.getUser(), WrapperManager.getInteractiveUser()
+ and WrapperManager.setConsoleTitle() methods. Introduced in 3.5.0.
+* Fix a problem on Windows where wildcards would sometimes fail to be resolved
+ or cause the Wrapper to crash. This affected the generation of classpaths
+ and logfile rolling. Introduced in 3.5.0.
+* Fix a problem on UNIX platforms where some error messages related to a failed
+ fork to launch the JVM were not being logged correctly. Introduced in 3.5.0.
+* Fix a problem where invalid characters in configuration files that did not
+ declare an encoding could cause the Wrapper to crash on startup. This could
+ be issue for users upgrading from versions prior to 3.5.0 as older versions
+ did not do any character set translations and would not have had a problem.
+* Fix a problem in code to check whether a drive was a mapped network drive or
+ not was failing. This would sometimes lead to a false warning that the drive
+ could not be identified. Introduced in 3.5.0.
+
+3.5.1
+* Start using a system function to determine whether or not a character in the
+ configuration file is a control character or not. This way it works on
+ non-ASCII platforms.
+* (Standard, Professional) Fix a crash on Windows platforms caused by freeing
+ up unallocated memory while loading the Wrapper's configuration.
+* Add debug output describing the system and current code pages on Windows
+ versions to help understand encoding and mojibake issues.
+* Add a Japanese localized src/conf/wrapper.conf.in_ja template configuration
+ file to assist Japanese users.
+* Fix an potential deadlock on UNIX platforms if the JVM exits while logging
+ is taking place and the wrapper.debug or undocumented wrapper.state_output
+ properties were set to TRUE.
+* Fix a problem where a failed JVM invocation that happened immediately after
+ being launched would cause the Wrapper to immediately give up and shutdown.
+ This should not have been possible with normal JVM configurations, but was
+ turned up in testing.
+* Fix a problem where some startup output of the tick timer debug output was
+ corrupted. This was only an issue if the wrapper.tick_output property was
+ set.
+* (Standard, Professional) Rework the way text is localized so that mallocs
+ are all handled on initialization. 3.5.0 had problems with occassional
+ freezes and crashes caused by mallocs being made within signal handlers.
+ The problems were rare unless debug output was enabled.
+* Greatly simplify signal handlers on all platforms so they now do as little
+ as possible, actions are now queued and then processed by the main thread.
+* (Standard, Professional) Fix a problem where the hostname in the
+ wrapper.syslog.remote.host couldn't resolve a hostname (IP Address was
+ working).
+* (Standard, Professional) Add debug output on Windows versions to help debug
+ localization and code page issues.
+* (Standard, Professional) Fix a localization problem on Windows where the
+ Wrapper was using the system-wide language rather than that of the current
+ process. This was resulting in mojibake if the Wrapper was launched in a
+ new console if that new console did not support the required code page.
+ This was only an issue if the user had changed the active code page from the
+ default for their Windows desktop.
+* Fix a problem on Windows platforms where the JVM child output was being
+ logged with an extra line feed in some cases.
+* Fix a problem running the DemoApp from some Network shares on Windows.
+* Add a new WrapperManager.isWindows() and WrapperManager.isMacOSX() methods to
+ make it easy to write such conditional code as both platforms can require non
+ standard code.
+* (Standard, Professional) Make the GetHostId.bat file more robust so it can be
+ executed using a relative reference from the command line. It also now
+ supports Delta-pack style Wrapper binary naming and falling back to use which
+ binaries are available.
+* Change the timing of when the wrapper.working.dir is set so that any error
+ messages generated while loading the configuration will be logged to the
+ correct log file. It is also needed for Standard and Professional Editions
+ to ensure that the language pack is loaded from the correct location so that
+ all such messages will be in the correct locale.
+* Fix a problem on UNIX platforms where the status command was failing with an
+ error due to the localization feature added in 3.5.0.
+
+3.5.0
+* (Standard) Added the ability to detect and react to thread dead locks in
+ the JVM. Requires at Java 1.5. Added wrapper.check.deadlock,
+ wrapper.check.deadlock.interval, wrapper.check.deadlock.action, and
+ wrapper.check.deadlock.output properties to configure the detection.
+* (Professional) Add a new jvm_deadlock event which is fired in response to
+ a thread deadlock being detected within the JVM.
+* Fix a problem where the intervals like wrapper.ping.interval were all
+ rounding down causing them to function at a rate one second shorter than
+ configured.
+* Fix a minor memory leak calling WrapperManager.exec.
+* Add a new wrapper.filter.message. property which can be used to control
+ the message which is logged when a wrapper.filter.trigger. is matched.
+* Rework the way actions are fired for the wrapper.filter..action and
+ wrapper.timer..action properties so there is no longer any duplicate
+ code.
+* Modify the way the wrapper.filter..action and wrapper.timer..action
+ properties work so it is now possible to specify a list of actions which will
+ happen in the order specified. This makes it possible to do a thread dump
+ and then restart in response to an error.
+* Add the DEBUG action to the wrapper.filter..action property for
+ consistency.
+* (Professional) Implement the ability to fire user defined events as actions
+ of the wrapper.filter..action, wrapper.timer..action, and
+ wrapper.check.deadlock.action properties.
+* Fix a problem in the WrapperProcess.destroy() function, when a child process
+ couldn't have been forcibly killed.
+* Add GetHosdID.bat file for Windows platforms. This file will open a dialog
+ displaying the HostId of the machine.
+* Fix a problem in the shell script which, on a rc based OS, could lead to
+ problems starting the Wrapper when the APP_NAME in the script contained
+ capital letters.
+* (Standard, Professional) Added a set of wrapper.share..* properties which
+ makes it possible to configure the Wrapper to map specific network resources
+ before launching the JVM on Windows.
+* Corrected the way the Wrapper is installing itself as a Windows service when
+ the binary and/or conf file are located on a Mapped Drive.
+* Add new wrapper.pausable and wrapper.pausable.stop_jvm properties to control
+ whether the JVM can be paused or not, and deprecate the use of the Windows
+ specific wrapper.ntservice.pausable and wrapper.ntservice.pausable.stop_jvm
+ properties.
+* Modified the wrapper.commandfile property so PAUSE and RESUME commands are
+ now supported on all platforms at any time.
+* Modified the wrapper.filter.action. property so PAUSE, RESUME, and DEBUG
+ actions are now supported.
+* (Professional) Modified the wrapper.timer..action property so PAUSE and
+ RESUME actions are now supported.
+* (Professional) Modified the wrapper.event..command.block.action
+ property so PAUSE and RESUME actions are now supported.
+* Added new WrapperServicePauseEvent and WrapperServiceResumeEvent classes to
+ make it possible to notify an application that it has been paused or resumed.
+ To date, this was only possible when the Windows service was paused or
+ resumed
+* (Professional) Add new "wrapper_pause" and "wrapper_resume" event types that
+ are fired whenever the Wrapper is paused or resumed.
+* Enhance the command line parsing for the WrapperManager.exec() command. The
+ single commandLine version of the exec call will handle quotes more
+ sophisticated.
+* Modified the wrapper.syslog.ident property so its value is now silently
+ trimmed to 32 characters in length. This is needed to avoid problems with
+ syslog servers. (See RFC 3164 section 4.1.3)
+* (Standard, Professional) Add new wrapper.syslog.remote.host,
+ wrapper.syslog.remote.port, and wrapper.syslog.local.host properties which
+ can be used to redirect all syslog (UNIX) or Event Log (Windows) output to
+ a remote syslog server.
+* Add support for the wrapper.syslog.facility property on Windows so remote
+ syslog entries can be sent from Windows versions of the Wrapper.
+* Add debug output from the WrapperManager class which shows information about
+ the current wrapper.jar, including its size, location, and MD5 hash.
+* Add a check for wrapper.java.classpath. entries containing quotes. The
+ quotes are now stripped and a debug warning logged.
+* (Standard, Professional) Increase the size of the wrapperw.exe error dialog
+ so it is a little easier to read. Also changed the font for the same reason.
+* (Standard, Professional) Modify the title of the wrapperw.exe error dialog
+ so it now includes the value of the wrapper.displayname property.
+* Add a new check for the writability of the configured Java temporary
+ directory. When running on Vista, it will not be writable and can lead to
+ errors.
+* Added new wrapper.java.tmpdir.required and wrapper.java.tmpdir.warn_silently
+ properties to control whether the temporary directory is required.
+* Add a note in Wrapper conf template showing users how to configure a specific
+ Java version to use.
+* Add a new CLOSE_SOCKET command to the wrapper.commandfile property and added
+ a new wrapper.commandfile.enable_tests property to control whether it can be
+ used.
+* Fix a debug warning while shutting down caused by one thread closing the
+ backend socket when another expected it to be open.
+* If the backend socket between the JVM and Wrapper is somehow closed, make the
+ JVM respond promptly by restarting the JVM immediately to resync with the
+ Wrapper. Added log information to make it clear when this happens.
+* Add a new wrapper.use_tick_mutex property to control whether or not the
+ internal tick timer is protected by a mutex. (Experimental)
+* (Standard, Professional) Add support for zLinux 32 and 64-bit on s390 and
+ s390x systems.
+* Change the internal encoding of the wrapper from native characters to
+ UNICODE. This will allow the wrapper to handle correctly any characters in
+ its configuration file and internally.
+* (Standard, Professional) Implement a new WrapperResources class which makes
+ it possible for user applications to localize their applications using the
+ same methods common to native applications. The Wrapper uses this internally
+ to provide localized versions of the Wrapper.
+* Remove the old org.tanukisoftware.wrapper.resources package as it is no
+ longer being used.
+* (Standard, Professional) Add Japanese language pack to localize the Wrapper
+ to Japanese.
+* Fix a problem in the WrapperManager class where unexpected exceptions thrown
+ in the main socket loop were being thrown away without being logged.
+* Make the Wrapper more robust against failures removing the Wrapper's shutdown
+ hook on shutdown. It had been causing the clean shutdown of the JVM to fail
+ as an unexpected exit.
+* Fixed a problem in the wrapper customize code where customized multi layer
+ icons may get scaled incorrectly by Windows. Bug #3015848
+* Modify the wrapper.on_exit. property so it is now possible to PAUSE the
+ Wrapper when a JVM exits. This delays the restart of the JVM until the
+ Wrapper is resumed.
+* Add a new log format, 'U', which logs the approximate time in seconds since
+ the Wrapper was launched. It is based on the internal tick timer and will
+ be a few percent lower than the actual number of seconds that have elapsed.
+ Added to the wrapper.console.format, wrapper.logfile.format, and
+ wrapper.logdialog.format properties.
+* Fix a problem where deleting the configured anchor file was not recognized
+ if the JVM was not running at the time. The Wrapper was not noticing that
+ it was missing until the next JVM was launched.
+* (Standard, Professional) Add a new NOTICE log level which is used to log
+ license related message. These will only show up trial license log output.
+* (Standard, Professional) Add a new default 15 minute trial license which
+ can be used out of the box on any machine without the need to register and
+ obtain a trial license or purchase a license.
+* Add a new wrapper.environment.dump property which will dump all of the
+ environment variables to the log, along with where the variables originated.
+* Force the Wrapper to flush all logfile output for each line until the
+ configuration file has been loaded. There is normally no output up to this
+ point anyway, but this ensures that any errors are logged in a consistent
+ location.
+* Move the registration of the main thread with the logging system up a bit
+ to make it possible to perform low level debug logging earlier.
+* Add a set of checks to display an error and prevent the Wrapper from starting
+ if the batch or shell scripts being used are based on the TestWrapper demo
+ application. It is important that the user start with the default template
+ files in the distribution src/bin and src/conf directories to make sure the
+ integration goes smoothly.
+
+3.4.1
+* Fix a problem where the wrapper.app.parameter.1 property was always being
+ set to an empty string when launched from launchd on Mac OSX. It worked
+ correctly with the testwrapper application, but would fail for most user
+ applications.
+* (Professional) Fix a potential synchronization problem in the log output
+ of the tick timer, event command and event email code. This had been in
+ the code since 3.3.0 without any reports of problems.
+* Improve the error message displayed when the configured wrapper.java.command
+ can not be found on the path.
+* Log the name of the signal in the logs when a SIGSEGV is detected from the
+ JVM. It had been logged as Unknown.
+* Add some comments to the wrapper.conf.in template to help users get started
+ with a new license key file.
+* Add some default properties to the wrapper.conf.in template file to make
+ it easier to get up and running with out of memory checks, as well as
+ sending out alert emails.
+* Add a small debug message when running wrapperw.exe so it is clear which
+ wrapper binary is being used.
+* Fix a problem where the wrapper.logfile.maxfiles was not being applied on
+ startup when the current log file did not yet exist. This was true for any
+ wrapper.logfile value which contained a unique value like a PID.
+* (Professional) Fix a problem in the WrapperProcess.destroy() function, where
+ the function was failing to forcibly kill the child process.
+* (Standard, Professional) Add a new GetHostID.bat file for Windows platforms.
+ This file will open a dialog displaying the HostId of the machine to help
+ new users get up and running.
+* Add a new WrapperManager.appearOrphan() method which can be used to test
+ how the WrapperManager shuts down the JVM in the event that the Wrapper
+ process ever crashes or freezes. This was not due to any particular problem
+ and was added to fill out our test coverage.
+* (Professional) Fix a problem where event commands were being left in a
+ defunct state after execution on UNIX platforms.
+* Fix a potential problem on 64-bit versions where the internal tick timer was
+ not rolling over in the same way as the 32-bit versions. This has been in all
+ previous versions but is not known to have caused any problems. It was fixed
+ for consistency.
+* Modify the WrapperManager class so it will now request a JVM hard exit only
+ after 4-times the ping timeout, in seconds, since the last contact with the
+ JVM. This had been 90 seconds more than the ping timeout, which was not
+ always long enough when the wrapper.ping.timeout was very large.
+* Shift the initial start point of the tick counter so it will roll over 50
+ seconds after startup. This shouldn't be noticeable to the user, but makes
+ sure that this roll over is much better tested as it always happens the first
+ time on startup.
+* Add a new wrapper.java.classpath.use_environment property which makes it
+ possible to set the classpath using the CLASSPATH environment variable rather
+ than including it on the Java command line.
+* Fix a problem where requests to shutdown the Wrapper when in the state where
+ it was just about to launch a JVM would being ignored. This was fixed in all
+ editions, but was only an issue in the Professional Edition when the
+ wrapper.event.jvm_prelaunch.command.on_exit.=SHUTDOWN property was being
+ used with the wrapper.event.jvm_prelaunch.command.block=TRUE property and the
+ command exited with a code that triggered the SHUTDOWN.
+* (Professional) Add a new wrapper.event..command.block.action
+ property to control how the Wrapper behaves when a command does not complete
+ execution within the configured timeout. Accepted values are CONTINUE, KILL,
+ KILL_SHUTDOWN and KILL_RESTART. Default value is CONTINUE.
+* (Professional) Made it possible to use the "default" event type with the
+ wrapper.event..command.loglevel,
+ wrapper.event..command.block,
+ wrapper.event..command.block.timeout,
+ wrapper.event..command.on_exit., and
+ wrapper.event..command.on_exit.default properties.
+* Fixed a single byte buffer overflow which takes place just before the JVM is
+ launched on Windows platforms. This was introduced in 3.4.0.
+* Add a message pointing the user to the Wrapper's log file when the service
+ fails to start after it has been launched.
+* Update the debug message displayed when attempting to open the backend socket
+ if the port is unavailable so it doesn't seem like a problem. It will retry
+ with another port.
+* Work around an issue on some Solaris problems where the shell script would fail
+ if /usr/ucb/ps wasn't installed.
+* Fix a problem on UNIX versions where the Wrapper would fail to resolve the
+ correct location of java if it was located using the system PATH, and that PATH
+ element pointed to a binary via a relative symbolic link. This was introduced
+ in 3.4.0.
+
+3.4.0
+* Increased the minimum supported Java version from 1.2 to 1.4.
+* Removed the reflection code used to manage the Wrapper's shutdown hook.
+ The Runtime methods are now called normally.
+* Add a note in the TestWrapper shell script to make it clear that the user
+ should always use the scripts in the WRAPPER_HOME/src/bin/ directory when
+ generating scripts for their own applications. This became more of an
+ issue because of changes to the TestWrapper script starting with 3.3.8.
+ Bug #2902843.
+* (Professional) Added new WrapperManager.exec methods and a new
+ WrapperProcess class to allow the launching and management of child
+ processes through the Wrapper rather than using the standard Runtime
+ class. This makes it possible to clean up child processes when the
+ JVM crashes or is restarted, as well as solves severe memory issues with
+ the way processes are forked on some UNIX platforms.
+* (Professional) Added a new wrapper.child.status.loglevel property to make
+ it easier to debug the status of child processes.
+* (Professional) Added a new wrapper.child.count.interval property to control
+ the interval at which the number of waiting child processes is logged after
+ a JVM is shutdown.
+* (Professional) Added a new wrapper.jvm_cleanup.timeout property to control
+ the amount of time that managed child processes still running after the JVM
+ has exited are given to shutdown before being forcibly killed.
+* Fix a problem with WrapperManager.getUser() and getInteractiveUser() methods
+ which was preventing us from using the latest compiler on 32-bit Windows.
+ (The compiler used to build 32-bit Windows versions was rolled back to the
+ version used through the 3.3.5 release in 3.3.9 to work around the problem
+ that was causing these methods to always return null.) The change in this
+ version should not affect how the Wrapper functions.
+* The old compiler used in 3.3.9 for Windows 32-bit builds was causing a false
+ hit on Symantec security software. The new compiler causes the Wrapper to
+ once again pass without any warnings.
+* Added a warning while starting up the JVM which will be displayed if the
+ Java command in wrapper.java.command does not point to a valid java binary
+ file.
+* [Changed the scripts and batch files to try to load the wrapper executable
+ according to the system, i.e. on 64-bit systems the 64bit binary of the
+ wrapper is attempted to be executed first and after this fails the 32 bit
+ gets attempted to be loaded. This behaviour is primaly useful with the
+ delta-pack of the wrapper.]
+* Add some debug output logging the current timezone to assist supporting
+ time related problems.
+* (Standard, Professional) Added a new wrapper.license.debug property which
+ will log information about the license key(s) being tested on startup.
+* (Standard, Professional) Fix a problem where license validation was
+ failing at certain times of the day for servers with timezones east of
+ Japan. Development license keys which have their update times obfuscated
+ were not affected. This was a problem introduced in 3.3.7.
+* Fixed a bug in the wrapper shell script which occured when running the script
+ on a Solaris within a non singlebyte locale. Bug #2910327
+* Fixed a potential bug in the wrapper script where requesting a Thread Dump,
+ the shell is sending the wrapper console to the background and returning
+ with a prompt.
+* Fix a problem where Java log output would sometimes get extra line feeds
+ when under heavy load.
+* Fix a problem which was leading to a resource not found error when trying
+ to start a service, if it was installed on a Mapped Network Drive under
+ Windows.
+* Added some advice messages recommending the use of UNC paths if a resource
+ located on a Mapped Network Drive is used in the configuration file on
+ Windows versions.
+* (Standard, Professional) Fix a bug in the wrapper binary customization,
+ which occured when the source binary file was set to read only.
+* Fixed a null string problem in the error message if a classpath value
+ wasn't found.
+* (Professional) Added the option to include a logfile into the wrapper's
+ EmailNotification mails via wrapper.event.default.attach_log=TRUE
+* Improve the message displayed when a user calls
+ WrapperManager.requestThreadDump() in JVM which does not have console
+ window on Windows. This should never be an issue when run with the Wrapper,
+ but can happen if running standalone without the wrapper binary.
+* Update the Windows batch scripts so they now take AMD64 and IA64
+ architectures into account when deciding which version of the Wrapper to
+ run when using the delta pack.
+* Update the UNIX shell script so it now does a much better job of resolving
+ the ideal platform bits to run the correct version of the Wrapper when using
+ the delta pack. Thanks to Leo Leung for the patch.
+* Add install and remove commands to the UNIX shell script so it is now much
+ easier to install and remove the Wrapper on many UNIX plattforms to start
+ and stop on system startup and shutdown. Thanks to Leo Leung for the patch.
+* Update the Windows batch scripts so it is now easier to change the location
+ of the Wrapper configuration file or rename the Wrapper binary when using
+ the scripts.
+* Added a new QueryApp-NT.bat.in template script which can be used to query
+ the current running status of the service on Windows.
+* (Standard, Professional) Add a new "-u" or "--update" command to the Wrapper
+ which allows you to effectively reinstall the Wrapper as a service without
+ having to provide the account credentials if the service is running as a
+ specific user. This is very useful for installers upgrading an application
+ to a new version.
+* Add a new "update" command to the Windows AppCommand.bat.in batch script.
+* Go through and clean up the messages displayed when controlling the Wrapper
+ as a service so the messages are consistent and more meaningful to the user.
+* Add wrapper.wait_for_hostid and wrapper.max_hostid_timeout property.
+ This properties set if and how long the wrapper shall wait when starting up
+ until the hostid is available. This is important to make sure that server
+ licenses are validated correctly on UNIX platforms as the OS is booting up.
+* (Professional) Fix a problem where environment variables referenced in
+ property values were not being expanded correctly the first time they were
+ referenced if the property's value was a default value. The underlying fix
+ was in all editions, but this was only causing a problem in the Professional
+ Edition where the WRAPPER_HOSTNAME variable was not being expanded in the
+ subject and body of emails sent out for the "wrapper_start" event if the
+ defaults were used.
+* (Professional) Fix a problem where backslashes in the body of emails,
+ configured with the wrapper.event..email.body property, were
+ not being handled correctly when displaying things like paths from
+ environment variable references.
+* Fix a problem on UNIX platforms where the Wrapper was displaying an error
+ about not being able to locate the configuration file when the Wrapper was
+ run without any arguments.
+* (Standard, Professional) Improve the message shown when a License Key is not
+ found.
+* Add a new message to the Community Edition when the user requests a HostId.
+* Add WAIT_FOR_STARTED_STATUS and WAIT_FOR_STARTED_TIMEOUT to the script. This
+ lets the script wait (up to timeout sec.) when starting a daemonized process
+ until the process has been started.
+ Thanks to Dobes V. (Feature Requests 2917391)
+* Improve the error message displayed when the user tries to run the Wrapper
+ with the internal -s or --service commands.
+* Fix a problem where the WrapperSystemPropertyUtil.getBooleanValue() method
+ was not correctly returning the specified default value when the looked up
+ property was missing. Also added a new getStringValue() method.
+* Improve the error message displayed when the user tries to install and remove
+ the wrapper as Service on Windows Versions after Windows Vista.
+* Add an advice message when MacOSX applications launched with launchd
+ encounter a "Returning nil _server" error when displaying a GUI.
+
+3.3.9
+* Modify the way JNI functions are called from within the native library so
+ they work correctly on platforms which are not ASCII based.
+* (Professional) Add support for IBM z/OS 390 servers. This is still an alpha
+ release and will be made available on request.
+* Improve the message displayed when a server license key is used on a
+ different server.
+* Add a minimum max file size of 1024 bytes to the wrapper.logfile.maxsize
+ property to avoid the log file rotating too often if the user enters a
+ very small value.
+* Add a message that shows up in the console when the Wrapper fails to write
+ to the configured log file. As with previous versions, it will then fall
+ back to writing to wrapper.log in the current working directory.
+* On UNIX platforms, automatically set the wrapper.disable_console_input
+ property when wrapper.daemonize is set.
+* Fix a problem introduced in 3.3.8 where relative configuration file includes
+ were failing to resolve correctly when the wrapper.working.dir and
+ wrapper.daemonize properties were used together. The wrapper.daemonize
+ property causes the configuration to be loaded twice on startup and the
+ working directly was not being reset correctly before it was loaded the
+ second time.
+* Fix a problem introduced in 3.3.8 where wildcard selection of files on
+ Windows failed in some cases.
+* Fix a problem introduced in 3.3.8 where setting the wrapper.logfile.maxfiles
+ property to 0 was causing all log files to be deleted rather than none when
+ the ROLLNUM file pattern was used.
+* Revert the way rolled log files are deleted when using the ROLLNUM file
+ pattern to the functionality used in versions 3.3.7 and earlier. Files such
+ as wrapper.log.bak or other files manually created with the same log file
+ base name were also being deleted with 3.3.8.
+* (Standard, Professional) Fix a problem where the close window button in the
+ title of the WrapperW log dialog was not correctly cancelling the dialog.
+* (Standard, Professional) Fix a problem where the WrapperW log dialog would
+ sometimes fail to show itself on top of other windows if the splashscreen
+ had been displayed on startup.
+* Fix a problem on 32-bit Windows versions where starting with he Wrapper,
+ the WrapperManager.getUser() and getInteractiveUser() methods were always
+ returning null. This problem was introduced in version 3.3.6.
+* (Professional) Fix a buffer overflow when sending alert emails to multiple
+ addresses. This would sometimes cause crashes in versions 3.3.7 and 3.3.8
+ when sending alert emails to even a single recipient. Because of the nature
+ of the overflow, in most cases did not cause any problems.
+
+3.3.8
+* Add the new start type DELAY_START for NT Services, which startes the service
+ after other auto-start services are started plus a short delay.
+* Fix a problem where the Wrapper's PID file was not being set to the correct
+ PID when the wrapper was launched daemonized. With the shell scripts that
+ ship with the Wrapper, this means that it would not be possible to stop the
+ Wrapper using the script because the expected PID did not exist. This was
+ a problem introduced in 3.3.7.
+* Changed the timing for the wrapper's splashscreen when the splash screen
+ mode was set to JVM_STARTING. Now the splashscreen will disappear when the
+ JVM has been initialized.
+* Fix a problem where the splashscreen was being shown when starting a service
+ or performing other command line operations.
+* Remove some extra debug output on startup for Mac versions.
+* Fix a crash in the Community Edition on PPC platforms of the Mac OSX version.
+ This crash has been reproduced in all versions starting with 3.3.1. The OSX
+ distribution is a universal binary but does not appear to result in a crash
+ on x86 servers. Standard and Professional Editions were not affected.
+* Fix a problem on Windows versions where problems accessing the registry were
+ not reporting the correct error message. This did not cause any problems in
+ and of itself, but it made it difficult to track the down the cause.
+* When wildcards are used in the classpath elements, the list of matching jar
+ files included in the classpath are now sorted to ensure that their order
+ is consistent across installations. Normally it would not matter, but if
+ certain classes or resources are redefined in multiple jars this will ensure
+ that the application now always works the same.
+* Fix a problem where wrapper.logfile.maxfiles was being ignored when
+ wrapper.logfile.rollmode=JVM was set.
+* Changed the way the wrapper.logfile.maxfiles property works with the ROLLNUM
+ token. Now when the log files are rolled, all files greater than maxfiles
+ count will be deleted. Previously, the Wrapper would roll within the maxfiles
+ count and ignore extra files if they existed. This would cause extra files to
+ be left around if the maxfiles property value was decreased.
+* Add new wrapper.logfile.purge.pattern and wrapper.logfile.purge.sort
+ properties which make it possible to limit the number of log files in some
+ advanced cases. Be sure to read the documentation before playing with them.
+* Fix a potential crash when referencing non-existent environment variables
+ in the value of wrapper.logfile.
+* Modify the way all properties used to define file names behave so that
+ undefined environment variable references will now have their '%' characters
+ replaced by '_'. This is to avoid problems caused by file names containing
+ '%' characters on some platforms.
+* Fix a problem introduced in 3.3.6 where the windows shown by the JVM or its
+ child processes could not be displayed when running in iteractive mode.
+* Rework the TestWrapper application a bit so it can now be run in headless
+ mode for testing.
+* Fix a problem on some UNIX platforms where the shell script was showing an
+ extra '-n' when run with the "start" command.
+* Fix a problem for FreeBSD which could cause the wrapper being unable to stop
+ the wrapper daemon if the ps command buffer size (kern.ps_arg_cache_limit)
+ was too small to contain the wrapper command line.
+
+3.3.7
+* (Professional and Standard) Added the ability to customize the wrapper.exe
+ and wrapperw.exe binaries on Windows with a user specified icon and splash
+ screen.
+* (Professional and Standard) Added a new wrapper.splashscreen.mode property
+ to control how long the splashscreen is visible.
+* Fix a problem on SELinux where a strict security policy could lead the
+ Wrapper fail to load the libwrapper library. Thanks to Jean for the hint.
+* Fixed a problem in the obfuscated license date, which caused a license to
+ be reported as invalid if run in a timezone west of Japan. This feature
+ was implemented in 3.3.6, but disabled on the site until the release of
+ version 3.3.7. Thanks to Leo for the hint.
+* Added a new WRAPPER_PID environment variable. Feature Request #2870136.
+* Added a new WrapperManager.getWrapperLogFile() method and
+ WrapperLogFileChangedEvent class that can be used to receive notifications
+ of changes to the Wrapper log file currently in use.
+ Feature Request #2870133.
+* (Profesional) Improved the wrapper.event..email.to property
+ so it now supports the ability to specify multiple recipients.
+
+3.3.6
+* Introduce the wrapper.timezone property. This property allows to set the
+ timezone in which the wrapper will be executed. This property is available
+ in the standard and the professional Edition of the Java Service Wrapper.
+* Fix a potential problem on Windows platforms where a failure to register the
+ control handler was not being logged. If this happened, user logoffs would
+ not be trapped correctly but no other problems would have occurred.
+* Fixed a problem in the shell script on Solaris platforms where a deep
+ directory structure would cause the script to incorrectly report that the
+ Wrapper was not running. That could lead to multiple zombie copies of the
+ Wrapper and its application running in memory.
+ Bug #1664303.
+* Fixed a problem in the shell script on HP-UX platforms where a deep
+ directory structure would cause the script to incorrectly report that the
+ Wrapper was not running. That could lead to multiple zombie copies of the
+ Wrapper and its application running in memory.
+ Bug #2812207.
+* Improve the error message displayed when there are problems initializing the
+ main class specified for the WrapperSimpleApp, WrapperStartStopApp, or
+ WrapperJarApp helper classes.
+* (Professional) Add new wrapper.event..loglevel and
+ wrapper.event..message properties which can be used to output
+ a customizable message like "Event: " to the logs at an arbitrary
+ log level.
+* Add debug output in the Windows version to log the full path of the native
+ library.
+* Add a new wrapper.java.detect_debug_jvm property which will control whether
+ or not the Wrapper disabled timeouts when java's debugger is in use. The
+ Wrapper has automatically disabled timeouts in this case since version 3.2.1.
+ Thanks to Ruslan Gainutdinov for the patch.
+* Fix a buffer overflow problem for values of wrapper.ntservice.name.
+* Fix a problem with where the wrapper.syslog.ident property was not working
+ as documented. It had been necessary to use wrapper.ntservice.name in its
+ place.
+* Add a new wrapper.ignore_sequence_gaps property which makes it possible to
+ have non sequential numbered property values. This affects the
+ wrapper.app.parameter., wrapper.event..command.argv.,
+ wrapper.filter.trigger., wrapper.java.additional.,
+ wrapper.java.classpath., wrapper.java.library.path.,
+ wrapper.ntservice.dependency., and wrapper.timer..interval,
+ properties. The default value maintains past functionality.
+ Feature Request #1930298.
+* (Professional) Fix a problem where the Event Handler Variables
+ were not being set correctly in the values of the
+ wrapper.event..command.argv. properties.
+* (Professional) Fix a potential access violation if memory allocations fail
+ while sending event mails or executing event commands.
+* Add a new WRAPPER_HOSTNAME default environment variable as an alias of the
+ existing WRAPPER_HOST_NAME variable.
+* (Professional) Deprecate the use of the wrapper.event..set_environment
+ property. It will remain in the product for compatibility but its use is
+ discouraged as it does not always work correctly when the configuration
+ file is reloaded. See the property's documentation for more details.
+* Add a new DUMP action to the wrapper.filter.action. property to make it
+ possible to invoke a thread dump in response to a specific string in the
+ JVM's console output.
+* Fix a problem where the WrapperManager.stopAndReturn method was dead locking
+ if called when the JVM was being run in standalone mode without the Wrapper.
+ Bug #2711872.
+* (Standard, Professional) Modify the way the licensing times work so the
+ Wrapper compares the License Upgrade Term to an official release date
+ rather than the build date. This makes it possible to release additional
+ platforms at a later date while keeping the use of a license consistent.
+* (Standard, Professional) Make it possible to obfuscate the upgrade term in
+ License Key files for development licenses so it is not visible to an end
+ user what the development license holder's upgrade term is. This feature
+ is accessed from the License Management Page when downloading a new or
+ existing License Key file.
+
+
+3.3.5
+* Fix a problem on some UNIX platforms introduced in 3.3.4 where the Wrapper
+ would crash on startup if the configured JVM could not be found.
+* Fix a problem introduced in 3.3.2 where the Wrapper could crash if the
+ system host name was longer than 27 characters in length.
+* Fix a potential problem with the way thread ids were being compared on UNIX
+ systems.
+* Add a new wrapper.java.additional.auto_bits property which will automatically
+ add the -d32 or -d64 arguments to the JVM for platforms whose JVMs typically
+ expect the argument.
+* (Professional) Fix a problem with the Date field of outgoing event emails.
+
+3.3.4
+* (Standard, Professional) Update the development license to version 1.1
+ so that a new copyright notice file can be shipped with user applications
+ rather than the full license text.
+* The Community Edition may be licensed under either the GPL2 based Community
+ License, or the Development License. The source for the Standard and
+ Professional Editions of the Wrapper are proprietary.
+ http://wrapper.tanukisoftware.org/doc/english/licenseOverview.html
+* Fix a problem introduced in 3.3.2 where querying a the status of a Windows
+ service with the -q or -qs commands resulted in an access violation. The
+ running status of the service was reported correctly but additional
+ configuration information was failing. Bug #2644515.
+* Add a new wrapper.disable_restarts.automatic property to disable only
+ restarts caused by JVM timeouts, crashes, etc. Manual or configured
+ restarts will still be allowed.
+* Switch to using make for HPUX IA 32/64 builds.
+* Add Advice comments when the Wrapper fails to launch the JVM process.
+* Fix a problem on UNIX platforms where log entries made by the forked Wrapper
+ process would result in two blocks of log entries in the log file because
+ the parent Wrapper process would think they were console output from the JVM
+ process.
+* Add a set of new wrapper environment variables that can be referenced in the
+ wrapper.conf file to generate random numbers, or timestamps for use in
+ generating unique file names, etc. See the Default Environment Variable
+ definitions section for more details.
+* (Standard, Professional) Fix a problem with Development licenses being
+ able to authorize applications using Integration Method #4 which was
+ added in version 3.3.3.
+* Add the number of bits of the current Wrapper to the startup banner to aid
+ in support requests.
+* (Standard, Professional) Fix a crash problem on HPUX versions which would
+ reliably happen on some machines at startup.
+
+3.3.3
+* Modify the wrapper.ignore_signals property so it now takes the values
+ WRAPPER, JAVA, and BOTH, in addition to TRUE and FALSE.
+* Modify the WrapperManager so it is now careful never to poll the native
+ library once the JVM is flagged as being ready to shutdown. This is to
+ make sure that the JVM never exits in the middle of a call as that could
+ lead to the JVM crashing.
+* Add a pair of methods to allow threads to request and release locks which
+ will prevent the Wrapper from letting the JVM exit while certain operations
+ are in progress. See WrapperManager.requestShutdownLock() and
+ WrapperManager.releaseShutdownLock().
+* Fix a problem where interactive services would sometimes leave a console
+ window visible when after starting up. The Wrapper is now more resilient
+ about closing the window even if it fails to do so initially.
+* Add a new integration method (#4), which makes it easy to configure the
+ Wrapper to execute an executable jar file.
+* Fix a problem where the random generator was not being seeded correctly
+ before naming the Wrapper's console window when running as a Windows
+ service. This was leading to problems identifying the wrapper's console
+ when more than one service was running on the same machine.
+
+3.3.2
+* Add a file information record to the wrapper.exe and wrapperw.exe binaries
+ so the Version tab will be displayed correctly in the Properties dialog of
+ the file.
+* (Standard, Professional) Fix a problem with the wrapperw.exe binary where
+ the log dialog was not being displayed correctly when the Wrapper was
+ launched with the "-?", "-v", or "-h" arguments.
+* (Standard, Professional) Fix a problem with the wrapperw.exe binary where
+ a message was being displayed in the dialog with the location of the full
+ log file even if there had not been any entries written to the log.
+* (Professional) Improve the debug output produced when sending event emails
+ when the wrapper.event..email.debug property enabled.
+* (Professional) Add wrapper.event..email.send.timeout and
+ wrapper.event..email.receive.timeout properties to avoid the
+ wrapper hanging waiting for a response from a remote mail server.
+ Bug #2064885.
+* (Professional) Fix a problem where the Wrapper would get stuck and fail to
+ send emails with some mail servers. Problems was being caused by incorrect
+ linefeeds in the body of the email.
+* Add a warning if the leading '#' is missing from an '#include' in the
+ configuration file to assist users with include file problems.
+* Added a new wrapper.ntservice.generate_console property which will cause
+ the Wrapper to always generate a console when running as a service and
+ then hide it immediately. This will cause a slight flicker but is needed
+ to support thread dumps. Bug #2060181.
+* Fix a problem in the Windows version where the console window would
+ sometimes be left visible when running as an interactive service even when
+ it was configured to be hidden.
+* Add support for PowerEvents so Windows services can respond to suspend
+ and resume events.
+* Fix a problem where the wrapper.key system property passed to the JVM was
+ being generated incorrectly randomly, 1 in 65536 times the JVM was launched.
+ This would result in the JVM failing to start and the Wrapper shutting down.
+* Add a new wrapper.disable_console_input to disable to feature which allows
+ the Wrapper to pass console input on to the Java process.
+* Fix a buffer overflow problem in the logging code which would happen once on
+ startup. This was benign on most platforms but was causing intermittent
+ crashes in the 32-bit AIX version.
+* Modify the way configuration properties are parsed so that their names are
+ no longer case sensitive.
+* Modify the WrapperServiceException so that a new getErrorCode method can be
+ used to obtain the integer error code which caused the exception.
+ Feature Request #2188280.
+* (Standard, Professional) Fix a problem where on some Windows machines the
+ Wrapper would return a random hostId that changed each time the system was
+ rebooted.
+* (Standard, Professional) Make it possible to define License Keys so that
+ their property names are encoded using either the host name or hostId. This
+ makes it possible to define multiple keys within the same configuration file,
+ visible on the same host. This was necessary to support some load balanced
+ network adapters where the visible hostId changes depending on the active
+ physical network adapter.
+* Rework the Java side state engine so it is now possible for the Java side of
+ the Wrapper to respond to stop events while the WrapperListener.start method
+ is still in progress.
+* Add a new wrapper.listener.force_stop property which allows control over
+ whether the WrapperListener.stop method is called on shutdown even if the
+ WrapperListener.start method has not yet completed.
+* Fix a problem on Windows where the ability to start and stop the Wrapper as
+ a service using the Wrapper itself was requiring the Administrator permission
+ when a lower permission should have been possible. The Wrapper should now
+ allow service control to do whatever is possible from the Services control
+ panel.
+* Fix a memory corruption error if the value of wrapper.java.maxmemory was more
+ than 4 digits in length. wrapper.java.initmemory did not have any problems.
+* (Professional) Add a new wrapper.event..email.client.host
+ property which makes it possible to configure the host name sent in EHLO and
+ HELO commands to the SMTP server.
+* Add a new default environment variable, WRAPPER_HOST_NAME, which stores the
+ name of the machine where the Wrapper is running.
+
+3.3.1
+* Add debug output showing the current os name and architecture to aid in
+ debugging problems.
+* (Standard, Professional) Improve the message displayed when a license key
+ is found but is deemed to be invalid.
+* Modify the template wrapper.conf file to help users debug include file
+ problems.
+* Disable the console title feature on all UNIX platforms other than LINUX
+ because the console title does not get reset correctly when the Wrapper
+ process terminates.
+* Add support for HP-UX IA64 CPUs.
+* Update the license banner in source files so it is clearer that the user
+ is restricted by the license they agreed to.
+* Modify the Community edition so it will now display a Licensed to banner
+ on startup if shipped with a Development License. This is required to
+ enable the distribution of the Community Edition under the Development
+ License.
+* (Professional) Fix a problem where the UNIX versions of the Professional
+ Edition would sometimes deadlock on startup when run as a daemon process.
+ Bug #1989355.
+* (Professional) Added two new events; jvm_failed_invocation and
+ jvm_max_failed_invocations. Feature Request #1994718.
+* Fix a problem where the Windows service exit code was not being set
+ correctly when the JVM exited with a non-zero exit code. The problem
+ could be seen by running "sc query {service}" from the command line.
+ Bug #1859061.
+* Added support for the Windows Itanium 64-bit platform.
+* Added support for the HP-UX Itanium 32 and 64-bit platforms.
+* Added support for the MAC OSX 64-bit platform.
+* (Standard, Professional) Fix a problem on Windows versions where servers
+ which reported a large number of possible host ids could cause a buffer
+ overflow on startup. This crash was possible when using either
+ Development or Server licenses. Removed duplicate host ids from the list
+ of possible ids.
+* Add a new "condrestart" command to the shell script which will restart
+ the Wrapper only if it is already running. Feature Request #1928045.
+* Fix a problem where the 64-bit Solaris x86 version was unable to load its
+ JNI library. Bug #1992039.
+* Fix a problem on Windows versions where a frozen JVM process was not always
+ being killed. This could result in the zombie JVM processes being left
+ around that consumed memory and other resources.
+* Add a new wrapper.ignore_console_logouts property which allows the Wrapper
+ and JVM to survive logouts when launched as a console application from
+ another service.
+* (Standard, Professional) Add a wrapperw.exe binary in Windows implementations
+ which makes it possible to run the Wrapper without a console. A console still
+ flickers for an instant when the Wrapper starts. This is the same issue that
+ has existed when running as an interactive service and is required to make
+ thread dumping possible.
+* (Standard, Professional) Add new wrapper.logdialog.enable,
+ wrapper.logdialog.format, wrapper.logdialog.lines, and
+ wrapper.logdialog.loglevel properties used to configure the display of a Log
+ dialog when the wrapperw.exe binary exits in an error state.
+* Fix a problem where the Wrapper was attempting to reopen its backend port
+ even when the JVM was down. This was only a problem when the defined port
+ range was limited to a single port with the wrapper.port.min and
+ wrapper.port.max properties. In such a case one or more warning messages
+ were being displayed because the port is locked for a few moments after
+ being closed.
+* (Standard, Professional) The wrapper.initmemory.percent and
+ wrapper.maxmemory.percent properties were not correctly being calculated
+ relative to a maximum of 2048MB for 32-bit versions of the Wrapper.
+ Bug #2053167.
+
+3.3.0
+* Add a new wrapper.ping.interval.logged property which makes it possible to
+ reduce the debug output caused by ping transactions between the Wrapper and
+ JVM.
+* Fix a problem on Windows where the Windows Service Manager was not waiting
+ the full configured time of the wrapper.jvm_exit.timeout and
+ wrapper.shutdown.timeout properties. This was leading to the net stop
+ command timing out and the system shutting down without the java application
+ having fully stopped. Bug #1582568.
+* If internal firewalls were preventing the backend socket from being created,
+ it was not being made clear what the cause was. It was also possible that
+ the JVM would deadlock on shutdown. This second problem was recovered from
+ when the Wrapper killed the JVM.
+* Rework the console output from all Wrapper classes to make it much more
+ obvious that that is their source.
+* Submit a patch to the UNIX sh script by Chris Dance which makes it possible
+ to tell the shell to wait a few seconds for the wrapper to start up. Also
+ includes some modifications to work correctly on older Debian and RedHat
+ systems.
+* Fix a problem where the local copy of ant was not always being used
+ correctly on UNIX systems which have a default copy of any installed.
+ Thanks to Robey Pointer for the patch.
+* Add the -lm to the command line when building Linux 32 and 64 bit versions
+ of the wrapper on Linux. This is to support building on recent Debian
+ and Ubuntu versions. Thanks to Robey Pointer for the patch.
+* Add support for the SIGUSR1 and SIGUSR2 signals so they can now trigger a
+ shutdown, restart or be forwarded to the JVM for custom functionality.
+ See the wrapper.signal.mode.usr1 and wrapper.signal.mode.usr2 properties.
+ Based on a patch by Robey Pointer. Note that the JVM process does not
+ trap SIGUSR1 or SIGUSR2 signals as they are used internally by the JVM
+ as part of the garbage collection process.
+* Fix a problem where the WRAPPER_OS, WRAPPER_ARCH, and WRAPPER_BITS
+ environment variables were not being initialized correctly for the various
+ unix platforms.
+* Removed the 4096Mb upper limit set on the wrapper.java.initmemory and
+ wrapper.java.maxmemory properties. 64bit users need to go way beyond that.
+* Fix a problem where relative include file references in the configuration
+ file were not working correctly if the wrapper.working.dir was used to
+ change the working directory. The working directory is now always reset
+ to its original value as the configuration file is being loaded.
+* Added a new wrapper.registry.java_home property which makes it
+ possible to specify the location of java within the registry.
+* Set a new WRAPPER_JAVA_HOME environment variable if the JAVA_HOME is
+ located in the Windows registry.
+* Modify the way properties are looked up so that any unreplaced environment
+ variable references will be reevaluated in case they were set after the
+ property was originally set. This is possible with some WRAPPER_*
+ environment variables or depending on the placement of set.* properties
+ in the configuration file.
+* Set any unset properties to their default values internally. This is
+ necessary so the WrapperManager.getProperties() method returns the
+ correct set of active properties.
+* Fix an occasional crash with 64-bit UNIX caused by a native synchronization
+ problem when system signals are trapped. Bug #1614010.
+* Fix a problem on Solaris versions, where the Wrapper was not correctly
+ recovering and attempting another back end port when the first was already
+ in use. Bug #1594073.
+* Fix a problem on Solaris and AIX where the RUN_AS_USER feature of the
+ shell script was not working due to lack of support for the "-m" option of
+ su. The shell script now uses "su -". Bug #1590168.
+* Add HP-UX Makefiles for building with make. Fix some problems in the
+ shell script to make the script work better on HP-UX. Thanks to David
+ Brown and Nicolas Varney for the patches.
+* Fix a problem where any signals received by the JVM and triggering a
+ SIGCHLD signal in the Wrapper were being interpretted as the JVM having
+ stopped. This was not always true. Bug #1643666.
+* The Wrapper is now able to detect when the JVM process is stopped and
+ continued. It will still timeout if stopped, but a descriptive warning
+ is now logged.
+* Increase the maximum number of log entries which can be queued to avoid
+ losing them. These are only used for log entries outside of the primary
+ thread.
+* Fix a problem in the shell script which was making it impossible to stop
+ the Wrapper or query its status on OSX.
+* Add support for 64 bit AIX. Thanks to Nicolas Varney for supplying a
+ Makefile.
+* Correct the AIX library extension to be ".a".
+* Rename the UNIX Makefiles so it is more obvious which tool must be used
+ to build with them.
+* Fix a problem where the HP-UX native library would not be located
+ correctly for some processor types if the file had a platform specific
+ name.
+* Internally rename the WRAPPER_JSTATE_LAUNCH state to
+ WRAPPER_JSTATE_LAUNCH_DELAY for clarity.
+* Fix a problem where the UNIX versions of the Wrapper would shutdown
+ rather than restarting a frozen JVM if the arrival of the SIGCHLD signal
+ from the old JVM process was delayed by more than a second or two.
+* Rework the Windows build so it now uses nmake and a Makefile rather than
+ vcbuild. This is probably not as clean, but it was needed to get the
+ 64-bit build working.
+* Fix a problem on Windows versions where quoted values specified from the
+ command line were not always being requoted correctly when generating the
+ java command line.
+* Add validation checks for Windows versions to make sure that all additional
+ parameters, application arguments, the classpath, and library path all
+ contain values which are quoted correctly. Incorrectly quoted values will
+ now result in a warning message that will help resolve the problem.
+* Fix a memory leak when calling WrapperManager.listServices() on Windows.
+ Bug #1665947.
+* Fix a buffer overflow problem if the Wrapper was launched without explicitly
+ specifying a configuration file.
+* Add tests of the return values of all malloc calls to catch out of memory
+ errors and recover as gracefully as possible. Bug #1649880.
+* Modify the WrapperManager.signalStarting and signalStopping methods so that
+ they will never have the effect of shortening the existing timeout.
+ Updated the javadocs of both methods so they more accurately reflect what
+ the methods do.
+* Move the Wrapper Copyright banner into the Wrapper process so it will be
+ output more consistently.
+* Branch the code to support Community, Standard, and Professional Editions
+ of the Java Service Wrapper.
+* (Standard, Professional) Add support for Server (Fixed) as well as
+ Development (OEM based) licenses.
+* (Standard, Professional) Add 64-bit versions of the Windows version. The
+ 64-bit Community Edition will not be distributed initially to support
+ ongoing development costs.
+* (Professional) Add event handling callbacks for Wrapper start/stop, JVM
+ start/stop, JVM started/stopped, JVM restart, JVM killed, and JVM unexpected
+ exit events.
+* (Professional) Add the ability to send emails in response to any event
+ callback.
+* (Professional) Add the ability to execute a a user configured command in
+ response to any event callback.
+* Add WRAPPER_BIN_DIR and WRAPPER_WORKING_DIR environment variables which are
+ now available for use within the wrapper.conf file as well as by any child
+ processes.
+* Add documentation to the integration pages about existing system properties
+ that be used to control the way the WrapperSimpleApp and WrapperStartStopApp
+ handle application startup.
+* Remove support for native PPC and x86 distributions of the Wrapper for
+ MAC OSX in favor of the universal X-Code distribution. This appears to be
+ the standard for the market and saves lots of time on testing.
+* Add a new '-it' command to the Windows version which makes it possible to
+ install and start a service as a single command.
+* Fix a problem where the PATH environment variable was not being set correctly
+ on Windows versions when run as a service if the wrapper.ntservice.account
+ was set and a PATH was set for both the SYSTEM and user accounts.
+ Bug #1702274.
+* Modify the shell script to set JAVA_HOME to the default JVM location on
+ OSX systems if it is not already set. OSX always places the JVM in a known
+ location so this is possible. Thanks to Andrew Williams for the patch.
+* Fix a problem where the UNIX shell script would fail if the APP_NAME was set
+ to a value containing spaces. Thanks to Andrew Williams for the patch.
+ Bug #1695678.
+* Fix a problem where the DIST_ARCH was not being resolved correctly on HP-UX
+ systems. Thanks to Matej Kraus for the patch. Patch #1697421.
+* Log output from the timer thread was not being queued correctly, this could
+ have lead to timing problems if there were any delays writing to disk.
+* Add partial support for OS/400 into the build file. Still needs a Makefile.
+* Fix a problem where the WrapperActionServer would deadlock in its stop method
+ if the JVM shutdown was initiated by a call to the shutdown or restart
+ actions.
+* Add support for wrapper.console.title on UNIX platforms. Add a set of
+ wrapper.console.title. properties which make it possible to set the
+ title based on the platform.
+* Fix a problem where the wrapper.ntservice.account and
+ wrapper.ntservice.password properties were being stored in the system
+ registry if the they were specified on the command line when the Wrapper
+ was installed as a service. This was broken in version 3.2.2.
+ Bug #1538725.
+* Fix a problem where the DUMP command was not working with the
+ wrapper.commandfile property when run as a service on Windows.
+ Bug #1644421.
+* Fix a problem where wildcards like "*.*" or "*" in a classpath property were
+ including the "." and ".." files on Windows versions. Bug #1517928.
+* Modify the debug log output when the Wrapper is attempting to load its native
+ library in an attempt to make the expected failures less threatening.
+* Commit a patch by Rob Oxspring which adds the start_msg and stop_msg commands
+ to the shell script. These are expected by init scripts on HP-UX.
+ Patch #1750027.
+* Add a DETAIL_STATUS flag to the UNIX shell script which will cause the
+ status, start_msg, and stop_msg commands to display the current internal
+ status of both the Wrapper and Java processes.
+* Commit a patch by Rob Oxspring which adds an init block to the UNIX shell
+ script to make it work with install_initd and remove_initd scripts used by
+ SUSE linux. Patch #1750028.
+* Commit a patch by Travis Carlson, ia64 systems were being grouped as "x86"
+ systems. They now are assigned the name "ia" which makes it possible to
+ create a distribution for them. Patch #1663887.
+* (Standard, Professional) Add new wrapper.java.initmemory.percent and
+ wrapper.java.maxmemory.percent properties which make it possible to set
+ the initial and maximum memory values relative to the amount of physical
+ memory on the system. Feature Request #1741051.
+* Add a new #include.debug declaration in the wrapper configuration file which
+ makes it much easier to debug problems with cascading include files.
+* Add -l and --controlcode commands to the Windows version which make it easy
+ to send user defined control codes to the Wrapper running as a service.
+* Fix a synchronization problem in the logging code which could result in
+ data corruption or access violations.
+* Add version numbers to the bat and sh scripts to make them easier to
+ support.
+* Make the wrapper.ntservice.name, wrapper.ntservice.displayname, and
+ wrapper.ntservice.description properties aliases of new wrapper.name,
+ wrapper.displayname, and wrapper.description properties as they are now
+ used on UNIX platforms as well as Windows.
+* Fix a problem where the wrapper would sometimes fail to send a packet to
+ the JVM because the sending of the packet would block. Thanks to Peter
+ Gorgon for the patch.
+* Fix a problem where CPUs identifying themselves as 'ia64n' or 'ia64w' were
+ not correctly being categorized as 'ia'. Thanks to Stirling Chow for the
+ patch. Patch #1859412.
+* Add -d and --dump commands to the Windows version which make it possible to
+ send thread dump requests to the Wrapper when running as a service. Works
+ in association with the new wrapper.thread_dump_control_code property.
+ Feature Request #1118110.
+* (Professional) Add wrapper.timer..interval and wrapper.timer..action
+ properties which make it possible to schedule Wrapper shutdowns, JVM
+ restarts and thread dumps at arbitrary times.
+* Fix a problem where the default configuration file name was being corrupted
+ by a buffer overrun. Thanks to Rob Joyce for the patch. Patch #1879049.
+* Fix a problem where the WrapperManager would sometimes attempt to unregister
+ its shutdown hook after the shutdown hook had been initiated. Bug #1799489.
+* Fix a problem where log files were limited to 2GB on Linux systems.
+ Bug #1881038.
+
+3.2.3
+* Add support for x86 Mac OS X distributions.
+* The 3.2.2 Windows version was accidentally released with its MFC libraries
+ dynamically linked. This meant that anyone who did not have VS8 installed
+ were not able to run the Wrapper due to missing DLLs. This version fixes
+ that snafu by correctly using statically linked libraries as was done in
+ previous versions built with VS6. Bug #1578554.
+
+3.2.2
+* Correct a typo in the usage output of the WrapperStartStopApp. Thanks to
+ Michael Giroux for pointing it out.
+* Fix a problem on OSF1 systems where the backend socket was not listening
+ correctly due to a backlog of 0. This was broken in 3.2.0. Thanks to
+ Phillip Gussow for supplying a patch.
+* Remove the com.silveregg.wrapper package classes that were deprecated in
+ version 3.0.0.
+* Fix a potential problem in the UNIX script where the lock file permissions
+ were not being set correctly if the LOCKFILE and RUN_AS_USER variables are
+ specified but the group of the specified user could not be resolved.
+* Fix a problem where the exit code returned by WrapperListener.stop was being
+ ignored in some cases.
+* Fix a problem where the shell script would not work correctly when the
+ wrapper or its configuration files were located in a directory path
+ containing spaces.
+* Apply a series of patches by Michael Saya to get the Windows 64 bit build
+ working.
+* Fix a problem in UNIX versions where the SIGTERM handler was being disabled
+ when a SIGCHLD was received.
+* Added support in UNIX versions for the SIGHUP signal.
+* Migrated the source to Subversion from CVS. Did a bunch of cleanup in the
+ source, removing CVS specific tags.
+* Fix a problem in UNIX versions were the pid file specified by the
+ wrapper.java.pidfile property contained the wrapper pid rather than the
+ jvm pid. Bug #1565011.
+* Fix a problem in UNIX versions where the file specified by the
+ wrapper.java.pidfile property was not always being deleted when the JVM
+ process went away.
+* A user encountered a JVM bug where calls to System.exit were resulting in
+ an IllegalThreadStateException being thrown. Added some code to trap this
+ and shut down the JVM using other means to avoid a hang during shutdown.
+* Fix a NullPointerException caused by users incorrectly implementing
+ an Integration Method #3 class and then calling WrapperManager.start with
+ a null value for the args parameter.
+* Update the banner displayed by the Wrapper on startup to include a
+ copyright notice. Please see the license page of the documentation for
+ details.
+* Add a new 'Z' log format which will log the time to millisecond accuracy.
+* Fix a problem where the JVM exit code was not being set correctly when
+ the JVM was shutdown using WrapperManager.stopImmediate(). The exit code
+ of the Wrapper was being set correctly through other means however.
+* Fix a potential synchronization problem in the logging code if a JVM exits
+ with debug output enabled.
+* Updated the WrapperListener.stop method javadocs to better explain the
+ exitCode value under certain exit modes.
+* On UNIX versions, add a log message which records the signal that caused
+ the JVM process to exit when it terminates unexpectedly.
+* Fix a problem where the wrapper.on_exit. property was not working
+ correctly in some cases on UNIX. With help from Andreas Schafer.
+* Add support for building the Wrapper with Visual Studio 8 for Windows.
+ Releases will now be done using this compiler.
+* Fix a CRITICAL bug in the 3.2.0 and 3.2.1 Windows versions of the Wrapper
+ where the Wrapper would crash under rare circumstances when running as a
+ service. If the service manager interrogated the service at the same
+ instant as the wrapper was pinging the JVM, the wrapper was sometimes
+ crashing due to a synchronization problem. The problem did not exist
+ prior to 3.2.0. Bug #1574537.
+* Fix a minor logging problem where the 'D' format was not displaying the
+ correct thread name for queued log messages.
+
+3.2.1
+* Fix a problem with the solaris-sparc-64 makefile.
+* Add a solaris-x86-64 makefile.
+* Merge in a patch by Hugo Weber to make it possible to configure the Wrapper
+ to pull the JRE from the system registry on windows.
+* Fix a batch file bug added in 3.2.0 where the scripts would not function
+ correctly if the full path to the batch file contained spaces.
+ Bug #1450601.
+* Modify the message shown when a native library fails to load so the
+ exception message text is now shown in the log without having to enable
+ debug log output.
+* Modify the UNIX shell script to be more informative if the script is unable
+ to locate a wrapper binary due to a executable bit permission problem.
+* Fix a minor permission problem with the build for the delta-pack.
+* Commit a patch by Juergen Hermann to make the error shown when realpath
+ fails clearer.
+* Add the ability to use a default wrapper.conf file that is in the same
+ directory as the wrapper binary. The file will be named based on the
+ name of the wrapper binary.
+* Synchronize the command line so that both the Windows and UNIX versions
+ are now the same. The old command line syntaxes are now supported
+ everywhere so there will be no compatibility problems.
+* It is no longer possible to specify arguments using the '/c' syntax.
+ This was undocumented so hopefully it is not being used. The documented
+ '-c' syntax must now be used. The change was necessary to synchronize
+ the command line between UNIX and windows platforms.
+* The 32-bit HP-UX 3.2.0 build was generating a libwrapper.so file rather
+ than libwrapper.sl.
+* Make the WrapperManager.setConsoleTitle, getWrapperPID, and getJavaPID
+ methods available through JMX.
+* Fix a state engine problem introduced in 3.2.0 which was causing the
+ wrapper.on_exit. properties to be ignored in most cases.
+* Fix a potential problem that could have caused crashes when debug logging
+ was enabled.
+* Fix a problem where signals were not being handled correctly on some UNIX
+ platforms, including AIX. This was making it impossible to shutdown the
+ wrapper cleanly with the TERM signal. Bug #1477619.
+* Add new default environment variables which can be referenced in a
+ configuration file to configure platform specific directories and file
+ names. WRAPPER_OS, WRAPPER_ARCH, and WRAPPER_BITS.
+* Add a -v argument to make it possible to request the version from a wrapper
+ binary.
+* Add support for registering the WrapperManager MBean with the
+ PlatformMBeanServer when run on a 1.5+ JVM. See the JMX section in the
+ documentation for details.
+* Rework the way timeout properties are handled. Values of 0 now actually
+ disable the timeouts rather than setting them to a large value. To avoid
+ overflow problems when converting to internal timer ticks, timeouts are now
+ restricted to a maximum of 20 days, or 1728000 seconds. Change affects the
+ wrapper.cpu.timeout, wrapper.startup.timeout, wrapper.ping.timeout,
+ wrapper.shutdown.timeout, and wrapper.jvm_exit.timeout properties. For
+ values less than 20 days, there should be no change in functionality.
+* Add support for debuggers. The Wrapper will now show a warning on startup
+ and then again the first time a timeout occurs. But all timeouts will be
+ ignored. This is to avoid problems with the Wrapper restarting a suspended
+ JVM in the middle of a debugging session. The wrapper enters this mode if
+ the wrapper.java.command ends with the string "jdb" or "jdb.exe", or the
+ "-Xdebug" parameter is passed to the JVM.
+* Add 'athlon' to the list of supported architectures.
+* Fix a problem where the environment variables loaded when a service was
+ started were always the system environment even if the service was running
+ as a specific account. The environment of a specific account will now be
+ loaded on top of the system environment if the USERNAME environment
+ variable is set by the system. Bug #1491138.
+* Added new wrapper.ntservice.pausable and wrapper.ntservice.pausable.stop_jvm
+ properties to make it possible to pause and resume the Wrapper when installed
+ as a Windows service.
+* Added new Pause and Resume batch files as well as modified the command batch
+ file to support pause and resume.
+* Added PAUSE and RESUME commands for use by the wrapper.commandfile property.
+* Fix a problem with the wrapper.pidfile, wrapper.java.pidfile,
+ wrapper.anchorfile, wrapper.commandfile, wrapper.statusfile,
+ wrapper.java.statusfile, wrapper.java.idfile, and wrapper.lockfile
+ properties where forward slashes in paths were not being changed to back
+ slashes on Windows versions.
+* Simplify the code used to load a native library by using the
+ System.mapLibraryName method rather than doing the same thing manually.
+* Add a new wrapper.syslog.facility property which makes it possible to
+ specify the syslog facility on UNIX systems. Thanks for the patch from
+ Bruce Pennypacker.
+* Removed the custom thread counting used to keep track of when the wrapped
+ Java application has completed. It is now done in a different way that
+ will work on all Java implementations without requiring any special
+ consideration of the current JVM. Deprecated the
+ wrapper.monitor_thread_count and wrapper.thread_count_delay properties.
+ Bug #1470265.
+* The WrapperStartStopApp helper class still requires thread counting if the
+ stopWait parameter is set to true. Previous versions all hardcoded the
+ system thread count to 1 which worked for most JVMs. A new system property,
+ org.tanukisoftware.wrapper.WrapperStartStopApp.systemThreadCount, was added
+ to make it possible to customize. It currently defaults to 1.
+* Make it possible to extend the WrapperSimpleApp and WrapperStartStopApp
+ helper classes. Feature Request #1510274.
+* Add warning messages if the old org.silveregg.wrapper package classes are
+ still being used. They will be removed in the next release.
+
+3.2.0
+* Rework the release cycle so that the wrapper.jar file released for all
+ platforms is now built on the same machine. This resolves a few
+ incompatibility problems caused by jars built on very new JVMs but run
+ on old JVMs.
+* Add additional output when the JVM can not be launched due to security
+ restrictions on Windows.
+* Greatly improved the performance of file logging. On a windows test machine
+ 3.1.2 could log 67210 lines of output in 20 seconds with a 80-15% split
+ between the Wrapper and JVM process CPU usage. It now outputs 215214 lines
+ with a 64-34% split, also showing less load on the system process. This is
+ a 220% increase in performance. In both cases, the JVM was completely idle
+ other than the console output which makes the Wrapper appear to be a bit of
+ a CPU hog. In fact it is the only process doing any work in this case.
+ This improvement was accomplished by keeping the log file open unless idle.
+ The idle time can be controlled using the new
+ wrapper.logfile.inactivity.timeout property. The speed increase on UNIX
+ platforms was much smaller at around 10%.
+* Add a new property, wrapper.disable_restarts, which will completely disable
+ the Wrapper's ability to restart JVMs.
+* Add a pair of new properties, wrapper.port.min and wrapper.port.max, which
+ make it possible to define the port range used when a specific wrapper.port
+ is not specified.
+* Fix a problem where certain characters like umlauts were being stripped from
+ property values. Bug #1049528.
+* Make the PIDs of the Wrapper and Java process easier to access by providing
+ a new pair os system properties; wrapper.pid and wrapper.java.pid, as well
+ as a new pair of methods; WrapperManager.getWrapperPID() and
+ WrapperManager.getJavaPID().
+* Add a new WrapperEventListener class which can be implemented to receive
+ a wide variety of events from the Wrapper.
+* Add a WrapperServiceControlEvent class which will report any service control
+ codes received by the Wrapper as it is running as an NT service. This was
+ added to make it possible for other applications to sent custom codes to the
+ Wrapper using the Window Service Manager.
+* Add a WrapperManager.listServices() method which can be used to obtain the
+ status of all services on a Windows system.
+* Add a WrapperManager.sendServiceControlCode() method which makes it possible
+ to start, stop, pause, continue, any service on Windows systems. It is also
+ possible to send custom user codes via the service manager.
+* Add comments in the sh script to support the chkconfig command.
+* Implement the ability to read from standard input via System.in. Feature
+ Request #1024693.
+* Made the tick based timer the default by changing the default value of the
+ wrapper.use_system_time property to false. Most users should see an
+ improvement in reliability under heavy loads with this new setting. If you
+ have extended any timeouts in the past, you may wish to try going back to
+ defaults as they may no longer need to be extended.
+* Add a new wrapper.restart.reload_configuration property which causes the
+ Wrapper to reload its configuration file immediately before a JVM restart.
+ Properties which can not be reloaded have comments stating that fact in
+ their documentation. Feature Request #981060.
+* Fix a problem in the UNIX shell script which was preventing the script from
+ locating the PID and anchor files when the wrapper.working.dir property was
+ used.
+* Modify UNIX versions so that the wrapper binary will now force its working
+ directory to the location of the wrapper binary. This change was made to
+ make the UNIX version work the same way as the Windows version and thus make
+ configuration files that modify their working directory work correctly on
+ a cross platform basis. Users which have been using the scripts supplied
+ with the Wrapper should not encounter any problems. Other users may require
+ slight changes to their configuration file to deal with the new way that the
+ Wrapper deals with its initial working directory.
+* Add a new method WrapperManager.getProperties() which makes it possible to
+ access any property in the Wrapper configuration file.
+* Fix a problem where TERM signals were not being correctly ignored by the
+ JVM process on UNIX platforms even if the wrapper.ignore_signals property
+ was set to true. Earlier versions of the Wrapper would generate a
+ WRAPPER_CTRL_SHUTDOWN_EVENT when a TERM signal was received. On Windows
+ that signal should never be ignored. To resolve this a new
+ WRAPPER_CTRL_TERM_EVENT was added making it possible to selectively ignore
+ the TERM signals. This change may affect user implementations of the
+ WrapperListener.controlEvent() method. Bug #1086344.
+* The Windows version has a feature which allows the user to immediately kill
+ the Wrapper and its Java application without waiting for a clean shutdown
+ by pressing CTRL-C twice. Windows sends the CTRL-C signal to both the
+ Wrapper and Java processes. Due to a rare timing problem, it was possible
+ for the Java process to get the signal first and initialize a shutdown
+ before the Wrapper could respond to the signal. In this case the Wrapper
+ was interpreting this as a second CTRL-C signal even though the user only
+ pressed it once.
+* If the wrapper.anchorfile or wrapper.pidfile properties are used on Windows
+ they were being unintentionally deleted if the -t, -p, -i, or -r commands
+ were used while another Wrapper instance was running. In the case of the
+ anchor file, this would result in the Wrapper being shutdown unintentionally.
+ This was not an issue on non-Windows versions. Bug #1108517.
+* Fix a security problem where the value of the wrapper.ntservice.account
+ and wrapper.ntservice.password properties were being stored in plain text
+ within the registry if they were specified on the command line when
+ installing the Wrapper as a Windows service. Bug #1110183.
+* Add a pair of properties wrapper.ntservice.password.prompt and
+ wrapper.ntservice.password.prompt.mask which which will cause the Wrapper
+ to prompt the user for an account password when it is being installed as
+ an NT service.
+* Added system properties to make it possible to configure whether or not
+ the WrapperSimpleApp and WrapperStartStopApp helper classes will wait
+ for the configured main methods to complete before reporting that the
+ application has started. See the javadocs for these classes for more
+ details.
+* Modify the HP-UX build so that it now dynamically links with the pthread
+ library. This was to make the binaries work with HP-UX 11.00. Thanks to
+ Sun Kun Choi for the patch.
+* Add new wrapper.statusfile and wrapper.java.statusfile properties which can
+ be used by external applications to monitor the internal state of the Wrapper
+ or JVM at any given time. These will not be useful to most users.
+* Add a new wrapper.commandfile property which can be used by external
+ applications to control the Wrapper and its JVM.
+* Add a new wrapper.java.idfile property which can be used by external
+ applications to monitor the internal state of the JVM at any given time.
+* Add a warning on startup if the JVM has a SecurityManager set but the
+ wrapper.jar has not been granted the AllPermissions permission. Failure
+ to do so will almost certainly lead to the Wrapper throwing a number of
+ errors and this helps to point out the cause.
+* Add a security model which protects most Wrapper method calls when a
+ SecurityManager has been registered. See the Security Model section
+ for more details.
+* Add a new pair of batch files which can be used to start and stop the
+ Wrapper when installed as a service.
+* Add new -q and -qs commands to the Windows version of the Wrapper which
+ make it possible to query the currently installed status of the service.
+* Fix a problem where the wrapper.java.library.path.append_system_path
+ property was not working correctly on Windows when the system PATH
+ contained quotes. Bug #1238726.
+* Modify the usage output of the Wrapper on all platforms so the Wrapper's
+ version is now included. It was not previously possible to get the version
+ of the Wrapper being used without launching a JVM.
+* Add a pair of new methods WrapperManager.stopAndReturn() and
+ WrapperManager.restartAndReturn() which make it possible for code to
+ stop or restart the JVM and then continue until the JVM is shutdown.
+ This can be useful for shutdowns initiated within places like servlets,
+ whose operation is expected to complete.
+* Fix a problem on UNIX where the child JVM was sometimes leaving around
+ zombie processes after a restart. The SIGCHLD signal was not being handled
+ correctly. Thanks to Traun Leyden for the patch. Bug #1291201.
+* Implement the ability to catch control events using the WrapperEventLisener.
+ Feature Request #836975.
+* Add new wrapper.jvm.port, wrapper.jvm.port.min, and wrapper.jvm.port.max
+ properties which make it possible to control the port the JVM uses to open
+ a connection back to the JVM. The Wrapper uses to leave this up to the
+ OS, but some users were having problems with the default conflicting with
+ other ports.
+* Switch from using ftime() to gettimeofday() on UNIX platforms to work around
+ a problem where the Wrapper would not run on new versions of OSX because
+ they deprecated the ftime() function call. Thanks for the patch by
+ Michael Macaluso. Bug #1313162.
+* Remove the shutdown timeout from the UNIX shell script. It is not needed
+ and can cause a zombie JVM if the wrapper's internal shutdown timeout was
+ longer than that of the shell script.
+* Add the ability to specify integer property values in base 8 or 16 in
+ addition to base 10. Base 8 values start with a '0' and base 16 values
+ start with a '0x'.
+* Make it possible to set the umask on all files created by the Wrapper
+ as well as the default umask of files created by the JVM. Added new
+ wrapper.umask, wrapper.java.umask, wrapper.pidfile.umask,
+ wrapper.lockfile.umask, wrapper.java.pidfile.umask,
+ wrapper.java.idfile.umask, wrapper.statusfile.umask,
+ wrapper.java.statusfile.umask, wrapper.anchorfile.umask, and
+ wrapper.logfile.umask properties.
+* Improve the message when the native library can not be loaded to make mention
+ of the possibility of a 32/64 bit mismatch.
+* Add a new wrapper.monitor_thread_count property which makes it possible to
+ disable the Wrapper's counting of non-daemon threads and thus the shutting
+ down of the JVM when they have all completed.
+* Add support for BELOW_NORMAL and ABOVE_NORMAL options to the
+ wrapper.ntservice.process_priority property. Feature Request #1373922.
+* Ignore '#' characters which are included within double quotes in the value
+ of a property in the configuration file. Unquoted values must be escaped
+ with a second '#' characters or it will be interpreted as a comment.
+* Display the Wrapper banner in the JVM earlier so that it is displayed
+ even where there are startup errors.
+* Modify the WrapperSimpleApp and WrapperStartStopApp classes so that the
+ WrapperManager is always initialized immediately. This makes the output
+ clearer in the event of startup errors.
+* Fix a problem where the Windows ServiceManager was not correctly reporting
+ a startup error if a service failed on startup. The service was being
+ reported as having started even though it failed to start.
+* Fix a problem on UNIX versions where the Wrapper would go into a recursive
+ state of attempting to launch the JVM from failed child processes if there
+ was any problems executing the configured java process.
+* Rework the way the RUN_AS_USER setting in the UNIX shell script works so
+ the specified user is now set regardless of the command being executed.
+ To make sure the user never has to enter the password twice when running
+ the script, it now recurses after changing the user. The script then
+ runs entirely as the configured user.
+* Improve the message that is displayed when attempting to start, stop, or
+ remove a windows service which is not installed.
+* Add new wrapper.lockfile property which makes it possible to specify a
+ lock file containing a pid.
+* Modified the sh script so it now creates a lock file on startup in the
+ /var/lock/subsys directory if it exists. This is needed by fedora systems
+ on shutdown.
+* Store javadocs in tar distibutions in a nested tar file to avoid problems
+ with long filenames in some tar distributions.
+* Fix a problem with the WrapperSimpleApp and WrapperStartStopApp helper
+ classes where on heavily loaded systems it was possible for the Wrapper
+ to get a running thread count of 0 and shutdown before the main thread
+ had a chance to be started.
+* Add a new wrapper.thread_count_delay property which will force the
+ WrapperManager to wait the specified number of seconds before it begins
+ to check the number of running threads.
+* Fix a problem where the wrapper.java.library.path.append_system_path
+ property was appending the PATH rather than the LD_LIBRARY_PATH environment
+ variable on Unix systems. PATH is correct for Windows systems.
+* Add a new wrapper.logfile.rollmode property which makes it possible to
+ control how and when the logfile is rolled. Feature Requests #864463,
+ #1085097, and #1085850.
+* Fix a problem on Linux where the test for the status of the Java child
+ process would sometimes fail causing the Wrapper to shutdown with the
+ error "Critical error: wait for JVM process failed (No child processes)"
+ rather than restart the child JVM. Users who encountered this problem
+ found it easy to reproduce, but it only happened on some systems.
+* Modify the way the UNIX shell script tests for the existence of a process
+ matching the pid in an existing pid file. It now verifies the process
+ command as well as the pid to fix a system reboot problem where a stale
+ pid has been reused by another application, making the script think the
+ wrapper was already running.
+* Add support for the GNU libjcj JVM. Like JRocket, it requires slightly
+ different thread counting.
+* Add support for Linux 64-bit PPC and Solaris 32-bit x86 versions.
+* Add a new set.default.ENV syntax to the configuration file making it
+ possible to environment variable values which do not overwrite existing
+ values, ie. to specify a default value.
+* Added a new wrapper.console.flush property which forces the wrapper to
+ explicitly flush stdout after each line of log output.
+* Change the error shown when the JVM shuts down prematurely during a
+ shutdown to a warning message.
+* Fix a problem where the Wrapper would show the following error message
+ if user code called System.exit from within the WrapperListener.stop
+ callback method. This would happen if the stop class's main method
+ registered with the WrapperStartStopApp called System.exit.
+ "JVM exited unexpectedly while stopping the application."
+ Bug #945976.
+* Add a new wrapper.syslog.ident property which makes it possible to
+ specify the identity used in syslog entries on UNIX. This was possible
+ in older versions but was set using the wrapper.ntservice.name property.
+ Bug #1432855.
+* Add support for MacOSX Universal Binary distributions.
+* Add support for Delta Pack distributions. This is a distribution that
+ contains the binaries of multiple platforms.
+
+3.1.2
+* Modify the way boolean system properties are resolved by the WrapperManager
+ so it is now possible to set them to true or false rather than assuming they
+ are true if set.
+* Fix a problem where some localized error messages were not having their
+ tokens replaced correctly.
+* Fix a problem when using the WrapperStartStopApp helper class. The usage
+ text was incorrectly being displayed in the console if an exception was
+ thrown while executing the main method of the configured stop class. This
+ did not change the functionality of the application, but it did cause some
+ confusion.
+* Fix a problem on Windows where a library path or class path which ended in
+ a backslash was preventing the Wrapper from launching the JVM. The Windows
+ OS was using the backslash to escape the quote used to close the path. The
+ fix was to add a second backslash where needed.
+* Added a new wrapper.java.command.loglevel property which makes it possible
+ to control the log level of the generated java command.
+* Add support for escaped quotes when stripping quotes on UNIX for the
+ wrapper.java.additional. and wrapper.app.parameter. properties.
+* Change the default value of wrapper.jvm_exit.timeout from 5 to 15 seconds.
+ The old default was too fast for some applications which take a while to
+ exit. Applications which were exiting promptly will not see any difference.
+* Fix a problem where the JVM would restart at certain times when using the
+ system time based timer due to an overflow error. This problem was
+ introduced in 3.1.0. Due to a separate bug in 3.1.0, the Wrapper would
+ shutdown rather than simply restarting the JVM as was happening in 3.1.1.
+ The last restart happened on Aug 21, 2004. It will next occur Oct 10, 2004
+ and repeat at regular intervals. There are no problems when using the new
+ Tick based timer. Bug #1014405.
+* Correct the wrapper.logfile.maxsize property so that a a kilobyte is now 1024
+ rather than 1000, and a megabyte is a megabyte. We aren't a hard drive
+ manufacturer after all.
+* Add try-catch blocks around all thread entry points in the Windows version.
+ This has always been done in the main function, but these blocks will help
+ to narrow down the cause of problems should they ever be encountered in
+ control or service handlers.
+* Centralize shutdown code on UNIX version in an appExit method as was already
+ being done for Windows versions.
+* Fix a problem where the build.sh was not correctly using the included ant
+ if an ANT_HOME environment variable was defined.
+* Add a new wrapper.single_invocation property which will prevent multiple
+ invocations of an application from being started on Windows platforms.
+ The shell script handles this on UNIX platforms. Feature Request #889123.
+* Fix a crash problem introduced in 3.1.1, caused by a pair of uninitialized
+ pointers. The crash was possible on all platforms but would only happen
+ if the Wrapper was started without any arguments. It would not affect
+ users running the Wrapper normally. Bug #1018481.
+* Fix a problem with the run as user feature of the shell script on Solaris.
+ Needed to be using /usr/xpg4/bin/id rather than /usr/bin/in if available.
+ Bug #1024008.
+* Replace calls to usleep with nanosleep on platforms where it is available.
+ This was to fix an occasional hang on a specific Solaris machine. It would
+ occasionally hang on calls to usleep. From research, it appears that usleep
+ has problems when signals are encountered while sleeping. Still testing
+ whether or not this change solved the problem.
+* Upgrade the version of Ant included with source releases to 1.6.2 to fix
+ some problems generating jni headers when building with Java 1.4.2.
+* Upgrade the version of Cocoon included with source releases to 2.0.4 to
+ fix some problems generating documentation using Java 1.4.2.
+* Display a warning if the exit status of a JVM process ever returns the
+ STILL_ACTIVE status on Windows. There was no known problem here, just
+ noticed it while looking over the code.
+* Display a descriptive error message on Windows if the the JVM process crashes
+ due to an uncaught exception in native JVM code.
+* Add a test for invalid jvm arguments set using the wrapper.java.additional.
+ properties. Invalid arguments could cause the Wrapper startup to fail in
+ non obvious ways if they are mistaken by the JVM as the main class.
+
+3.1.1
+* Modified the way libwrapper.so is built on Solaris and Linux so that it
+ no longer statically links its required libraries.
+* Fix a file handle leak when calling WrapperManager.getUser or
+ WrapperManager.getInteractiveUser on Windows platforms.
+* Fix a problem introduced in 3.1.0 where the JVM would not be restarted
+ correctly if it quit after a ping timeout to let the Wrapper resynch and
+ restart it.
+* Fix a problem where CTRL-C was not being handled correctly if the console
+ was configured to be shown when running as an NT service.
+* Fix a problem where signals fired at UNIX versions of the wrapper were
+ not being handled correctly when the tick timer was being used.
+* Fix a synchronization problem in the logging code which would
+ occassionally cause the Wrapper to crash with an Access Violation.
+ The problem was only encountered when the tick timer was enabled,
+ and was only seen on multi-CPU systems. Bug #949877.
+* Fix a problem when using the tick timer where the Wrapper would sometimes
+ exit on startup due to an uncaught SIGALRM. Only reported on multi-CPU
+ Solaris systems.
+* Fix a problem where the Wrapper would sometimes hang on shutdown if
+ another thread called System.exit while the Wrapper was shutting down.
+ Bug #955248.
+* Fix a problem introduced in 3.1.0 where a very very large CPU timeout
+ warning message was being displayed if the system time was set back
+ while using the default system timer.
+* Added a new property, wrapper.anchorfile, which makes it possible to
+ cause the Wrapper to shutdown by deleting an anchor file. The UNIX sh
+ script has been modified to optionally make use of this feature.
+* Add a debug message at startup which makes it clear which timer is being
+ used.
+* A Windows user reported that using forward slashes in the path the log
+ file was failing. Avoid this problem by always converting '/' to '\'
+ in the wrapper.logfile property on Windows.
+* Fix a problem where it was not possible disable the wrapper log file as
+ documented in the wrapper.logfile property. Most likely broken way back
+ in version 2.2.5.
+* Add some additional error checks after calls to control the pipe between
+ the JVM and Wrapper as well as improving the messages around other socket
+ related error messages.
+* Fix a problem on some HP-UX systems were not working correctly because
+ the EAGAIN and EWOULDBLOCK constants are not equal with some compilers.
+* Change some of the defaults in the src/conf/wrapper.conf.in file which
+ ships with the Wrapper to avoid confusion with new users.
+* Rewrote the routine which reads and logs console output from the JVM
+ for Windows versions. Internal buffers are now scaled dynamically,
+ fixing a problem where long lines were being wrapped at 1024 characters.
+ This rewrite also resulted in a 4 fold increase in speed when the JVM is
+ sending large quantities of output to the console.
+* Increase debug output on UNIX platforms when a signal is caught. When
+ possible, information about where the signal came from is now logged.
+* Modified the way log output from within signal handlers is handled so it
+ is now queued and then logged by the main event loop.
+* Back out a 3.1.0 change where a JVM that had failed to exit cleanly was
+ sent a SIGTERM prior to a SIGKILL. The SIGTERM made no difference and
+ slowed down the forced shutdown. A modification to the event loop made
+ the functionality more difficult to implement.
+* Add the ability to set the user that the Wrapper and its JVM will run as
+ from within the sh script on UNIX platforms.
+* Add an icon resource to the Wrapper binary on Windows versions.
+* Fix a typo in the UNIX sh script which caused an extra slash to be included
+ in the path of the pid file. Was not causing any known problems.
+* Added support for 64-bit HP-UX. Big thanks to Venkatesh Sellappa for
+ supplying the patch.
+* Fix a deadlock problem introduced in 3.1.0 with some FreeBSD systems. Not
+ all users were experiencing it, but those who did were able to reliably
+ reproduce the problem. The problem appears to have been caused by
+ FreeBSD bug #kern/64313.
+* Make the signal handling variables in the wrapper native library volatile.
+ Directly this was to fix a compiler warning on HP-UX64 systems but it
+ should also make the calls more efficient.
+
+3.1.0
+* The license was revised for this version to include a copyright omission.
+ This change is to be retroactively applied to all versions of the Java
+ Service Wrapper starting with version 3.0.0. The changes should have
+ no effect on users.
+* The Online documentation and web site were both reworked. The logo has
+ been updated so that Duke is no longer used. The new online site now
+ has the ability for users to logon and append comments to any page.
+* Added a new batch file which accepts commands like the UNIX shell script.
+ The new file is offered as an alternative to the default batch files, and
+ can be found at src/bin/AppCommand.bat.in. Thanks to Mike Castle for
+ donating the new script.
+* The Windows version of the Wrapper was not correctly registering that it
+ would accept SHUTDOWN messages when running as a service. The Wrapper
+ was getting the message anyway so this should not change functionality.
+ Thanks to Jason Tishler for noticing this and sending in a patch.
+* Add a new property, wrapper.native_library, which can be used to specify
+ the base name of the native library which is loaded by the WrapperManager
+ class.
+* Modify the WrapperManager class so it now stores references to System.out
+ and System.err on initialization and always writes to those stored streams.
+ This makes sure that all Wrapper console output always goes to the
+ wrapper.log file even if user code overrides those streams with calls to
+ System.setOut and System.setErr. This was necessary to prevent deadlocks
+ in such user code from affecting the functionality of the Wrapper.
+* Fixed a problem where some environment variables where not being correctly
+ loaded from the system registry when running as an NT service. Big thanks
+ to Eric Smith for tracking this down and submitting a patch. It turns out
+ that the putenv function was not being used correctly.
+* Modified the way the wrapper.conf file is loaded so it will now read the
+ contents correctly even if the line feeds in the file are incorrect for
+ the current platform. Windows line feeds had been causing problems when
+ used on UNIX platforms. Feature Request #829896.
+* Added a new property, wrapper.ntservice.console, which allows a console to
+ be displayed when running as an NT service.
+* Fixed a problem where the request thread dump on failed JVM exit feature
+ had never worked when running as an NT service. Bug #831775.
+* Add a new property, wrapper.console.title, which makes it possible to set
+ the title of the console in which the Wrapper is currently running. This
+ currently only works on Windows platforms.
+* Added a new method, setConsoleTitle, to the WrapperManager class which
+ enables the application to dynamically set the console title. Like the
+ wrapper.console.title property, this only works on Windows platforms.
+* Improved the algorithm of the request thread dump on failed JVM exit feature
+ so that extremely large thread dumps will not be truncated when the JVM
+ is killed.
+* Fix a problem where CTRL-C was being ignored by the WrapperManager if a
+ WrapperListener is never registered. This is not possible if the Wrapper
+ is being used correctly but never the less a user did come across it.
+* Add some additional debug output to help identify the cause of problems
+ loading the native library.
+* The WrapperManager class now checks to make sure that its current version
+ matches the version of the native library and Wrapper. If there are any
+ discrepancies found then appropriate warnings will be displayed, but the
+ Application will still be allowed to start. This was added to make obvious
+ the cause of problems resulting from mismatched versions.
+* Added a new property wrapper.use_system_time system time. By setting this
+ property to false, the Wrapper will start using a new experimental timer
+ which uses a background thread to manage time rather than the system time.
+ This has a number of advantages over using the system time and should give
+ most users even more reliable behavior when the system is under high load
+ or there are changes being made to the system time. The timer is very
+ critical to the operation of the Wrapper so the old behavior is left as
+ the default for the time being until this feature has had the chance to be
+ "time" tested. If all goes well then this will be enabled as the default
+ in a future version of the Wrapper.
+ A pair of related properties, wrapper.timer_fast_threshold and
+ wrapper.timer_slow_threshold were also added to aid in debugging.
+* Rework the logging code so it is now thread safe. The addition of the
+ timer thread means that there is now more than a single thread accessing
+ that code. This was causing problems as the two threads tried to use the
+ same buffers. As part of this change, a new format variable 'D' was added
+ to display the thread which is doing the logging.
+* Fix a problem where a thread dump would be invoked if the request thread
+ dump on failed JVM exit was enabled and the user forced an immediate
+ shutdown by pressing CTRL-C more than once.
+* Add getUser and getInteractiveUser methods to the WrapperManager class to
+ make it possible for user code to query information about the user running
+ Wrapper or the user who is interacting with the Wrapper and its JVM.
+ Feature Request #812175.
+* The Wrapper will now always exit with the exit code used to terminate the JVM
+ whether System.exit is used or WrapperManager.stop. When running as an NT
+ service the Wrapper now correctly returns the correct exit code to the
+ service manager so failure recovery tools should now work correctly.
+ Feature Request #852491.
+* Add a status command to the UNIX shell script which can be used to find out
+ whether or not the wrapper is currently running. Patch submitted by
+ Joseph Benavidez.
+* Modify the WrapperSimpleApp and WrapperStartStopApp so that the main method
+ of a class is located even if it exists in a parent class rather than the
+ class specified.
+* To make debugging classpath problems easier, the Wrapper now verifies all
+ classpath entries before launching a JVM and logs debug level warnings for
+ any entries that do not exist.
+* Fix a problem where it was possible to define a zero length filter that would
+ trigger on any output.
+* Add some additional debug output to make it easier to debug startup,
+ shutdown and restart problems.
+* Modify the way the Wrapper forcibly kills a frozen JVM on UNIX platforms so
+ that it now sends a SIGTERM, waits up to 5 seconds, then sends a SIGKILL.
+* Add a new wrapper.java.library.path.append_system_path property which will
+ cause the Wrapper to append the system path to the generated library path.
+ Feature Request #917902.
+* Fix a problem where spaces around the '=' character of a property definition
+ were rendering the property invisible to the Wrapper. Bug #916001.
+* Fix a problem where the first ping timeout after the JVM was started was
+ still hard coded at 30 seconds. This was causing a combination of large
+ values of wrapper.ping.interval and wrapper.ping.timeout to fail.
+* Fix a problem where the JVM would fail to shutdown cleanly if the Wrapper
+ was asked to stop too soon after launching a JVM. This was leading to the
+ JVM being killed after the shutdown timeout expired. Bug #917281.
+* Added an adviser which will print out explanatory messages to the console
+ and wrapper log file when the Wrapper encounters a commonly made
+ configuration mistake. This is designed to cut down on support requests
+ by new users. Can be disabled using the wrapper.adviser property.
+* The bash script and the realpath utility have been deprecated since version
+ 3.0.3. They have been removed in this release. The sh script is recommended
+ on all UNIX platforms, and the realpath utility which was used by pre-3.0.3
+ bash and sh scripts has not been used since.
+* Add the wrapper.startup.delay property along with console and service
+ specific variants which make it possible to configure a delay between the
+ Wrapper being launched and the first JVM being launched.
+* Promote the wrapper.debug property back from being "deprecated". It has
+ continued to be useful and deserved documentation and official status.
+* Add wrapper.on_exit. properties to control what happens when a exits
+ based on the exit code.
+* Modify the way calls to System.in.read() are handled so that they now block
+ rather than throwing an exception. Currently, System.in can not be used with
+ the Wrapper because of the way I/O is passed between the Wrapper and JVM.
+* Modified the Windows batch files to fix a problem where the path to the
+ Wrapper.exe contained more than one "/bin". The new batch files are much
+ simpler and should be easier to customize if needed. Bug #925308.
+* Modified the wrapper.java.initmemory and wrapper.java.maxmemory properties
+ so that they now default to a value of 0 which causes the -Xms and -Xmx
+ parameters to be omitted from the command used to launch Java. This
+ will cause the JVM to use its own default values and also makes it possible
+ to specify the memory parameters using the wrapper.java.additional.
+ properties.
+* Added a pair of environment variables, WRAPPER_FILE_SEPARATOR and
+ WRAPPER_PATH_SEPARATOR, whose values are set to either '/' and ':' or
+ '\' and ';' on startup. They can be used in the wrapper.conf file
+ to construct platform independent property values.
+* Add a new wrapper.working.dir property which makes if possible to change
+ the Wrapper and JVM's working directory to a location other than the
+ location of the Wrapper binary. Feature Request #738160.
+
+3.0.5
+* Added support for SGI Irix. Big thanks to Andreas Wendt for supplying the
+ patch.
+* Due to a bug in the build, the native library was not included in the 3.0.3
+ or 3.0.4 binary releases for OSX, building from source was working correctly.
+ This has been fixed and the build greatly simplified to avoid such problems
+ in the future. Bug #791755.
+* Changed the default location of the pid file generated by the sh script to
+ exist in the same directory as the sh script rather than in the /var/run.
+ This can be changed by setting the PIDDIR variable in the sh script used to
+ launch the Wrapper.
+* Added support for the wrapper.pidfile property on the Windows platform.
+* Added the wrapper.java.pidfile property which will cause the pid of the
+ java process to be written to a specified file.
+ (WINDOWS USERS) If you are using a wrapper.conf file that was created prior
+ to version 3.0.0 of the Wrapper, then you may have this property defined in
+ your configuration file. You will get an error on startup if the specified
+ path does not exist.
+* Stop clearing the file creation mask when the Unix version of the Wrapper is
+ run as a daemon process. The file creation mask will not be inherited from
+ the process which launches the Wrapper. Bug #788849.
+* Modify the sh script so it works on Linux, then deprecate the bash script.
+ This means that all Unix platforms can now use the same script to control
+ the Wrapper. Thanks to Mike Castle for the patch. The bash script can still
+ be found in the release, but it is deprecated and will be removed in a
+ future version.
+* Modified the sh script so it is now possible to set the nice priority in the
+ script configuration block.
+* Remove output to System.out in the WrapperManager.requestThreadDump() method.
+ If some JVM threads were hung while accessing the System.out object,
+ attempting to do a thread a dump would cause the calling thread to hang as
+ well. Thanks to Thomas Hart for the patch.
+* Make it obvious in the log whether or not the Wrapper was started as a
+ daemon process on UNIX systems.
+* Modify the way restarts requested from the JVM, or caused by a filter are
+ handled. The Wrapper will no longer reset the restart count in either of
+ these cases. If an application runs for longer than the
+ wrapper.successful_invocation_time timeout then the count will still be
+ reset back to 0.
+* Added a new wrapper.ignore_signals property which makes it possible to
+ configure the Wrapper so it will ignore CTRL-C, HALT and INT signals.
+* Modify the WrapperManager.isLaunchedAsService() method on UNIX systems so it
+ now returns true if the Wrapper was launched with the wrapper.daemonize flag
+ set.
+* Added a pair of MBean interfaces which allow the Wrapper to be controlled
+ using JMX. See the new JMX section in the documentation for details.
+ Thanks to Sal Ingrilli for help with testing.
+* Modify the Windows build so the Wrapper.exe and Wrapper.dll files can now
+ be built from Ant if MSVC is installed.
+* Added a new wrapper.ping.interval property which lets users control the
+ frequency that the Wrapper pings the JVM. Feature Request #607768.
+* When a JVM refuses to shutdown, the Wrapper can be configured to request a
+ thread dump using the wrapper.request_thread_dump_on_failed_jvm_exit
+ property. The Wrapper was then waiting 1 second before the process was
+ killed. This was not always long enough, resulting in a truncated thread
+ dump. Increased the pause to 3 seconds. Feature Request #633761.
+* Fix a bug where wrapper.app.parameter. and wrapper.java.additional.
+ properties declared from the Windows command line were not correctly
+ handling spaces in their values. Support Request #802139.
+
+3.0.4
+* Fix a problem on UNIX systems where requesting a second thread dump any time
+ during the life of a single Wrapper process would cause the Wrapper and JVM
+ to shutdown rather than perform the thread dump.
+* Fix a problem where a, user without permission, attempting to stop an
+ application was able to delete the pid file even though they were unable
+ to stop the application itself. This would make the scripts think that
+ the application was stopped when was actually still running.
+* Fix a problem where an application was being killed prematurely if it took
+ longer than 6 seconds to exit on its own. The scripts now make sure that
+ an application always has enough time to shutdown cleanly.
+* Improve the debug output so that packet codes are now shown using a name
+ rather than a raw number.
+* Reduce the frequency of "Waiting to stop..." messages displayed when removing
+ an NT service that is currently running. Decreased frequency from once per
+ second to once every five seconds.
+* Fix a minor problem where the hour in the date returned by
+ WrapperInfo.getBuildTime() was not base 24.
+* Added -t and -p command line options to the Windows version of the Wrapper
+ to sTart and stoP the Wrapper as an NT service. This can be used in place
+ of "net start" and "net stop", which do not always work correctly when a
+ service takes a long time to start up or shutdown. See the Launching Your
+ Application (Win32) section for more details.
+* Add a new method WrapperManager.stopImmediate which will cause the JVM to
+ exit immediately without calling any stop methods or shutdown hooks.
+* Add a new class, WrapperActionServer, which makes it easy to remotely control
+ the Wrapper remotely by opening a socket and sending commands. See the
+ javadocs of the class for more details.
+* Fix bug #744801. A Java GUI was not being displayed when the application was
+ run in either console mode or as a service with wrapper.ntservice.interactive
+ enabled. This problem was introduced in Version 3.0.0 when using 1.2.x or
+ 1.3.x versions of Java. To use interactive services with 1.2.x or 1.3.x
+ versions of java, please review the documentation for the
+ wrapper.ntservice.interactive property.
+* Fix a problem where the JVM was not receiving CTRL-C and CTRL-CLOSE events
+ when running under the Wrapper on Windows. This was not a problem in most
+ cases as the Wrapper was taking care of the processing of the events. But
+ the WrapperListener.controlEvent() method was not being called as documented.
+* Changed the way the WrapperSimpleApp and WrapperStartStopApp respond to
+ control events so that the JVM will respond and call WrapperManager.stop()
+ even when being controlled by the Wrapper.
+* Modified the suggested behavior of the WrapperListener.controlEvent() method.
+ Users who have implemented the WrapperListener interface themselves should
+ review the Javadocs. The changes are not required and applications will
+ continue to function as they did before.
+* Added support for DEC OSF1 (Alpha). Big thanks to Andreas Wendt for
+ supplying the patch.
+* Fix a problem where the sh and bash scripts were failing if the path to the
+ script contained spaces.
+* Fix a problem where the JVM would sometimes hang when trying to shutdown if
+ the wrapper.key parameter was passed to the JVM while not being controlled
+ by the Wrapper. This would happen if a user copied the command from the
+ Wrapper's debug output and attempted to run it as is without first removing
+ the wrapper.key parameter.
+* Implement the ability to specify an NT service's load order group in response
+ to feature request #764143. See the javadocs for the new
+ wrapper.ntservice.load_order_group property for details.
+* Improve the error message displayed when the NT EventLog is full in response
+ to feature request #643617. The EventLog output will now be disabled if any
+ errors are encountered while logging events. This prevents the error from
+ repeating.
+* Improve the error message displayed on Windows when the configured Java
+ command can not be executed or does not exist.
+* Fix a problem where the Wrapper was leaving a pipe unclosed each time the JVM
+ was restarted on all UNIX platforms. This was causing the Wrapper to run out
+ of file handles. Bug #767267, discovered and patched by David Wong.
+* Fix a problem where the '#' character, which signifies a comment, could not
+ be included in property values. A double hash, '##' will now resolve into a
+ '#' within the property value. Bug #777303.
+* Added support for FreeBSD. Big thanks to Alphonse Bendt for supplying the
+ patch.
+* Make the wrapper.port property optional.
+* Changed the way environment variables are loaded from the registry on Windows
+ platforms so users will no longer get warning messages about not being able
+ to handle very large environment variables. Prior versions could only handle
+ environment variables whose expanded value was less than 2048 characters in
+ length.
+* Fix a problem on UNIX platforms where a shell used to start the Wrapper
+ running as a detached process would hang when the user attempted to exit
+ the shell. Thanks to Mike Castle for this patch.
+
+3.0.3
+* Added support for Mac OS X. Big thanks to Andy Barnett for supplying the
+ patch.
+* Fix a segmentation fault on UNIX systems when the first console output
+ from the JVM was an empty line. Thanks to Mike Castle for finding this.
+* Fix a problem where a 0 length malloc was being called if there were no
+ configured filters. This was fine on most platforms but caused a crash
+ on MAC OS X.
+* Rework the initialization of the bash and sh scripts so that they will
+ work correctly when referenced as symbolic links. Thanks go out to Richard
+ Emberson for the code to resolve symbolic links.
+* Deprecated the realpath binary in the *NIX distributions as it is no longer
+ used by the bash or sh scripts. It is being left in for now so as not to
+ break the build scripts of other projects, but it will be removed after a
+ couple more releases.
+* Added a test to make sure that wrapper.ntservice.interactive is not set to
+ TRUE when an account is specified using wrapper.ntservice.account.
+
+3.0.2
+* Modified the sh and bash scripts so that console log output is disabled by
+ default when the scripts are launched with the 'start' action. Running with
+ the 'console' action will still send output to the console. Logging to the
+ file is still enabled.
+* Modified the wrapper.ping.timeout property so it also controls the ping
+ timeout within the JVM. Before the timeout on responses to the Wrapper
+ could be controlled, but the ping timeout within the JVM was hardcoded to
+ 30 seconds.
+* In the last release, some work was done to avoid false timeouts caused by
+ large quantities of output. On some heavily loaded systems, timeouts were
+ still being encountered. Rather than reading up to 50 lines of input, the
+ code will now read for a maximum of 250ms before returning to give the main
+ event loop more cycles.
+* Fix a problem where the values of environment variables set in the
+ configuration file were not correct when those values included references
+ to other environment variables.
+* Fix a potential buffer overflow problem if configuration properties
+ referenced extremely large environment variables.
+* Fix a potential problem where the inability to expand very large environment
+ variables would have led to an access violation when run as an NT service.
+* Add some extra checks in the event where the native library can not be loaded
+ so that the WrapperManager can differentiate between the library missing and
+ not being readable due to permission problems.
+* Remove the wrapper.ntservice.process_priority from the default wrapper.conf
+ because its use can produce unexpected results if used improperly. Please
+ see the property documentation for details.
+* Fix a problem where environment variables in the registry which had no value
+ were causing the Wrapper to crash with an access violation. This was
+ introduced in version 3.0.0 with the feature to load environment variables
+ from the registry. The offending registry entry was WV_GATEWAY_CFG which
+ appears to be related to Oracle.
+
+3.0.1
+* Fix a problem with the wrapper.disable_shutdown_hook. Due to a typo in the
+ source, the property was being ignored. This was broken in the 3.0.0
+ release.
+* Fix a problem with the HP-UX release build reported by Ashish Gawarikar.
+* Add the ability to set environment variables from within the configuration
+ file or from the command line.
+* Fix a problem on HP-UX and AIX machines where the stop() function in the
+ shell scripts was causing a syntax error due to a conflict with a like named
+ shell command on those platforms. This appears to be an issue with the
+ Korn shell on all platforms.
+* Fix a problem where very heavy output from the JVM can cause the Wrapper to
+ give a false timeout. The Wrapper now only reads 50 lines of input at a time
+ to guarantee that the Wrapper's event loop always gets cycles.
+* Fix a problem on UNIX versions where extra line breaks would sometimes be
+ added to the logged output when there was large amounts of output being
+ sent from the JVM.
+* Fix a problem where a large number of calls to WrapperManager.log()
+ immediately before the JVM exits could lead to the Wrapper incorrectly
+ reporting that the JVM exited unexpectedly.
+
+3.0.0
+* Deprecated the com.silveregg.wrapper package in favor of
+ org.tanukisoftware.wrapper. The classes and interfaces in the silveregg
+ package will continue to function, but migration to the new package should
+ be done when possible. See the project history for details.
+* On Windows systems change any forward slashes in the wrapper.java.command
+ property to back slashes. Some users had reported having problems on
+ Windows XP.
+* Implemented feature request #633178. Added WrapperManager.requestThreadDump()
+ to force the current JVM to immediately perform a thread dump.
+* Fixed bug where wrapper.logfile.maxsize was being set to 0 if the 'k' or 'm'
+ unit was omitted.
+* Add the ability to specify an account name and password when installing an
+ NT service.
+* Add a property, wrapper.ntservice.interactive, which makes it possible to
+ control whether or not the Java process can gain access to the desktop while
+ it is running as an NT service.
+* Add limited support for 1.2.x versions of Java. Shutdown hooks are
+ supported until Java 1.3 so those functions will be disabled. If the
+ application displays a GUI then Java 1.3 should be used as the GUI can not
+ currently be displayed when using Java 1.2.x.
+* Made it possible to use the wrapper.pidfile property on all *nix platforms.
+ Please notice that the property has been removed from the default
+ wrapper.conf file. The property is not needed when the wrapper is launched
+ with the bash shell script. The sh shell script will set the wrapper.pidfile
+ when the wrapper is launched. If either of the scripts provided with the
+ Wrapper distribution are used then the wrapper.pidfile should always be
+ removed from your wrapper.conf file.
+* Added a new wrapper.daemonize property which, when set, will form the wrapper
+ process to be a detached non-session group leader. This makes it possible to
+ launch the wrapper in such a way that it will not be terminated when the user
+ launching the process logs out. This had been a problem on Solaris systems
+ when using the sh shell. The default sh and bash scripts both make use of
+ this in the default. Please update your scripts for use with this version.
+ Thanks to Rajiv Subrahmanyam for the patch.
+* Fix a problem where the Wrapper was incorrectly counting the number of
+ non-daemon threads in BEA's JRockit Virtual Machine. This was causing the
+ application to shutdown when the non-daemon thread count dropped to 1.
+* Added support for building the wrapper on AIX and HP-UX systems. Thanks for
+ the patches involved go out to Ashish Gawarikar and William Lee.
+* Implement feature request #653131 to force the JVM to immediately exit when
+ the user presses CTRL-C multiple times.
+* Added a 'console' action to the bash and sh scripts to make it possible to
+ launch the Wrapper in the current shell process. The 'start' task will launch
+ the Wrapper as a spawned daemon process.
+* Fixed a problem where missing environment variables specified in classpath
+ or library path properties were not being handled correctly.
+* Implemented feature request #676599 to enable the filtering of JVM output to
+ trigger JVM restarts or Wrapper shutdowns. See the new
+ wrapper.filter.trigger.n and wrapper.filter.action.n properties.
+* Modify the Win32 version of the Wrapper so that Environment Variables are
+ always read from the system registry when the Wrapper is run as a service.
+ By doing this, it makes it possible to change or add the system environment
+ variables and have them take effect without having to first reboot the
+ machine.
+* Implemented cascading configuration files.
+* Changed the default value for the wrapper.java.initmemory property to be 3Mb.
+ The default on Windows and Linux JVMs is 2Mb, but the Solaris JVM requires
+ a minimum of 3Mb. The minimum value accepted by the Wrapper was changed
+ from 8Mb to 1Mb to make it possible to reduce the footprint of applications
+ to what is possible without using the wrapper.
+* Improve the parsing of configuration files so that leading and trailing white
+ space is now correctly trimmed. It is also now possible to have comments at
+ the end of a line containing a property.
+* Modify the way exceptions thrown by an application's main method are
+ presented to the user by the WrapperSimpleApp and WrapperStartStopApp so
+ they no longer look like a problem with Wrapper configuration.
+
+2.2.9
+* Added a new property, wrapperper.restart.delay, which allows the user to control
+ the amount of time to pause between a JVM exiting and a new JVM being
+ launched.
+* Fixed bug #611024. The Wrapper would sometimes fail to start if
+ wrapper.max_failed_invocations is set to 1.
+* Fix a problem where the number of non-daemon threads was not being calculated
+ in some cases.
+* Implemented feature request #491443. Environment variables referenced in the
+ wrapper.conf file will now be evaluated as the file is loaded. The windows
+ syntax for environment variables is used on all platforms to make them
+ platform independent.
+* Fixed a problem where the wrapper.conf was being open with both read and
+ write locks when a read lock is all that is needed. Made the wrapper fail
+ on startup if another application held a read lock on the conf file.
+* Modified the message displayed when the native library could not be found,
+ so that it is much more descriptive. Hopefully it will cut down on questions
+ caused by configuration problems.
+* Implemented feature request #613539. Modified the wrapper.java.library.path
+ to function like the wrapper.java.classpath.n properties so that multiple
+ directories can be specified in the library path in a platform independent
+ way. The old property is still supported, but deprecated.
+* Fix Bug #632215. The WrapperManager.isLaunchedAsService() method was always
+ returning false, even when run as a service under Windows. On linux, the
+ Wrapper is always run as a console app, so this method will always return
+ false.
+* Improve the message thrown when user code attempts to access System.in from
+ within a JVM being controlled by the Wrapper. System.in will not work
+ because the JVM is a spawned process.
+
+2.2.8
+* Fixed a compiler problem on Solaris some systems.
+* Added a new property, wrapper.cpu.timeout, which allows the user to control
+ how much time without receiving any CPU the Wrapper will tolerate before
+ displaying a warning message. The CPU timeout feature was added in 2.2.7
+ but the default timeout of 10 seconds was not configurable.
+* The Wrapper was only allowing 5 seconds between the JVM informing the
+ Wrapper that it was going to exit and the JVM process actually exiting.
+ This would cause the Wrapper to terminate the process prematurely in
+ cases where an application shutdown thread took longer than 5 seconds to
+ complete. The Wrapper now allows wrapper.jvm_exit.timeout seconds for
+ the JVM process to exit on its own before being forcibly terminated.
+* When there is a configuration problem or a resource is unavailable, a JVM
+ will sometimes exit abnormally very shortly after being launched. This
+ can lead the the JVM being infinitely restarted due to a simple class
+ path misconfiguration. To work around this, the Wrapper has always had
+ a hard limit of 5 restarts within a short period of time. If the JVM
+ has been running for more than a few minutes, then the count was reset.
+ In this version, a new property. wrapper.max_failed_invocations was added
+ to allow the max value to be set. The time period which the JVM must
+ now be running for the JVM launch to have been considered a success for
+ restart purposes is set using the new wrapper.successful_invocation_time
+ property.
+* The number of advanced properties which most users do not need has been
+ increasing as the Wrapper has been made more and more flexible. This
+ has been causing confusion in their usage by people who play with them
+ without first reading the documentation. To solve this, the advanced
+ properties were removed from the default configuration file. They still
+ function. But users must now read to the advanced configuration
+ documentation to learn about their existence. Added quite about to the
+ descriptions of these properties to hopefully clear up any confusion
+ about their usage.
+* When the JVM exits abnormally, the Wrapper will pause for a few seconds
+ before starting another JVM. If the user pressed CTRL-C during this
+ pause, a new JVM would still be launched. The new JVM was exiting
+ immediately but it was a waste of time. The Wrapper now recognizes the
+ event and aborts launching the new JVM.
+* Added a page to the documentation which shows inline javadocs. This
+ will hopefully make it easier to navigate them as part of the full
+ documentation set.
+* Added a new method to the WrapperManager which enables user code to
+ log at any log level.
+* Added a new Helper class WrapperStartStopApp which allows users to easily
+ integrate applications like Tomcat which use a separate class to stop
+ the application.
+* Added a samples section to the documentation. Just includes Tomcat 4
+ for now.
+
+2.2.7
+* Fix a problem where the JVM was trying to reconnect the Wrapper as it was
+ being shutdown. This was causing problems if the JVM was being restarted.
+* Added support for the system being suspended to RAM or disk. Also improved
+ wrapper performance when a system is under 100% load. See the new example
+ output in the example section.
+* Fix a problem where the log output was not being directed to a file called
+ wrapper.log in the same directory as the Wrapper binary in the event that the
+ configured wrapper log file could not be accessed.
+* Fix a problem where the Wrapper was not shutting down the JVM correctly when
+ all non daemon threads completed. Normally a JVM will exit when all of its
+ non daemon threads have completed so this was causing some problems.
+ (Thanks to Jung Tamas)
+* Added the ability to set the priority of the Wrapper and its JVM when run
+ as an NT service or console application. The same thing can be better
+ achieved on Unix systems by using "nice" in the shell script used to launch
+ the Wrapper. See the documentation for for details.
+* JVM information was not being displayed correctly when the Wrapper native
+ library could not be loaded.
+* Added a new property to cause the wrapper to attempt to request a thread dump
+ when the JVM does not exit on request.
+* Improved the documentation of the WrapperSimpleApp and WrapperListener
+ classes.
+* Adding a new property wrapper.shutdown.timeout to allow the user to extend
+ the length of time that an application is allowed to take shutting down.
+* Rework the way the shutdown process works so that System.exit will never be
+ called before the stop method in WrapperListener has had a chance to complete.
+* Add a Restart button to the TestWrapper application.
+* Fix a problem on Unix versions where '%' characters in Java output would
+ sometimes cause the wrapper to crash. Somehow missed getting this into the
+ last release.
+* Added a test to make sure that WrapperManager.stop is not called recursively.
+* Added support for building under Windows XP. Prebuilt installations had
+ already been working.
+
+2.2.6
+* Fix a problem where '%' characters in Java output would sometimes cause the
+ wrapper to crash. (Thanks to Frode Moe)
+* Added support for requesting a Java thread dump without shutting down the
+ Java process.
+* Fixed a problem on windows where the java command was looking in the windows
+ system and system32 directories for the java executable before checking the
+ path when the full path to the java executable was not specified in the
+ configuration file. This could lead to different JVM being run from the
+ Wrapper than was run if java -version was run from the command line. The
+ Wrapper will now attempt to resolve the full java path using the PATH
+ environment variable.
+* Added debug output showing Java version information when the JVM first
+ starts.
+* Modified c source to use /* */ style comments rather than // style comments.
+ Some people were having problems with some compilers.
+
+2.2.5
+* Added support for service descriptions for Win2k and XP.
+* Fixed bug issue when reading configuration files from Windows on Unix.
+* Deprecated the wrapper.debug property in favor of loglevels.
+* Added new logger functionality includes the following features:
+ Loglevels like Log4j, NT Eventlog support, UNIX syslog support and rolling
+ log files.
+* Added wildcard support for classpath entries in wrapper.conf.
+* Added the ability to specify configuration properties from the command line.
+* Changed the way NT services are installed so that a patched version of the
+ Wrapper.exe file no longer needs to be created to reference the
+ wrapper.conf file.
+
+2.2.4
+* The value of APP_NAME in the bash or sh scripts no longer needs to be the
+ same as the script.
+* Added the ability to format and/or disable file logging and output to the
+ console.
+* Set mode of executables in binary release tar files so that they can be run
+ without modification after being extracted.
+* Fixed line feeds in release so that bat files are always CRLF, unix scripts
+ are always LF. Other source files are always CRLF in ZIP archives and LF
+ in tar.gz archives.
+* Make the build fail if Wrapper.exe or Wrapper.dll do not exist for Windows
+ builds.
+* Added an empty wrapper.log to the releases so that the TestWrapper example
+ program runs out of the box.
+
+2.2.3
+* Added template scripts and conf files for ease of integration with other
+ applications.
+* Cleaned up the build.
+* The WrapperSimpleApp method of launchine applications was not working
+ correctly with applications whose main method did not return.
+* Add sample scripts and wrapper.conf files in the bin and lib directories.
+ These scripts are used to start a sample application which runs out of the
+ box. See the new example.html page in the documentation for more details.
+* Get rid of the platform specific directories in the bin and lib directories.
+* Enable relative paths for Windows version. In previous versions of Wrapper,
+ it was necessary to always use absolute paths because the working directory
+ of the wrapper would be then NT System32 directory when run as a service.
+* On the windows version, the wrapper always sets the current working
+ directory to the location of the wrapper executable immediately after
+ startup.
+* Improvements to the documentation / web page.
+
+2.2.2
+* Added HTML based documentation.
+
+2.2.1
+* Added Linux and Solaris build files.
+* Added Linux and Solaris documentation.
+
+2.2.0
+* Initial Public Release.
+
diff --git a/Rapla/service/doc/wrapper-community-license-1.1.txt b/Rapla/service/doc/wrapper-community-license-1.1.txt
new file mode 100644
index 0000000..dc02512
--- /dev/null
+++ b/Rapla/service/doc/wrapper-community-license-1.1.txt
@@ -0,0 +1,396 @@
+----------------------------------------------------------------------
+----------------- -----------------
+ Tanuki Software, Ltd.
+ Community Software License Agreement
+ Version 1.1
+
+IMPORTANT-READ CAREFULLY: This license agreement is a legal agreement
+between you ("Licensee") and Tanuki Software, Ltd. ("TSI"), which
+includes computer software, associated media, printed materials, and
+may include online or electronic documentation ( Software ). PLEASE
+READ THIS AGREEMENT CAREFULLY BEFORE YOU INSTALL, COPY, DOWNLOAD OR
+USE THE SOFTWARE ACCOMPANYING THIS PACKAGE.
+
+Section 1 - Grant of License
+
+Community editions of the Software are made available on the GNU
+General Public License, Version 2 ("GPLv2"), included in Section 4 of
+this license document. All sections of the Community Software License
+Agreement must be complied with in addition to those of the GPLv2.
+
+
+Section 2 - Definitions
+
+2.1. "Community Edition" shall mean versions of the Software Program
+distributed in source form under this license agreement, and all new
+releases, corrections, enhancements and updates to the Software
+Program, which TSI makes generally available under this agreement.
+
+2.2. "Documentation" shall mean the contents of the website
+describing the functionality and use of the Software Program, located
+at http://wrapper.tanukisoftware.org
+
+2.3. "Product" shall mean the computer programs, that are provided by
+Licensee to Licensee customers or potential customers, and that
+contain both the Software Program as a component of the Product, and a
+component or components (other than the Software Program) that provide
+the material functionality of the Product. If the Product is released
+in source form, the Software Program or any of its components may only
+be included in executable form.
+
+2.4. "Software Program" shall mean the computer software and license
+file provided by TSI under this Agreement, including all new releases,
+corrections, enhancements and updates to such computer software, which
+TSI makes generally available and which Licensee receive pursuant to
+Licensee subscription to TSIMS. Some specific features or platforms
+may not be enabled if they do not fall under the feature set(s)
+covered by the specific license fees paid.
+
+2.5 "End User" shall mean the customers of the Licensee or any
+recipient of the Product whether or not any payment is made to use
+the Product.
+
+
+Section 3 - Licensee Obligations
+
+A copy of this license must be distributed in full with the Product
+in a location that is obvious to any End User.
+
+In accordance with Section 4, the full source code of all components
+of the Product must be made available to any and all End Users.
+
+Licensee may extend and/or modify the Software Program and distribute
+under the terms of this agreement provided that the copyright notice
+and license information displayed in the console and log files are
+not obfuscated or obstructed in any way.
+
+
+Section 4 - GPLv2 License Agreement
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
+ Everyone is permitted to copy and distribute verbatim copies of
+ this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+ freedom to share and change it. By contrast, the GNU General
+ Public License is intended to guarantee your freedom to share and
+ change free software--to make sure the software is free for all
+ its users. This General Public License applies to most of the Free
+ Software Foundation's software and to any other program whose
+ authors commit to using it. (Some other Free Software Foundation
+ software is covered by the GNU Library General Public License
+ instead.) You can apply it to your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+ price. Our General Public Licenses are designed to make sure that
+ you have the freedom to distribute copies of free software (and
+ charge for this service if you wish), that you receive source code
+ or can get it if you want it, that you can change the software or
+ use pieces of it in new free programs; and that you know you can
+ do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+ anyone to deny you these rights or to ask you to surrender the
+ rights. These restrictions translate to certain responsibilities
+ for you if you distribute copies of the software, or if you modify
+ it.
+
+ For example, if you distribute copies of such a program, whether
+ gratis or for a fee, you must give the recipients all the rights
+ that you have. You must make sure that they, too, receive or can
+ get the source code. And you must show them these terms so they
+ know their rights.
+
+ We protect your rights with two steps:
+
+ (1) copyright the software, and
+ (2) offer you this license which gives you legal permission to
+ copy, distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make
+ certain that everyone understands that there is no warranty for
+ this free software. If the software is modified by someone else
+ and passed on, we want its recipients to know that what they have
+ is not the original, so that any problems introduced by others
+ will not reflect on the original authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+ patents. We wish to avoid the danger that redistributors of a free
+ program will individually obtain patent licenses, in effect making
+ the program proprietary. To prevent this, we have made it clear
+ that any patent must be licensed for everyone's free use or not
+ licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+ modification follow.
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which
+ contains a notice placed by the copyright holder saying it may be
+ distributed under the terms of this General Public License. The
+ "Program", below, refers to any such program or work, and a "work
+ based on the Program" means either the Program or any derivative
+ work under copyright law: that is to say, a work containing the
+ Program or a portion of it, either verbatim or with modifications
+ and/or translated into another language. (Hereinafter, translation
+ is included without limitation in the term "modification".) Each
+ licensee is addressed as "you".
+
+ Activities other than copying, distribution and modification are
+ not covered by this License; they are outside its scope. The act
+ of running the Program is not restricted, and the output from the
+ Program is covered only if its contents constitute a work based on
+ the Program (independent of having been made by running the
+ Program). Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+ source code as you receive it, in any medium, provided that you
+ conspicuously and appropriately publish on each copy an
+ appropriate copyright notice and disclaimer of warranty; keep
+ intact all the notices that refer to this License and to the
+ absence of any warranty; and give any other recipients of the
+ Program a copy of this License along with the Program.
+
+ You may charge a fee for the physical act of transferring a copy,
+ and you may at your option offer warranty protection in exchange
+ for a fee.
+
+ 2. You may modify your copy or copies of the Program or any
+ portion of it, thus forming a work based on the Program, and copy
+ and distribute such modifications or work under the terms of
+ Section 1 above, provided that you also meet all of these
+ conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but does
+ not normally print such an announcement, your work based on the
+ Program is not required to print an announcement.)
+
+ These requirements apply to the modified work as a whole. If
+ identifiable sections of that work are not derived from the
+ Program, and can be reasonably considered independent and separate
+ works in themselves, then this License, and its terms, do not
+ apply to those sections when you distribute them as separate works.
+ But when you distribute the same sections as part of a whole which
+ is a work based on the Program, the distribution of the whole must
+ be on the terms of this License, whose permissions for other
+ licensees extend to the entire whole, and thus to each and every
+ part regardless of who wrote it.
+
+ Thus, it is not the intent of this section to claim rights or
+ contest your rights to work written entirely by you; rather, the
+ intent is to exercise the right to control the distribution of
+ derivative or collective works based on the Program.
+
+ In addition, mere aggregation of another work not based on the
+ Program with the Program (or with a work based on the Program) on
+ a volume of a storage or distribution medium does not bring the
+ other work under the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+ under Section 2) in object code or executable form under the terms
+ of Sections 1 and 2 above provided that you also do one of the
+ following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software
+ interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+ The source code for a work means the preferred form of the work
+ for making modifications to it. For an executable work, complete
+ source code means all the source code for all modules it contains,
+ plus any associated interface definition files, plus the scripts
+ used to control compilation and installation of the executable.
+ However, as a special exception, the source code distributed need
+ not include anything that is normally distributed (in either
+ source or binary form) with the major components (compiler,
+ kernel, and so on) of the operating system on which the executable
+ runs, unless that component itself accompanies the executable.
+
+ If distribution of executable or object code is made by offering
+ access to copy from a designated place, then offering equivalent
+ access to copy the source code from the same place counts as
+ distribution of the source code, even though third parties are not
+ compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+ except as expressly provided under this License. Any attempt
+ otherwise to copy, modify, sublicense or distribute the Program is
+ void, and will automatically terminate your rights under this
+ License. However, parties who have received copies, or rights,
+ from you under this License will not have their licenses
+ terminated so long as such parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+ signed it. However, nothing else grants you permission to modify
+ or distribute the Program or its derivative works. These actions
+ are prohibited by law if you do not accept this License.
+ Therefore, by modifying or distributing the Program (or any work
+ based on the Program), you indicate your acceptance of this
+ License to do so, and all its terms and conditions for copying,
+ distributing or modifying the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on
+ the Program), the recipient automatically receives a license from
+ the original licensor to copy, distribute or modify the Program
+ subject to these terms and conditions. You may not impose any
+ further restrictions on the recipients' exercise of the rights
+ granted herein. You are not responsible for enforcing compliance
+ by third parties to this License.
+
+ 7. If, as a consequence of a court judgment or allegation of
+ patent infringement or for any other reason (not limited to
+ patent issues), conditions are imposed on you (whether by court
+ order, agreement or otherwise) that contradict the conditions of
+ this License, they do not excuse you from the conditions of this
+ License. If you cannot distribute so as to satisfy simultaneously
+ your obligations under this License and any other pertinent
+ obligations, then as a consequence you may not distribute the
+ Program at all. For example, if a patent license would not permit
+ royalty-free redistribution of the Program by all those who
+ receive copies directly or indirectly through you, then the only
+ way you could satisfy both it and this License would be to refrain
+ entirely from distribution of the Program.
+
+ If any portion of this section is held invalid or unenforceable
+ under any particular circumstance, the balance of the section is
+ intended to apply and the section as a whole is intended to apply
+ in other circumstances.
+
+ It is not the purpose of this section to induce you to infringe
+ any patents or other property right claims or to contest validity
+ of any such claims; this section has the sole purpose of
+ protecting the integrity of the free software distribution system,
+ which is implemented by public license practices. Many people have
+ made generous contributions to the wide range of software
+ distributed through that system in reliance on consistent
+ application of that system; it is up to the author/donor to decide
+ if he or she is willing to distribute software through any other
+ system and a licensee cannot impose that choice.
+
+ This section is intended to make thoroughly clear what is believed
+ to be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+ certain countries either by patents or by copyrighted interfaces,
+ the original copyright holder who places the Program under this
+ License may add an explicit geographical distribution limitation
+ excluding those countries, so that distribution is permitted only
+ in or among countries not thus excluded. In such case, this
+ License incorporates the limitation as if written in the body of
+ this License.
+
+ 9. The Free Software Foundation may publish revised and/or new
+ versions of the General Public License from time to time. Such new
+ versions will be similar in spirit to the present version, but may
+ differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+ Program specifies a version number of this License which applies
+ to it and "any later version", you have the option of following
+ the terms and conditions either of that version or of any later
+ version published by the Free Software Foundation. If the Program
+ does not specify a version number of this License, you may choose
+ any version ever published by the Free Software Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other
+ free programs whose distribution conditions are different, write
+ to the author to ask for permission. For software which is
+ copyrighted by the Free Software Foundation, write to the Free
+ Software Foundation; we sometimes make exceptions for this. Our
+ decision will be guided by the two goals of preserving the free
+ status of all derivatives of our free software and of promoting
+ the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
+ WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
+ LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS
+ AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+ OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
+ PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
+ DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR
+ OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+ WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
+ MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
+ LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
+ INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
+ INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+ DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
+ OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
+ OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
+ ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+
+Section 4 - 3rd Party Components
+
+(1) The Software Program includes software and documentation components
+developed in part by Silver Egg Technology, Inc.("SET") prior to 2001
+and released under the following license.
+
+ Copyright (c) 2001 Silver Egg Technology
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation
+ files (the "Software"), to deal in the Software without
+ restriction, including without limitation the rights to use,
+ copy, modify, merge, publish, distribute, sub-license, and/or
+ sell copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following
+ conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ OTHER DEALINGS IN THE SOFTWARE.
+
diff --git a/Rapla/service/lib/wrapper.dll b/Rapla/service/lib/wrapper.dll
new file mode 100644
index 0000000..2041570
Binary files /dev/null and b/Rapla/service/lib/wrapper.dll differ
diff --git a/Rapla/service/lib/wrapper.jar b/Rapla/service/lib/wrapper.jar
new file mode 100644
index 0000000..9356e00
Binary files /dev/null and b/Rapla/service/lib/wrapper.jar differ
diff --git a/Rapla/src/org/rapla/AppointmentFormaterImpl.java b/Rapla/src/org/rapla/AppointmentFormaterImpl.java
new file mode 100644
index 0000000..a715852
--- /dev/null
+++ b/Rapla/src/org/rapla/AppointmentFormaterImpl.java
@@ -0,0 +1,359 @@
+/*--------------------------------------------------------------------------*
+ | Copyright (C) 2006 Christopher Kohlhaas |
+ | |
+ | This program is free software; you can redistribute it and/or modify |
+ | it under the terms of the GNU General Public License as published by the |
+ | Free Software Foundation. A copy of the license has been included with |
+ | these distribution in the COPYING file, if not go to www.fsf.org |
+ | |
+ | As a special exception, you are granted the permissions to link this |
+ | program with every library, which license fulfills the Open Source |
+ | Definition as published by the Open Source Initiative (OSI). |
+ *--------------------------------------------------------------------------*/
+package org.rapla;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+
+import org.rapla.components.util.DateTools;
+import org.rapla.components.xmlbundle.I18nBundle;
+import org.rapla.entities.domain.Appointment;
+import org.rapla.entities.domain.AppointmentFormater;
+import org.rapla.entities.domain.Period;
+import org.rapla.entities.domain.Repeating;
+import org.rapla.framework.RaplaContext;
+import org.rapla.framework.RaplaException;
+import org.rapla.framework.RaplaLocale;
+
+/** default implementation of appointment formater */
+class AppointmentFormaterImpl
+ implements
+ AppointmentFormater
+{
+ I18nBundle i18n;
+ RaplaLocale loc;
+
+ public AppointmentFormaterImpl(RaplaContext sm) throws RaplaException
+ {
+ i18n = (I18nBundle) sm.lookup(I18nBundle.ROLE + "/org.rapla.RaplaResources");
+ loc = (RaplaLocale) sm.lookup(RaplaLocale.ROLE);
+ }
+
+ protected RaplaLocale getRaplaLocale() {
+ return loc;
+ }
+
+ protected I18nBundle getI18n() {
+ return i18n;
+ }
+
+ protected String getString(String key) {
+ return i18n.getString(key);
+ }
+
+
+ public String getShortSummary(Appointment appointment) {
+ String time = loc.formatTime(appointment.getStart());
+ Repeating repeating = appointment.getRepeating();
+ final boolean wholeDaysSet = appointment.isWholeDaysSet();
+ final String timeString = wholeDaysSet ? "" :" " + time;
+ if (repeating != null) {
+ if (repeating.isWeekly()) {
+ return loc.getWeekday(appointment.getStart()) + timeString;
+ }
+ if (repeating.isDaily())
+ return getString("daily") + " " + time;
+ if (repeating.isMonthly())
+ return getWeekdayOfMonth( appointment.getStart() ) + loc.getWeekday(appointment.getStart()) + timeString;
+ if (repeating.isYearly())
+ return getDayOfMonth( appointment.getStart() ) + loc.getMonth(appointment.getStart()) +" " + timeString;
+ }
+ String date = loc.formatDate(appointment.getStart());
+ return date + " " + timeString;
+ }
+
+ public String getVeryShortSummary(Appointment appointment) {
+ Repeating repeating = appointment.getRepeating();
+ if (repeating != null) {
+ if (repeating.isWeekly())
+ return getRaplaLocale().getWeekday(appointment.getStart());
+ if (repeating.isDaily()) {
+ String time = getRaplaLocale().formatTime(appointment.getStart());
+ return time;
+ }
+ if (repeating.isMonthly())
+ {
+ return getRaplaLocale().getWeekday(appointment.getStart());
+ }
+ }
+ String date = getRaplaLocale().formatDateShort(appointment.getStart());
+ return date;
+ }
+
+ public String getSummary( Appointment a ) {
+ StringBuffer buf = new StringBuffer();
+ Repeating repeating = a.getRepeating();
+ final boolean wholeDaysSet = a.isWholeDaysSet();
+ if ( repeating == null )
+ {
+ buf.append( loc.getWeekday( a.getStart() ) );
+ buf.append( ' ' );
+ buf.append( loc.formatDate( a.getStart() ) );
+ if (!wholeDaysSet)
+ {
+ buf.append( ' ' );
+ buf.append( loc.formatTime( a.getStart() ) );
+
+ if ( isSameDay( a.getStart(), a.getEnd() ) )
+ {
+ buf.append( '-' );
+ }
+ else
+ {
+ buf.append( " - " );
+ buf.append( loc.getWeekday( a.getEnd() ) );
+ buf.append( ' ' );
+ buf.append( loc.formatDate( a.getEnd() ) );
+ buf.append( ' ' );
+ }
+ buf.append( loc.formatTime( a.getEnd() ) );
+ }
+ else if ( a.getEnd().getTime() - a.getStart().getTime() > DateTools.MILLISECONDS_PER_DAY)
+ {
+ buf.append( " - " );
+ buf.append( loc.getWeekday( a.getEnd() ) );
+ buf.append( ' ' );
+ buf.append( loc.formatDate( a.getEnd() ) );
+ }
+ }
+ else if ( repeating.isWeekly() || repeating.isMonthly() || repeating.isYearly())
+ {
+ if( repeating.isMonthly())
+ {
+ buf.append( getWeekdayOfMonth( a.getStart() ));
+ }
+ if (repeating.isYearly())
+ {
+ buf.append( getDayOfMonth( a.getStart() ) );
+ buf.append( loc.getMonth( a.getStart() ) );
+ }
+ else
+ {
+ buf.append( loc.getWeekday( a.getStart() ) );
+ }
+ if (wholeDaysSet)
+ {
+ if ( a.getEnd().getTime() - a.getStart().getTime() > DateTools.MILLISECONDS_PER_DAY)
+ {
+ if ( a.getEnd().getTime() - a.getStart().getTime() <= DateTools.MILLISECONDS_PER_DAY * 6 )
+ {
+ buf.append( " - " );
+ buf.append( loc.getWeekday( a.getEnd() ) );
+ }
+ else
+ {
+ buf.append( ' ' );
+ buf.append( loc.formatDate( a.getStart() ) );
+ buf.append( " - " );
+ buf.append( loc.getWeekday( a.getEnd() ) );
+ buf.append( ' ' );
+ buf.append( loc.formatDate( a.getEnd() ) );
+ }
+ }
+ }
+ else
+ {
+ buf.append( ' ' );
+ if ( isSameDay( a.getStart(), a.getEnd() ) )
+ {
+ buf.append( loc.formatTime( a.getStart() ) );
+ buf.append( '-' );
+ buf.append( loc.formatTime( a.getEnd() ) );
+ }
+ else if ( a.getEnd().getTime() - a.getStart().getTime() <= DateTools.MILLISECONDS_PER_DAY * 6 )
+ {
+ buf.append( loc.formatTime( a.getStart() ) );
+ buf.append( " - " );
+ buf.append( loc.getWeekday( a.getEnd() ) );
+ buf.append( ' ' );
+ buf.append( loc.formatTime( a.getEnd() ) );
+ }
+ else
+ {
+ buf.append( loc.formatDate( a.getStart() ) );
+ buf.append( ' ' );
+ buf.append( loc.formatTime( a.getStart() ) );
+ buf.append( " - " );
+ buf.append( loc.getWeekday( a.getEnd() ) );
+ buf.append( ' ' );
+ buf.append( loc.formatDate( a.getEnd() ) );
+ buf.append( ' ' );
+ buf.append( loc.formatTime( a.getEnd() ) );
+ }
+ }
+
+ if ( repeating.isWeekly())
+ {
+ buf.append( ' ' );
+ buf.append( getInterval( repeating ) );
+ }
+ if ( repeating.isMonthly())
+ {
+ buf.append(" " + getString("monthly"));
+ }
+ if ( repeating.isYearly())
+ {
+ buf.append(" " + getString("yearly"));
+ }
+ }
+
+ else if ( repeating.isDaily() )
+ {
+
+ long days =(a.getEnd().getTime() - a.getStart().getTime()) / (DateTools.MILLISECONDS_PER_HOUR * 24 );
+ if ( !a.isWholeDaysSet())
+ {
+ buf.append( loc.formatTime( a.getStart() ) );
+ if ( days <1)
+ {
+ buf.append( '-' );
+ buf.append( loc.formatTime( a.getEnd() ) );
+ }
+ buf.append( ' ' );
+ }
+ buf.append( getInterval( repeating ) );
+ }
+ return buf.toString();
+ }
+
+ private String getWeekdayOfMonth( Date date )
+ {
+ StringBuffer b = new StringBuffer();
+ Calendar cal = getRaplaLocale().createCalendar();
+ cal.setTime( date);
+ int numb = cal.get( Calendar.DAY_OF_WEEK_IN_MONTH);
+ b.append( String.valueOf(numb));
+ b.append( '.');
+ b.append( ' ');
+ return b.toString();
+ }
+
+ private String getDayOfMonth( Date date )
+ {
+ StringBuffer b = new StringBuffer();
+ Calendar cal = getRaplaLocale().createCalendar();
+ cal.setTime( date);
+ int numb = cal.get( Calendar.DAY_OF_MONTH);
+ b.append( String.valueOf(numb));
+ b.append( '.');
+ b.append( ' ');
+ return b.toString();
+ }
+
+ /** uses the internal calendar object for date comparison.
+ @see DateTools#isSameDay( java.util.Calendar, Date, Date)
+ */
+ private boolean isSameDay( Date d1, Date d2 ) {
+ return DateTools.isSameDay( loc.createCalendar(), d1, d2 );
+ }
+
+
+ public String getExceptionSummary( Repeating r ) {
+ StringBuffer buf = new StringBuffer();
+ buf.append(getString("appointment.exceptions"));
+ buf.append(": ");
+ Date[] exc = r.getExceptions();
+ for ( int i=0;i0)
+ buf.append(", ");
+ buf.append( getRaplaLocale().formatDate( exc[i] ) );
+ }
+ return buf.toString();
+ }
+
+ private String getInterval( Repeating r ) {
+ StringBuffer buf = new StringBuffer();
+ if ( r.getInterval() == 1 ) {
+ buf.append( getString( r.getType().toString() ) );
+ } else {
+ String fString ="weekly";
+ if ( r.isWeekly() ) {
+ fString = getString( "weeks" );
+ }
+ if ( r.isDaily() ) {
+ fString = getString( "days" );
+ }
+ buf.append( getI18n().format( "interval.format", "" + r.getInterval(), fString ) );
+ }
+ return buf.toString();
+ }
+
+ private boolean isPeriodicaly(Period period, Repeating r) {
+ Appointment a = r.getAppointment();
+ if (r.getEnd().after( period.getEnd() ) )
+ return false;
+ if ( r.isWeekly() )
+ {
+ return
+ ( DateTools.cutDate(a.getStart().getTime()) - period.getStart().getTime() )
+ <= DateTools.MILLISECONDS_PER_DAY * 6
+ &&
+ ( DateTools.cutDate(period.getEnd().getTime()) - r.getEnd().getTime() )
+ <= DateTools.MILLISECONDS_PER_DAY * 6
+ ;
+ }
+ else if ( r.isDaily() )
+ {
+ return
+ isSameDay( a.getStart(), period.getStart() )
+ &&
+ isSameDay( r.getEnd(), period.getEnd() )
+ ;
+ }
+ return false;
+ }
+
+ public String getSummary( Repeating r , List periods) {
+ if ( r.getEnd() != null && !r.isFixedNumber() )
+ {
+ Iterator it = periods.iterator();
+ while ( it.hasNext() ) {
+ Period period = (Period) it.next();
+ if ( isPeriodicaly(period, r))
+ return getI18n().format("in_period.format"
+ ,period.getName(loc.getLocale())
+ );
+ }
+ }
+ return getSummary(r);
+ }
+
+ public String getSummary( Repeating r ) {
+ Appointment a = r.getAppointment();
+ StringBuffer buf = new StringBuffer();
+ String startDate = loc.formatDate( a.getStart() );
+ buf.append( getI18n().format("format.repeat_from", startDate) );
+ buf.append( ' ' );
+ // print end date, when end is given
+ if ( r.getEnd() != null) {
+ String endDate = loc.formatDate( DateTools.subDay(r.getEnd()) );
+ buf.append( getI18n().format("format.repeat_until", endDate) );
+ buf.append( ' ' );
+ }
+
+ // print number of repeating if number is gt 0 and fixed times
+ if ( r.getNumber()>=0 && r.isFixedNumber() ) {
+ buf.append( getI18n().format("format.repeat_n_times", String.valueOf(r.getNumber())) );
+ buf.append( ' ' );
+ }
+ // print never ending if end is null
+ if (r.getEnd() == null ){
+ buf.append( getString("repeating.forever") );
+ buf.append( ' ' );
+ }
+
+ return buf.toString();
+ }
+
+}
diff --git a/Rapla/src/org/rapla/COPYING b/Rapla/src/org/rapla/COPYING
new file mode 100644
index 0000000..addf491
--- /dev/null
+++ b/Rapla/src/org/rapla/COPYING
@@ -0,0 +1,280 @@
+ GNU GENERAL PUBLIC LICENSE Version 2, June 1991
+
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
diff --git a/Rapla/src/org/rapla/Main.java b/Rapla/src/org/rapla/Main.java
new file mode 100644
index 0000000..979b81a
--- /dev/null
+++ b/Rapla/src/org/rapla/Main.java
@@ -0,0 +1,229 @@
+/*--------------------------------------------------------------------------*
+ | Copyright (C) 2006 Christopher Kohlhaas |
+ | |
+ | This program is free software; you can redistribute it and/or modify |
+ | it under the terms of the GNU General Public License as published by the |
+ | Free Software Foundation. A copy of the license has been included with |
+ | these distribution in the COPYING file, if not go to www.fsf.org |
+ | |
+ | As a special exception, you are granted the permissions to link this |
+ | program with every library, which license fulfills the Open Source |
+ | Definition as published by the Open Source Initiative (OSI). |
+ *--------------------------------------------------------------------------*/
+package org.rapla;
+import java.awt.Font;
+import java.net.URL;
+import java.util.Map;
+
+import javax.swing.UIDefaults;
+import javax.swing.UIManager;
+
+import org.apache.avalon.framework.container.ContainerUtil;
+import org.apache.avalon.framework.logger.ConsoleLogger;
+import org.apache.avalon.framework.logger.Logger;
+import org.rapla.client.ClientService;
+import org.rapla.client.RaplaClientListenerAdapter;
+import org.rapla.framework.Container;
+import org.rapla.framework.RaplaContext;
+import org.rapla.framework.StartupEnvironment;
+import org.rapla.framework.internal.ConfigTools;
+import org.rapla.gui.images.Images;
+import org.rapla.storage.ImportExportManager;
+
+/** This class is used to start rapla from the command-line.
+
+ Usage :
+ [-?|-c PATH_TO_CONFIG_FILE] [ACTION]
+ Possible actions:
+ rapla : Starts the rapla-gui (this is the default)
+ client : Starts the rapla-gui in client/server mode
+
+ You can also display the list with the -? argument.
+*/
+
+final public class Main {
+
+ /** The default config filename for standalone-mode is rapla.xconf*/
+ public final static String DEFAULT_CONFIG_NAME = "rapla.xconf";
+ /** The default config filename for client-mode raplaclient.xconf*/
+ public final static String DEFAULT_CLIENT_CONFIG_NAME = "raplaclient.xconf";
+
+ public final static String DEFAULT_SERVER_CONFIG_NAME = "raplaserver.xconf";
+
+
+ public static final String USAGE = new String (
+ "Usage : \n"
+ + "[-?|-c PATH_TO_CONFIG_FILE] [ACTION]\n"
+ + "Possible actions:\n"
+ + " rapla : Starts the rapla-gui (this is the default)\n"
+ + " client : Starts the rapla-client (this is the default)\n"
+ + " import : Import from file into the database\n"
+ + " See importexport entry in " + DEFAULT_SERVER_CONFIG_NAME + "\n"
+ + " export : Export from database into file\n"
+ + " See importexport entry in " + DEFAULT_SERVER_CONFIG_NAME + "\n"
+ );
+
+
+ private Logger logger = new ConsoleLogger(ConsoleLogger.LEVEL_WARN).getChildLogger("init");
+ RaplaStartupEnvironment env = new RaplaStartupEnvironment();
+ Container raplaContainer;
+
+ Main() {
+
+ }
+
+ void init(URL configURL,int mode) throws Exception {
+ env.setStartupMode( mode );
+ env.setConfigURL( configURL );
+ env.setBootstrapLogger( getLogger() );
+ }
+
+ /** starts Rapla with the default controller-class: org.rapla.gui.usecase.defaults.MainController
+ You can replace this with your custom controller (you need to add a plugin. See plugins for details).*/
+ void startRapla() throws Exception {
+ setLookandFeel();
+ raplaContainer = new RaplaMainContainer( env);
+ RaplaContext sm = raplaContainer.getContext();
+ ClientService client = (ClientService) sm.lookup(ClientService.ROLE);
+ client.addRaplaClientListener(new RaplaClientListenerAdapter() {
+ public void clientClosed(boolean restart) {
+ if ( restart) {
+ ContainerUtil.dispose( raplaContainer);
+ try {
+ startRapla();
+ } catch (Exception ex) {
+ getLogger().error("Error restarting client",ex);
+ exit();
+ }
+ } else {
+ exit();
+ }
+ }
+ public void clientAborted()
+ {
+ exit();
+ }
+ });
+ }
+
+ private void setLookandFeel() {
+ UIDefaults defaults = UIManager.getDefaults();
+ Font textFont = defaults.getFont("Label.font");
+ if ( textFont == null)
+ {
+ textFont = new Font("SansSerif", Font.PLAIN, 12);
+ }
+ else
+ {
+ textFont = textFont.deriveFont( Font.PLAIN );
+ }
+ defaults.put("Label.font", textFont);
+ defaults.put("Button.font", textFont);
+ defaults.put("Menu.font", textFont);
+ defaults.put("MenuItem.font", textFont);
+ defaults.put("RadioButton.font", textFont);
+ defaults.put("CheckBoxMenuItem.font", textFont);
+ defaults.put("CheckBox.font", textFont);
+ defaults.put("ComboBox.font", textFont);
+ defaults.put("Tree.expandedIcon",Images.getIcon("/org/rapla/gui/images/eclipse-icons/tree_minus.gif"));
+ defaults.put("Tree.collapsedIcon",Images.getIcon("/org/rapla/gui/images/eclipse-icons/tree_plus.gif"));
+ defaults.put("TitledBorder.font", textFont.deriveFont(Font.PLAIN,(float)10.));
+
+ }
+
+ private void exit() {
+ ContainerUtil.dispose( raplaContainer);
+ if (env.getStartupMode() != StartupEnvironment.APPLET)
+ System.exit(0);
+ }
+
+ Logger getLogger() {
+ return logger;
+ }
+
+ /** Read the data out of the dest-operator and write it into the source operator. The necessary
+ properties should be specified in the config-file.
+ */
+ public void startExport() throws Exception {
+ startExportImport(true);
+ }
+
+ /** Read the data out of the source-operator and write it into the dest operator. The necessary
+ properties should be specified in the config-file.
+ */
+ public void startImport() throws Exception {
+ startExportImport(false);
+ }
+
+ private void startExportImport(boolean export) throws Exception {
+ raplaContainer = new RaplaMainContainer( env);
+ RaplaContext sm = raplaContainer.getContext();
+ ImportExportManager conv = (ImportExportManager) sm.lookup(ImportExportManager.ROLE);
+ if (export)
+ conv.doExport();
+ else
+ conv.doImport();
+ }
+
+
+ /** This is the entry point for the client-application.
+ * For a complete list of the arguments see the description
+ * of this class. */
+ public static void main(String[] args) {
+ Main main = new Main();
+ Map paramMap = ConfigTools.parseParams(args);
+ if (paramMap == null) {
+ System.out.println(USAGE);
+ return;
+ }
+ String action = (String) paramMap.get("action");
+ String config = (String) paramMap.get("config");
+ if (action == null)
+ action = "rapla";
+ try {
+ if ( action.equals("build-script")) {
+ main.init( ConfigTools.configFileToURL(config, DEFAULT_CONFIG_NAME)
+ ,StartupEnvironment.CONSOLE);
+ main.startRapla();
+ } else if ( action.equals("webstart")) {
+ main.init( ConfigTools.webstartConfigToURL(config, "webclient/" + DEFAULT_CLIENT_CONFIG_NAME)
+ ,StartupEnvironment.WEBSTART);
+ main.startRapla();
+ } else if ( action.equals("rapla")) {
+ main.init( ConfigTools.configFileToURL(config, DEFAULT_CONFIG_NAME)
+ , StartupEnvironment.CONSOLE);
+ main.startRapla();
+ main.getLogger().info("Exit");
+ } else if ( action.equals("client")) {
+ main.init( ConfigTools.configFileToURL(config, "webapp/webclient/" + DEFAULT_CLIENT_CONFIG_NAME)
+ , StartupEnvironment.CONSOLE);
+ main.startRapla();
+ main.getLogger().info("Exit");
+ } else if ( action.equals("import")) {
+ main.init( ConfigTools.configFileToURL(config, DEFAULT_SERVER_CONFIG_NAME)
+ ,StartupEnvironment.CONSOLE);
+ main.startImport();
+ } else if ( action.equals("export")) {
+ main.init( ConfigTools.configFileToURL(config, DEFAULT_SERVER_CONFIG_NAME)
+ ,StartupEnvironment.CONSOLE);
+ main.startExport();
+ } else {
+ System.out.println(USAGE);
+ }
+ } catch (Throwable ex) {
+ main.getLogger().error("Couldn't start Rapla",ex);
+ if (main != null)
+ ContainerUtil.dispose(main.raplaContainer);
+ System.out.flush();
+ try
+ {
+ Thread.sleep( 2000 );
+ }
+ catch ( InterruptedException e )
+ {
+ }
+ System.exit(1);
+
+ }
+ }
+}
diff --git a/Rapla/src/org/rapla/MainApplet.java b/Rapla/src/org/rapla/MainApplet.java
new file mode 100644
index 0000000..a99126c
--- /dev/null
+++ b/Rapla/src/org/rapla/MainApplet.java
@@ -0,0 +1,135 @@
+/*--------------------------------------------------------------------------*
+ | Copyright (C) 2006 Christopher Kohlhaas |
+ | |
+ | This program is free software; you can redistribute it and/or modify |
+ | it under the terms of the GNU General Public License as published by the |
+ | Free Software Foundation. A copy of the license has been included with |
+ | these distribution in the COPYING file, if not go to www.fsf.org |
+ | |
+ | As a special exception, you are granted the permissions to link this |
+ | program with every library, which license fulfills the Open Source |
+ | Definition as published by the Open Source Initiative (OSI). |
+ *--------------------------------------------------------------------------*/
+package org.rapla;
+
+import java.awt.Color;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.net.URL;
+
+import javax.swing.BorderFactory;
+import javax.swing.JApplet;
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import org.rapla.framework.StartupEnvironment;
+
+/** The applet-encapsulation of the Main.class reads the configuration
+ * from the document-base of the applet and displays
+ * an applet with a start button.
+ * @author Christopher Kohlhaas
+ * @see Main
+ */
+
+final public class MainApplet extends JApplet
+{
+ private static final long serialVersionUID = 1L;
+
+ JPanel dlg = new JPanel();
+ JButton button;
+ JLabel label;
+
+ boolean startable = false;
+
+ public MainApplet()
+ {
+ JPanel panel1 = new JPanel();
+ panel1.setBackground( new Color( 255, 255, 204 ) );
+
+ GridLayout gridLayout1 = new GridLayout();
+ gridLayout1.setColumns( 1 );
+ gridLayout1.setRows( 3 );
+ gridLayout1.setHgap( 10 );
+ gridLayout1.setVgap( 10 );
+ panel1.setLayout( gridLayout1 );
+
+ label = new JLabel( "Rapla-Applet loading" );
+ panel1.add( label );
+
+ button = new JButton( "StartRapla" );
+ button.addActionListener( new ActionListener()
+ {
+
+ public void actionPerformed( ActionEvent e )
+ {
+ startThread();
+ }
+
+ } );
+ panel1.add( button );
+
+ dlg.setBackground( new Color( 255, 255, 204 ) );
+ dlg.setBorder( BorderFactory.createMatteBorder( 1, 1, 2, 2, Color.black ) );
+ dlg.add( panel1 );
+ }
+
+ public void start()
+ {
+ getRootPane().putClientProperty( "defeatSystemEventQueueCheck", Boolean.TRUE );
+ try
+ {
+ setContentPane( dlg );
+ button.setEnabled( startable );
+ startable = true;
+ button.setEnabled( startable );
+ }
+ catch ( Exception ex )
+ {
+ ex.printStackTrace();
+ }
+ }
+
+ private void updateStartable()
+ {
+ javax.swing.SwingUtilities.invokeLater( new Runnable()
+ {
+ public void run()
+ {
+ button.setEnabled( startable );
+ }
+ } );
+ }
+
+ private void startThread()
+ {
+ ( new Thread()
+ {
+ public void run()
+ {
+ try
+ {
+ startable = false;
+ updateStartable();
+ Main main = new Main();
+ URL configURL = new URL( getDocumentBase(), "webclient/" + Main.DEFAULT_CLIENT_CONFIG_NAME );
+ main.init( configURL, StartupEnvironment.APPLET );
+ main.env.setDownloadURL( getDocumentBase() );
+ System.out.println( "Docbase " + getDocumentBase() );
+ main.startRapla();
+ }
+ catch ( Exception ex )
+ {
+ ex.printStackTrace();
+ }
+ finally
+ {
+ startable = true;
+ updateStartable();
+ }
+ }
+ } ).start();
+ }
+
+}
diff --git a/Rapla/src/org/rapla/MainServlet.java b/Rapla/src/org/rapla/MainServlet.java
new file mode 100644
index 0000000..0ccd438
--- /dev/null
+++ b/Rapla/src/org/rapla/MainServlet.java
@@ -0,0 +1,358 @@
+/*--------------------------------------------------------------------------*
+ | Copyright (C) 2006 Christopher Kohlhaas |
+ | |
+ | This program is free software; you can redistribute it and/or modify |
+ | it under the terms of the GNU General Public License as published by the |
+ | Free Software Foundation. A copy of the license has been included with |
+ | these distribution in the COPYING file, if not go to www.fsf.org |
+ | |
+ | As a special exception, you are granted the permissions to link this |
+ | program with every library, which license fulfills the Open Source |
+ | Definition as published by the Open Source Initiative (OSI). |
+ *--------------------------------------------------------------------------*/
+package org.rapla;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.ObjectOutputStream;
+import java.net.URL;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+import org.apache.avalon.framework.container.ContainerUtil;
+import org.apache.avalon.framework.logger.Logger;
+import org.rapla.components.util.IOUtil;
+import org.rapla.framework.Container;
+import org.rapla.framework.RaplaContext;
+import org.rapla.framework.RaplaContextException;
+import org.rapla.framework.StartupEnvironment;
+import org.rapla.plugin.RaplaExtensionPoints;
+import org.rapla.server.RemoteSession;
+import org.rapla.server.ServerService;
+import org.rapla.server.ShutdownListener;
+import org.rapla.server.ShutdownService;
+import org.rapla.server.internal.RemoteSessionImpl;
+import org.rapla.server.internal.ServerServiceImpl;
+import org.rapla.servletpages.RaplaPageGenerator;
+
+
+final public class MainServlet extends HttpServlet {
+ private static final long serialVersionUID = 1L;
+
+ /** The default config filename is raplaserver.xconf*/
+ Container raplaMainContainer;
+ public final static String DEFAULT_CONFIG_NAME = "raplaserver.xconf";
+ Collection pageList;
+ ServerService serverService;
+
+ long serverStartTime;
+ String serverId = null;
+
+ private File getConfigFile(String entryName, String defaultName) throws ServletException,IOException {
+ String configName = getServletConfig().getInitParameter(entryName);
+ if (configName == null)
+ configName = defaultName;
+ if (configName == null)
+ throw new ServletException("Must specify " + entryName + " entry in web.xml !");
+
+ File configFile = new File(getServletConfig().getServletContext().getRealPath("/WEB-INF/" + configName));
+ if (!configFile.exists()) {
+ String message = "ERROR: Config file not found " + configName;
+ throw new ServletException(message);
+ }
+ return configFile.getCanonicalFile();
+ }
+
+ public String getServerId()
+ {
+ return serverId;
+ }
+
+ public void setServerId( String serverId )
+ {
+ this.serverId = serverId;
+ }
+
+ /**
+ * Initializes Servlet and creates a RaplaMainContainer
instance
+ *
+ * @exception ServletException if an error occurs
+ */
+ public void init()
+ throws ServletException
+ {
+ String realPath = getServletContext().getRealPath("webclient");
+ // if (realPath != null)
+ {
+ File webclientFolder= new File(realPath );
+ webclientFolder.mkdir();
+ copy( "WEB-INF/lib/rapla.jar", "webclient/rapla.jar" );
+ }
+ startServer();
+ }
+
+ private void copy( String sourceLib, String destLib ) throws ServletException
+ {
+ if (!new File(getServletContext().getRealPath(sourceLib)).exists())
+ {
+ return;
+ }
+ try
+ {
+ log("Copy " + sourceLib + " to " + destLib);
+ IOUtil.copy( getServletContext().getRealPath(sourceLib), getServletContext().getRealPath(destLib), true);
+ }
+ catch (IOException e)
+ {
+ throw new ServletException("Can't copy " + sourceLib + " Cause " + e.getMessage());
+ }
+ }
+
+ ShutdownListener shutdownListener = new ShutdownListener() {
+ public void shutdownInitiated() {
+ }
+
+ public void shutdownComplete( boolean restart) {
+ if ( restart ) {
+ Thread restartThread = new Thread() {
+ public void run() {
+ try {
+ log( "Stopping Server");
+ stopServer();
+ //getServletContext()
+ log( "Restarting Server");
+ startServer();
+ } catch (Exception e) {
+ log( "Error while restarting Server", e );
+ }
+ }
+ };
+ restartThread.setDaemon( false );
+ restartThread.start();
+ }
+ }
+ };
+
+ void startServer()throws ServletException {
+ log("Starting Rapla Servlet");
+ Logger logger = null;
+ serverStartTime = System.currentTimeMillis();
+
+ try
+ {
+ File configFile = getConfigFile("config-file",DEFAULT_CONFIG_NAME);
+ URL configURL = configFile.toURI().toURL();
+ URL logConfigURL = getConfigFile("log-config-file","raplaserver.xlog").toURI().toURL();
+
+ RaplaStartupEnvironment env = new RaplaStartupEnvironment();
+ env.setStartupMode( StartupEnvironment.SERVLET);
+ env.setConfigURL( configURL );
+ env.setLogConfigURL( logConfigURL );
+
+ raplaMainContainer = new RaplaMainContainer( env );
+ logger = (Logger)raplaMainContainer.getContext().lookup(Logger.class.getName());
+ try {
+ //lookup shutdownService
+ ShutdownService shutdownService = (ShutdownService) raplaMainContainer.getContext().lookup(ShutdownService.ROLE);
+ shutdownService.addShutdownListener( shutdownListener );
+ } catch (RaplaContextException ex) {
+ log("No shutdown service found. You must stop the server with ctrl-c!");
+ }
+ // Start the storage service
+ RaplaContext sm = raplaMainContainer.getContext();
+
+
+
+ String lookupName = ServerService.ROLE ;
+ if (serverId != null)
+ {
+ lookupName += "/" + serverId;
+ }
+ serverService = (ServerService)sm.lookup( lookupName );
+
+ pageList = serverService.getAllServicesFor( RaplaExtensionPoints.SERVLET_PAGE_EXTENSION);
+
+ getServletConfig().getServletContext().setAttribute("context", sm);
+ }
+ catch( Exception e )
+ {
+ if ( logger != null) {
+ logger.fatalError("Could not start server", e);
+ }
+ ContainerUtil.dispose( raplaMainContainer);
+ log( "Problem starting Rapla ", e );
+ throw new ServletException( "Error during initialization", e );
+ }
+ log("Rapla Servlet started");
+
+ }
+
+ /**
+ * Pass all servlet requests through to container to be handled.
+ ^s */
+ public void service( HttpServletRequest request, HttpServletResponse response )
+ throws IOException, ServletException
+ {
+ String page = request.getParameter("page");
+ String contextPath =request.getRequestURI();
+
+ int rpcIndex=contextPath.indexOf("/rapla/rpc/") ;
+ if ( rpcIndex>= 0) {
+ handleRPCCall( request, response, contextPath );
+ return;
+ }
+ if ( page == null || page.trim().length() == 0) {
+ page = "index";
+ }
+
+ if (pageList.contains( page) ) {
+ RaplaPageGenerator servletPage;
+ try {
+ servletPage = (RaplaPageGenerator) serverService.getContext().lookup( RaplaExtensionPoints.SERVLET_PAGE_EXTENSION + "/" + page );
+ } catch (RaplaContextException e) {
+ java.io.PrintWriter out = response.getWriter();
+ out.println(IOUtil.getStackTraceAsString( e));
+ throw new ServletException( e);
+ }
+ servletPage.generatePage( getServletContext(), request, response);
+ } else {
+ throw new ServletException( "Page " + page + " not found in Rapla context");
+ }
+ }
+
+ private void handleRPCCall( HttpServletRequest request, HttpServletResponse response, String contextPath ) throws IOException
+ {
+ int rpcIndex=contextPath.indexOf("/rapla/rpc/") ;
+ String methodName = contextPath.substring(rpcIndex + "/rapla/rpc/".length());
+ HttpSession session = request.getSession( true);
+
+ if ( methodName.equals("getException"))
+ {
+ Exception ex = (Exception)session.getAttribute("lastException");
+ if ( ex == null)
+ {
+ response.sendError( 500 , "No exception found");
+ } else {
+ ObjectOutputStream out = new ObjectOutputStream( response.getOutputStream());
+ out.writeObject( ex);
+ out.flush();
+ }
+ return;
+ }
+
+ String username = (String)session.getAttribute("username");
+ try
+ {
+ Map paramterMap = makeSingles(request.getParameterMap());
+ ServerServiceImpl server = (ServerServiceImpl)raplaMainContainer.getContext().lookup( ServerService.ROLE);
+ if ( methodName.equals("login"))
+ {
+ username = server.login( paramterMap);
+ session.setAttribute("username", username);
+ response.getWriter().println("Login successfull" );
+ }
+ else if ( methodName.equals("logout"))
+ {
+ session.removeAttribute("username");
+ response.getWriter().println("User logout" );
+ }
+ else
+ {
+ RemoteSession remoteSession = (RemoteSession)session.getAttribute(RemoteSession.class.getName());
+ if ( remoteSession != null)
+ {
+ // If session was created by another server, than invalidate
+ if (((RemoteSessionImpl)remoteSession).getServerStartTime() != serverStartTime)
+ {
+ remoteSession = null;
+ }
+ }
+ if ( remoteSession == null)
+ {
+ remoteSession = new RemoteSessionImpl(server.getContext(), session.getId(), serverStartTime);
+ session.setAttribute( RemoteSession.class.getName(), remoteSession);
+ }
+ ((RemoteSessionImpl)remoteSession).setUsername( username);
+ byte[] out = server.dispatch(remoteSession, methodName, paramterMap);
+ response.setContentType( "text/html; charset=utf-8");
+ //response.setCharacterEncoding( "utf-8" );
+ response.getOutputStream().write( out );
+ }
+ // response.getWriter().println("There are currently " + reservations + " reservations");
+ }
+ catch (Exception e)
+ {
+ String message = e.getMessage();
+ if ( message == null )
+ {
+ message = e.getClass().getName();
+ }
+ session.setAttribute( "lastException", e);
+ response.addHeader("X-Error-Stacktrace", message);
+ response.getWriter().println("Error: " + IOUtil.getStackTraceAsString( e));
+
+ //response.sendError( 500, e.getMessage());
+
+ response.setStatus( 500);
+ //throw new ServletException( e);
+ }
+ }
+
+ private Map makeSingles( Map parameterMap )
+ {
+ Map singlesMap = new HashMap();
+ for (Iterator it = parameterMap.keySet().iterator();it.hasNext();)
+ {
+ String key = (String)it.next();
+ String[] values = (String[]) parameterMap.get( key);
+ if ( values != null && values.length > 0 )
+ {
+ singlesMap.put( key,values[0]);
+ }
+ else
+ {
+ singlesMap.put( key,null);
+ }
+ }
+
+ return singlesMap;
+
+ }
+
+ private void stopServer() {
+ try {
+ ShutdownService shutdownService = (ShutdownService) raplaMainContainer.getContext().lookup(ShutdownService.ROLE);
+ shutdownService.removeShutdownListener( shutdownListener );
+ ContainerUtil.dispose( raplaMainContainer );
+ } catch (Exception ex) {
+ log("Error while stopping server");
+ }
+ }
+
+ /**
+ * Disposes of container manager and container instance.
+ */
+ public void destroy()
+ {
+ log("Destroying rapla");
+ stopServer();
+ }
+
+ public RaplaContext getContext()
+ {
+ return raplaMainContainer.getContext();
+ }
+
+
+
+
+}
+
diff --git a/Rapla/src/org/rapla/MyResources.xml b/Rapla/src/org/rapla/MyResources.xml
new file mode 100644
index 0000000..c6de8b9
--- /dev/null
+++ b/Rapla/src/org/rapla/MyResources.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+ Hello {0}, enjoy yourself!
+
+
diff --git a/Rapla/src/org/rapla/RaplaLocaleImpl.java b/Rapla/src/org/rapla/RaplaLocaleImpl.java
new file mode 100644
index 0000000..9a96457
--- /dev/null
+++ b/Rapla/src/org/rapla/RaplaLocaleImpl.java
@@ -0,0 +1,250 @@
+/*--------------------------------------------------------------------------*
+ | Copyright (C) 2006 Christopher Kohlhaas |
+ | |
+ | This program is free software; you can redistribute it and/or modify |
+ | it under the terms of the GNU General Public License as published by the |
+ | Free Software Foundation. A copy of the license has been included with |
+ | these distribution in the COPYING file, if not go to www.fsf.org |
+ | |
+ | As a special exception, you are granted the permissions to link this |
+ | program with every library, which license fulfills the Open Source |
+ | Definition as published by the Open Source Initiative (OSI). |
+ *--------------------------------------------------------------------------*/
+package org.rapla;
+import java.text.DateFormat;
+import java.text.FieldPosition;
+import java.text.NumberFormat;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Locale;
+import java.util.TimeZone;
+
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.logger.Logger;
+import org.rapla.components.util.DateTools;
+import org.rapla.components.xmlbundle.LocaleSelector;
+import org.rapla.components.xmlbundle.impl.LocaleSelectorImpl;
+import org.rapla.framework.RaplaException;
+import org.rapla.framework.RaplaLocale;
+class RaplaLocaleImpl implements RaplaLocale {
+
+ TimeZone zone;
+ LocaleSelector localeSelector = new LocaleSelectorImpl();
+
+ String[] availableLanguages;
+
+ String COUNTRY = "country";
+ String LANGUAGES = "languages";
+ String LANGUAGE = "language";
+ String CHARSET = "charset";
+ String charsetForHtml;
+
+ public RaplaLocaleImpl(Configuration config ) throws RaplaException
+ {
+ this(config, null);
+ }
+
+ public RaplaLocaleImpl(Configuration config,Logger logger ) throws RaplaException
+ {
+ String selectedCountry = config.getChild( COUNTRY).getValue(Locale.getDefault().getCountry() );
+ Configuration languageConfig = config.getChild( LANGUAGES );
+ Configuration[] languages = languageConfig.getChildren( LANGUAGE );
+ charsetForHtml = config.getChild(CHARSET).getValue("iso-8859-15");
+ availableLanguages = new String[languages.length];
+ for ( int i=0;i=0) ) {
+ buf.delete( fieldPosition.getBeginIndex(), fieldPosition.getEndIndex() );
+ }
+ return buf.toString();
+ }
+
+ /* (non-Javadoc)
+ * @see org.rapla.common.IRaplaLocale#formatDate(java.util.Date)
+ */
+ public String formatDate( Date date ) {
+ DateFormat format = DateFormat.getDateInstance( DateFormat.SHORT, getLocale() );
+ format.setTimeZone( zone );
+ return format.format( date );
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.rapla.common.IRaplaLocale#formatDateLong(java.util.Date)
+ */
+ public String formatDateLong( Date date ) {
+ DateFormat format = DateFormat.getDateInstance( DateFormat.MEDIUM, getLocale() );
+ format.setTimeZone( zone );
+ return format.format( date) + " (" + getWeekday(date) + ")";
+ }
+
+ /* (non-Javadoc)
+ * @see org.rapla.common.IRaplaLocale#getWeekday(java.util.Date)
+ */
+ public String getWeekday( Date date ) {
+ SimpleDateFormat format = new SimpleDateFormat( "EE", getLocale() );
+ format.setTimeZone( getTimeZone() );
+ return format.format( date );
+ }
+
+ /* (non-Javadoc)
+ * @see org.rapla.common.IRaplaLocale#getMonth(java.util.Date)
+ */
+ public String getMonth( Date date ) {
+ SimpleDateFormat format = new SimpleDateFormat( "MMMMM", getLocale() );
+ format.setTimeZone( getTimeZone() );
+ return format.format( date );
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.rapla.common.IRaplaLocale#getTimeZone()
+ */
+ public TimeZone getTimeZone() {
+ return zone;
+ }
+
+ /* (non-Javadoc)
+ * @see org.rapla.common.IRaplaLocale#getLocale()
+ */
+ public Locale getLocale() {
+ return localeSelector.getLocale();
+ }
+
+ public String getCharsetNonUtf()
+ {
+ return charsetForHtml;
+ }
+
+
+}
+
+
diff --git a/Rapla/src/org/rapla/RaplaLogKitAdapater.java b/Rapla/src/org/rapla/RaplaLogKitAdapater.java
new file mode 100644
index 0000000..7e617df
--- /dev/null
+++ b/Rapla/src/org/rapla/RaplaLogKitAdapater.java
@@ -0,0 +1,55 @@
+/*--------------------------------------------------------------------------*
+| Copyright (C) 2006 Christopher Kohlhaas |
+| |
+| This program is free software; you can redistribute it and/or modify |
+| it under the terms of the GNU General Public License as published by the |
+| Free Software Foundation. A copy of the license has been included with |
+| these distribution in the COPYING file, if not go to www.fsf.org |
+| |
+| As a special exception, you are granted the permissions to link this |
+| program with every library, which license fulfills the Open Source |
+| Definition as published by the Open Source Initiative (OSI). |
+*--------------------------------------------------------------------------*/
+package org.rapla;
+
+
+import org.apache.avalon.excalibur.logger.LogKitLoggerManager;
+import org.apache.avalon.excalibur.logger.LoggerManager;
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.container.ContainerUtil;
+import org.apache.avalon.framework.context.DefaultContext;
+import org.apache.avalon.framework.logger.Logger;
+import org.rapla.components.util.IOUtil;
+import org.rapla.framework.RaplaException;
+import org.rapla.framework.StartupEnvironment;
+import org.rapla.framework.internal.LogManagerAdapter;
+
+
+class RaplaLogKitAdapater implements LogManagerAdapter {
+
+ LoggerManager m_loggerManager;
+
+ public RaplaLogKitAdapater(StartupEnvironment env, Configuration loggerConfig) throws RaplaException {
+ try {
+ final String lmLoggerName = loggerConfig.getAttribute( "logger","system.logkit" );
+ m_loggerManager= new LogKitLoggerManager( "rapla", lmLoggerName );
+ DefaultContext context = new DefaultContext();
+ context.put( "context-root",IOUtil.getFileFrom(env.getContextRootURL()));
+ ContainerUtil.enableLogging( m_loggerManager, env.getBootstrapLogger());
+ ContainerUtil.contextualize( m_loggerManager, context);
+ ContainerUtil.configure( m_loggerManager, loggerConfig);
+ } catch (Exception ex) {
+ throw new RaplaException(ex);
+ }
+
+ }
+ public Logger getLoggerForCategory(String categoryName) {
+ return m_loggerManager.getLoggerForCategory( categoryName );
+ }
+
+ public Logger getDefaultLogger() {
+ return m_loggerManager.getDefaultLogger();
+ }
+
+
+}
diff --git a/Rapla/src/org/rapla/RaplaMainContainer.java b/Rapla/src/org/rapla/RaplaMainContainer.java
new file mode 100644
index 0000000..4250861
--- /dev/null
+++ b/Rapla/src/org/rapla/RaplaMainContainer.java
@@ -0,0 +1,219 @@
+/*--------------------------------------------------------------------------*
+ | Copyright (C) 2006 Christopher Kohlhaas |
+ | |
+ | This program is free software; you can redistribute it and/or modify |
+ | it under the terms of the GNU General Public License as published by the |
+ | Free Software Foundation. A copy of the license has been included with |
+ | these distribution in the COPYING file, if not go to www.fsf.org |
+ | |
+ | As a special exception, you are granted the permissions to link this |
+ | program with every library, which license fulfills the Open Source |
+ | Definition as published by the Open Source Initiative (OSI). |
+ *--------------------------------------------------------------------------*/
+package org.rapla;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.logger.Logger;
+import org.rapla.components.util.IOUtil;
+import org.rapla.components.xmlbundle.I18nBundle;
+import org.rapla.components.xmlbundle.LocaleSelector;
+import org.rapla.components.xmlbundle.impl.I18nBundleImpl;
+import org.rapla.entities.domain.AppointmentFormater;
+import org.rapla.framework.PluginDescriptor;
+import org.rapla.framework.RaplaContext;
+import org.rapla.framework.RaplaDefaultContext;
+import org.rapla.framework.RaplaException;
+import org.rapla.framework.RaplaLocale;
+import org.rapla.framework.StartupEnvironment;
+import org.rapla.framework.internal.ConfigTools;
+import org.rapla.framework.internal.ContainerImpl;
+import org.rapla.framework.internal.LogManagerAdapter;
+import org.rapla.gui.CalendarOptions;
+import org.rapla.gui.CalendarOptionsImpl;
+import org.rapla.server.ShutdownService;
+import org.rapla.server.internal.ShutdownServiceImpl;
+/**
+The Rapla Main Container class for the basic container for Rapla specific services and the rapla plugin architecture.
+The rapla container has only one instance at runtime. Configuration of the RaplaMainContainer is done in the rapla*.xconf
+files. Typical configurations of the MainContainer are
+
+
+ - Standalone (rapla.xconf): A ClientService, one facade (with preconfigured auto admin login) and a storage (file).
+ - Client (raplaclient.xconf ): A ClientService, one facade (without auto login) and a remote storage ( automaticaly pointing to the download server in webstart mode)
+ - Server (raplaserver.xconf ): A ServerService (providin a facade) a messaging server for handling the connections with the clients, a storage (file or db) and an extra service for importing and exporting in the db
+ - Embedded: Configuration example follows.
+
+
+The Main Container provides the following Services to all RaplaComponents
+
+- I18nBundle
+- AppointmentFormater
+- RaplaLocale
+- LocaleSelector
+- RaplaMainContainer.PLUGIN_LIST (A list of all available plugins)
+
+
+
+ @see I18nBundle
+ @see RaplaLocale
+ @see AppointmentFormater
+ @see LocaleSelector
+ */
+final public class RaplaMainContainer extends ContainerImpl
+{
+ public RaplaMainContainer() throws Exception {
+ this(new RaplaStartupEnvironment());
+ }
+
+ public RaplaMainContainer(RaplaStartupEnvironment env) throws Exception {
+ this( createRaplaContext(env,env.getLoggerConfig()),env );
+ }
+
+ public RaplaMainContainer(StartupEnvironment env) throws Exception {
+ this( createRaplaContext(env, null),env );
+ }
+
+ RaplaMainContainer( RaplaContext context, StartupEnvironment env) throws Exception{
+ super( context, env.getStartupConfiguration() );
+ addContainerProvidedComponentInstance( StartupEnvironment.ROLE, env);
+ addContainerProvidedComponentInstance( "download-server", env.getDownloadURL().getHost());
+ addContainerProvidedComponentInstance( "download-url", env.getDownloadURL());
+ if (env.getContextRootURL() != null)
+ {
+ addContainerProvidedComponentInstance( "context-root", IOUtil.getFileFrom( env.getContextRootURL()));
+ }
+ initialize();
+
+ }
+
+
+ private static RaplaContext createRaplaContext( StartupEnvironment env, Configuration loggerConfig ) throws RaplaException
+ {
+ Logger logger = env.getBootstrapLogger();
+ LogManagerAdapter logManager = null;
+ if ( loggerConfig != null ) {
+ if ( checkForAvalonLogManager()) {
+ logManager = new RaplaLogKitAdapater( env, loggerConfig );
+ // Replace bootstrap logger with new logkit logger
+ logger = logManager.getDefaultLogger();
+ } else {
+ logger.warn("avalon logging jar not found. Using bootstrap logger.");
+ }
+ }
+
+ RaplaDefaultContext context = new RaplaDefaultContext();
+ if ( logManager != null)
+ {
+ context.put("logger-manager", logManager);
+ }
+ context.put( Logger.class.getName(), logger);
+
+ return context;
+ }
+
+ private static boolean checkForAvalonLogManager()
+ {
+ try {
+ Class.forName("org.apache.avalon.excalibur.logger.LogKitLoggerManager");
+ return true;
+ } catch (Throwable ex ) {
+ return false;
+ }
+ }
+
+ protected Map getComponentInfos() {
+ return new RaplaMetaConfigInfo();
+
+ }
+
+ private void initialize() throws Exception {
+ addContainerProvidedComponent( ShutdownService.ROLE, ShutdownServiceImpl.class.getName());
+
+ CalendarOptions calendarOptions = new CalendarOptionsImpl(m_config.getChild("locale"));
+ addContainerProvidedComponentInstance( CalendarOptions.ROLE, calendarOptions );
+
+ RaplaLocaleImpl raplaLocale = new RaplaLocaleImpl(m_config.getChild("locale"), getLogger());
+ // Startup mode= EMBEDDED = 0, CONSOLE = 1, WEBSTART = 2, APPLET = 3, SERVLET = 4
+ getLogger().info("----------- Rapla startup mode = " + getStartupEnvironment().getStartupMode()); //BJO
+ getLogger().info("Default Locale= " + Locale.getDefault().toString()); //BJO
+ getLogger().info("Configured Locale= " + raplaLocale.getLocaleSelector().getLocale().toString()); //BJO
+ addContainerProvidedComponentInstance( RaplaLocale.ROLE,raplaLocale);
+ addContainerProvidedComponentInstance( LocaleSelector.ROLE,raplaLocale.getLocaleSelector());
+
+ Configuration[] defaultBundles = m_config.getChildren("default-bundle");
+ for ( int i=0;i< defaultBundles.length;i++) {
+ String defaultBundleName = defaultBundles[i].getValue();
+ addContainerProvidedComponent
+ (
+ I18nBundle.ROLE
+ ,I18nBundleImpl.class.getName()
+ ,defaultBundleName
+ ,I18nBundleImpl.createConfig( defaultBundleName )
+ );
+ }
+
+ addContainerProvidedComponent
+ (
+ I18nBundle.ROLE
+ ,I18nBundleImpl.class.getName()
+ ,"org.rapla.RaplaResources"
+ ,I18nBundleImpl.createConfig( "org.rapla.RaplaResources" )
+ );
+
+ addContainerProvidedComponentInstance( AppointmentFormater.ROLE, new AppointmentFormaterImpl( getContext()));
+
+ // Override the intern Resource Bundle with user provided
+ for ( int i=0;i< defaultBundles.length;i++) {
+ String defaultBundleName = defaultBundles[i].getValue();
+ I18nBundleImpl i18n = (I18nBundleImpl)getContext().lookup( I18nBundle.ROLE + "/" + defaultBundleName);
+ String parentId = i18n.getParentId();
+ if ( parentId != null) {
+ addContainerProvidedComponentInstance(I18nBundle.ROLE,parentId, i18n);
+ }
+ }
+
+ // Discover and register the plugins for Rapla
+ Enumeration pluginEnum = ConfigTools.class.getClassLoader().getResources("META-INF/rapla-plugin.list");
+ List pluginList = new ArrayList( );
+ while ( pluginEnum.hasMoreElements() ) {
+ BufferedReader reader = new BufferedReader(new InputStreamReader(((URL)pluginEnum.nextElement()).openStream()));
+ while ( true ) {
+ String plugin = reader.readLine();
+ if ( plugin == null)
+ break;
+ pluginList.add((PluginDescriptor) instanciate(plugin, null, getLogger()));
+ }
+ }
+ addContainerProvidedComponentInstance( PluginDescriptor.PLUGIN_LIST, pluginList);
+ getLogger().info("Config=" + getStartupEnvironment().getConfigURL());
+ getLogger().info("Config=" + getStartupEnvironment().getLoggerConfigURL());
+
+ I18nBundleImpl m_i18n = (I18nBundleImpl)getContext().lookup(I18nBundle.ROLE + "/org.rapla.RaplaResources");
+ String version = m_i18n.getString( "rapla.version" );
+ getLogger().info("Rapla.Version=" + version);
+ version = m_i18n.getString( "rapla.build" );
+ getLogger().info("Rapla.Build=" + version);
+ try {
+ version = System.getProperty("java.version");
+ getLogger().info("Java.Version=" + version);
+ } catch (SecurityException ex) {
+ version = "-";
+ getLogger().warn("Permission to system property java.version is denied!");
+ }
+ }
+
+ public void dispose() {
+ getLogger().info("Shutting down rapla-container"); //BJO
+ super.dispose();
+ }
+ }
+
diff --git a/Rapla/src/org/rapla/RaplaMetaConfigInfo.java b/Rapla/src/org/rapla/RaplaMetaConfigInfo.java
new file mode 100644
index 0000000..77173dd
--- /dev/null
+++ b/Rapla/src/org/rapla/RaplaMetaConfigInfo.java
@@ -0,0 +1,61 @@
+/*--------------------------------------------------------------------------*
+ | Copyright (C) 2006 Christopher Kohlhaas |
+ | |
+ | This program is free software; you can redistribute it and/or modify |
+ | it under the terms of the GNU General Public License as published by the |
+ | Free Software Foundation. A copy of the license has been included with |
+ | these distribution in the COPYING file, if not go to www.fsf.org |
+ | |
+ | As a special exception, you are granted the permissions to link this |
+ | program with every library, which license fulfills the Open Source |
+ | Definition as published by the Open Source Initiative (OSI). |
+ *--------------------------------------------------------------------------*/
+package org.rapla;
+
+import java.util.HashMap;
+
+import org.rapla.client.ClientService;
+import org.rapla.client.internal.RaplaClientServiceImpl;
+import org.rapla.components.mail.MailInterface;
+import org.rapla.components.mail.SmtpClient;
+import org.rapla.components.xmlbundle.I18nBundle;
+import org.rapla.components.xmlbundle.impl.I18nBundleImpl;
+import org.rapla.facade.ClientFacade;
+import org.rapla.facade.internal.FacadeImpl;
+import org.rapla.framework.internal.ComponentInfo;
+import org.rapla.plugin.jndi.JNDIAuthenticationStore;
+import org.rapla.server.ServerService;
+import org.rapla.server.ShutdownService;
+import org.rapla.server.internal.ServerServiceImpl;
+import org.rapla.server.internal.ShutdownServiceImpl;
+import org.rapla.storage.CachableStorageOperator;
+import org.rapla.storage.ImportExportManager;
+import org.rapla.storage.StorageOperator;
+import org.rapla.storage.dbfile.FileOperator;
+import org.rapla.storage.dbrm.RemoteOperator;
+import org.rapla.storage.dbsql.DBOperator;
+import org.rapla.storage.impl.ImportExportManagerImpl;
+
+
+class RaplaMetaConfigInfo extends HashMap {
+ private static final long serialVersionUID = 1L;
+
+ public RaplaMetaConfigInfo() {
+ put( "rapla-client", new ComponentInfo(RaplaClientServiceImpl.class.getName(),ClientService.class.getName()));
+ put( "resource-bundle",new ComponentInfo(I18nBundleImpl.class.getName(),I18nBundle.class.getName()));
+ put( "facade",new ComponentInfo(FacadeImpl.class.getName(),ClientFacade.class.getName()));
+ put( "file-storage",new ComponentInfo(FileOperator.class.getName(),new String[] {StorageOperator.class.getName(), CachableStorageOperator.class.getName()}));
+ put( "remote-storage",new ComponentInfo(RemoteOperator.class.getName(),new String[] {StorageOperator.class.getName(), CachableStorageOperator.class.getName()}));
+ put( "db-storage",new ComponentInfo(DBOperator.class.getName(),new String[] {StorageOperator.class.getName(), CachableStorageOperator.class.getName()}));
+ put( "sql-storage",new ComponentInfo(DBOperator.class.getName(),new String[] {StorageOperator.class.getName(), CachableStorageOperator.class.getName()}));
+
+ put( "importexport", new ComponentInfo(ImportExportManagerImpl.class.getName(),ImportExportManager.class.getName()));
+ put( "shutdown-service", new ComponentInfo(ShutdownServiceImpl.class.getName(),ShutdownService.class.getName()));
+ put( "jndi-authentication", new ComponentInfo(JNDIAuthenticationStore.class.getName()));
+
+ put( "rapla-server", new ComponentInfo(ServerServiceImpl.class.getName(),ServerService.class.getName()));
+ put("smtp-service", new ComponentInfo( SmtpClient.class.getName(), MailInterface.ROLE ));
+ }
+}
+
+
diff --git a/Rapla/src/org/rapla/RaplaResources.xml b/Rapla/src/org/rapla/RaplaResources.xml
new file mode 100644
index 0000000..43bea67
--- /dev/null
+++ b/Rapla/src/org/rapla/RaplaResources.xml
@@ -0,0 +1,3837 @@
+
+
+
+
+
+
+ @doc.version@
+
+
+
+ @doc.buildtime@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Apply
+ Übernehmen
+ Valider
+ Aplicar
+ Použít
+ OK
+ Zastosuj
+
+
+ Go back
+ Zurück
+ Retour
+ Volver
+ Zpět
+ Sluit
+ Wstecz
+
+
+ Cancel
+ Abbrechen
+ Annuler
+ Cancelar
+ Zrušit
+ Annuleren
+ Anuluj
+
+
+ Continue
+ Weiter
+ Suivant
+ Continuar
+ Pokračovat
+ Verder
+ Kontynuuj
+
+
+ Error
+ Fehler
+ Erreur
+ Error
+ Chyba
+ Fout
+ Błąd
+
+
+ Exception
+ Ausnahme-Fehler
+ Exception
+ Excepción
+ Vyjímka
+ Uitzondering
+ Wyjątek
+
+
+ OK
+ OK
+ OK
+ OK
+ Budiž
+ OK
+ OK
+
+
+ Warning
+ Warnung
+ Attention
+ Atención
+ Varování!
+ Waarschuwing
+ Uwaga
+
+
+
+ Abort
+ Abbrechen
+ Annuler
+ Anular
+ Ukončit
+ Annuleren
+ Anuluj
+
+
+ Add
+ Hinzufügen
+ Insérer
+ Añadir
+ Přidat
+ Toevoegen
+ Dodaj
+
+
+ Change
+ Ändern
+ Modifier
+ Modificar
+ Změnit
+ Wijzig
+ Zmień
+
+
+ Confirm
+ Bestätigen
+ Confirmer
+ Confirmar
+ Potvrdit
+ Bevestig
+ Akceptuj
+
+
+ Color
+ Farbe
+ Couleur
+ Color
+ Barva
+ Kleur
+ Kolor
+
+
+ Copy
+ Kopieren
+ Copier
+ Copiar
+ Kopie
+ Kopieer
+ Kopiuj
+
+
+ Copy to Clipboard
+ In die Zwischenablage
+ Copier vers le presse papier
+ Copiar al portapapeles
+ Kopírovat do schránky
+ Kopieër naar plakbord
+ Kopiuj do schowka
+
+
+ Close
+ Schließen
+ Fermer
+ Cerrar
+ Zavřít
+ Sluit
+ Zamknij
+
+
+ Create
+ Erstellen
+ Fermer
+ Crear
+ Vytvořit
+ Aanmaken
+ Utwórz
+
+
+ Delete
+ Löschen
+ Effacer
+ Borrar
+ Smazat
+ Verwijderen
+ Usuń
+
+
+ Delete Selection
+ Auswahl löschen
+ Effacer la sélection
+ Borrar la selección
+ Smazat výběr
+ Verwijder selectie
+ Usuń
+
+
+ Edit
+ Bearbeiten
+ Modifier
+ Editar
+ Upravit
+ Bewerk
+ Edytuj
+
+
+ Exit
+ Beenden
+ Quitter
+ Salir
+ Odejít
+ Sluiten
+ Wyjście
+
+
+ Publish
+ Veröffentlichen
+ Publier
+ Publicar
+ Publikuj
+ publikovat
+ Publiceer
+
+
+ Export
+ Export
+ Export
+ Exportar
+ Export
+ Publiceer
+ Eksportuj
+
+
+ Insert
+ Einfügen
+ Insérer
+ Insertar
+ Vložit
+ Toevoegen
+ Wstaw
+
+
+ Import
+ Import
+ Import
+ Importar
+ Import
+ Importeer
+
+
+ Keep
+ Beibehalten
+ Conserver
+ Conservar
+ Podržet
+ Bewaar
+ Zachowaj
+
+
+ Load
+ Laden
+ Charger
+ Cargar
+ Nahrát
+ Laad
+ Wczytaj
+
+
+ Login
+ Login
+ Login
+ Acceso
+ Login
+ Aanmelden
+ Logowanie
+
+
+ Logout
+ Logout
+ Quitter
+ Salir
+ Odhlásit
+ Afmelden
+ Wyloguj
+
+
+ Move
+ Verschieben
+ Déplacer
+ Mover
+ Přesunout
+ Verplaats
+ Przenieś
+
+
+ New
+ Neu
+ Nouveau
+ Nuevo
+ Nový
+ Nieuw
+ Nowy
+
+
+ Paste
+ Einfügen
+ Coller
+ Pegar
+ Vložit
+ Plakken
+ Wklej
+
+
+ Paste As
+ Einfügen als
+ Coller
+ Pegar como
+ Vložit vše
+ Plakken als
+ Wklej jako
+
+
+ Print
+ Drucken
+ Imprimer
+ Imprimir
+ Tisknout
+ Afdrukken
+ Drukuj
+
+
+ Print
+ Drucke
+ Imprimer
+ Imprimir
+ Tisknout
+ Afdrukken
+ Drukuj
+
+
+ Print to File
+ In Datei drucken
+ Imprimer en Fichier
+ Imprimir en Fichero
+ Tisk do souboru
+ Afdrukken naar Bestand
+ Drukuj do pliku
+
+
+ Refresh
+ Aktualisieren
+ Actualiser
+ Actualizar
+ Obnovit
+ Actualiseren
+ Odśwież
+
+
+ Remove
+ Entfernen
+ Effacer
+ Eliminar
+ Odstranit
+ Verwijderen
+ Usuń
+
+
+ Root
+ Wurzel
+ Racine
+ Raíz
+ root
+ Oorsprong
+
+
+ Save
+ Speichern
+ Sauvegarder
+ Guardar
+ Uložit
+ Opslaan
+ Zapisz
+
+
+ Show As
+ Anzeigen als
+ Afficher
+ Mostrar como
+ Ukaž vše
+ Type
+ Wyświetlaj jako
+
+
+ View
+ Anzeige
+ Affichage
+ Ver
+ Pohled
+ Overzicht
+ Widok
+
+
+
+ All users
+ alle Benutzer
+ Tous les utilisateurs
+ Todos los usuarios
+ Všichni uživatelé
+ Alle gebruikers
+ Wszyscy
+
+
+ Alteration
+ Änderung
+ Modification
+ Modificación
+ Změna
+ Wijziging
+ Zmiana
+
+
+ and
+ und
+ et
+ y
+ a
+ en
+ i
+
+
+ Attribute
+ Attribut
+ Attribut
+ Atributo
+ Vlastnost
+ Kenmerk
+ Atrybut
+
+
+ Attributes
+ Attribute
+ Attributs
+ Atributos
+ Potvrdit
+ Kenmerken
+ Atrybuty
+
+
+ Available
+ vorhanden
+ Disponible
+ Disponible
+ Dostupný
+ Beschikbaar
+ Dostępne
+
+
+ Calendar
+ Kalender
+ Calendrier
+ Calendario
+ Kalendář
+ Kalender
+ Kalendarz
+
+
+ Categories
+ Kategorien
+ Catégories
+ Categorías
+ Seznam kategorií
+ Klassement
+ Kategorie
+
+
+ Category
+ Kategorie
+ Catégorie
+ Categoría
+ Kategorie
+ Klassement
+ Kategoria
+
+
+ Changes
+ Änderungen
+ Modifications
+ Modificaciones
+ Změny
+ Wijzigingen
+ Zmiany
+
+
+ Class
+ Klasse
+ Classe
+ Clase
+ Třída
+ Klasse
+ Klasa
+
+
+ Classification
+ Klassifizierung
+ Classification
+ Clasificación
+ Hodnocení
+ Klassificatie
+ Klasyfikacja
+
+
+ Connection with server
+ Verbindung mit dem Server
+ connexion au serveur
+ conexión a servidor
+ Verbinding met de Server
+ Połączenie z serwerem
+
+
+ Constraints
+ Einschränkungen
+ Contraintes
+ Restricciones
+ Omezení
+ Beperkingen
+ Ograniczenia
+
+
+ Created at
+ erstellt am
+ Créé le
+ Creado el
+ Vytvořeno
+ Aangemaakt op
+ Stworzono
+
+
+ Customized
+ benutzerdefiniert
+ Spécifique
+ Específico
+ Přizpůsobený
+ Aangepast door Gebruiker
+ Dostosowany
+
+
+ Date
+ Datum
+ Date
+ Fecha
+ Datum
+ Datum
+ Data
+
+
+ Default
+ Standard
+ Standard
+ Estándar
+ Výchozí
+ Standaard
+ Domyślne
+
+
+ Destination
+ Ziel
+ destination
+ Destino
+ Cíl
+ Naar
+ Miejsce docelowe
+
+
+ Show advanced settings
+ zeige Profi-Einstellungen
+ Affiche paramétrage pour utilisateurs expérimentés
+ Mostrar parámetros para usuarios experimentados
+ Zobraz pokročilé nastavení
+ Toon speciale instellingen
+ Pokaż zaawansowane ustawienia
+
+
+ Element key
+ Elementschlüssel
+ Clé d'élément
+ Clave de elemento
+ Klíč elementu
+ Elementsleutel
+ Klucz
+
+
+ Email
+ Email
+ Email
+ Email
+ e-mail
+ Email
+ E-mail
+
+
+ End time
+ Endzeit
+ Heure de fin
+ Hora final
+ Čas ukončení
+ tot
+ Czas zakończenia
+
+
+ End date
+ Ende
+ Fin
+ Fin
+ Konec
+ Stop datum
+ Data zakończenia
+
+
+ Filter
+ Filter
+ Filtre
+ Filtro
+ Filter
+ Filtr
+
+
+ Fixed Date
+ festes Datum
+ Date fixe
+ Fecha fija
+ Pevný datum
+ Vaste datum
+ Ustalona data
+
+
+ for
+ für
+ pour
+ para
+ Pro
+ voor
+ dla / na
+
+
+ Go to Date
+ Datum anzeigen
+ Atteindre la date
+ Ir a la fecha
+ Jít na datum
+ Ga naar datum
+ Idź do daty
+
+
+ Group
+ Gruppe
+ Groupe
+ Grupo
+ Skupina
+ Groep
+ Grupa
+
+
+ Groups
+ Gruppen
+ Groupes
+ Grupos
+ Skupiny
+ Groepen
+ Grupy
+
+
+ Help
+ Hilfe
+ Aide
+ Ayuda
+ Pomoc
+ Help
+ Pomoc
+
+
+ Hierarchy
+ Hierarchie
+ Hiérarchie
+ Jerarquía
+ Hierarchie
+ Hierarchie
+ Hierarchia
+
+
+ About Rapla...
+ Info
+ Information
+ Info
+ Informace
+ Informatie
+ O Rapla
+
+
+ Not visible
+ nicht sichtbar
+ non visible
+ no visible
+ neviditeně
+ onzichtbaar
+ Ukryty
+
+
+ Not visible.
Access to the reservation info is restricted.
+ Nicht sichtbar.
Der Zugriff auf die Reservierungsinformation ist eingeschränkt.
+ Non visible.
L'accès aux détails de la réservation est restreint.
+ No visible.
El acceso a la información de la reserva está restringido.
+ Skrytá položka.
Přístup k rezervačním informacím je zakázán.
+ Gewijgerd.
Toegang tot de boekings informatie is beperkt.
+ Ukryty.
Dostęp do informacji o rezerwacji jest zastrzeżony.
+
+
+ Not currently selected.
Unselect "Only Own Reservations" or change your filter settings.
+ Nicht ausgewählt.
Schalten Sie "nur eigene Reservierungen" aus oder ändern Sie die Filtereinstellungen.
+ Actuellement non sélectionné.
Dé-sélectionnez "Seulement mes réservations" ou changez vos réglages du filtre.
+ Actualmente no seleccionado.
Desmarca "Sólo mis reservas" o cambia las configuraciones de los filtros.
+ Položka není v této chvíli vybrána.
Odstraňte volbu "Moje rezervace", nebo změňte nastavení vašeho filtru.
+ ""Enkel eigen reservaties" afvinken" of wijzig de filter instellingen.".
+ Nie wybrano.
Odznacz opcję "Pokaż tylko moje rezerwacje" lub zmień ustawienia filtru.
+
+
+ Key
+ Schlüssel
+ Clé
+ Clave
+ Klíč
+ Sleutel
+ Klucz
+
+
+ Language
+ Sprache
+ Langue
+ Idioma
+ Jazyk
+ Taal
+ Język
+
+
+ Last changed
+ zuletzt geändert am
+ Dernière modification le
+ Última modificación el
+ Naposledy změněno
+ Gewijzigd op
+ Ostatnia zmiana
+
+
+ Last changed by
+ zuletzt geändert von
+ Dernière modification
+ Última modificación
+ Naposledy změnil uživatel:
+ Laatst gewijzigd door
+ Zmienione przez
+
+
+ Legend
+ Legende
+ Légende
+ Leyenda
+ Legenda
+ Legende
+ Legenda
+
+
+ Level
+ Level
+ Niveau
+ Nivel
+ Úroveň
+ Niveau
+ Poziom
+
+
+ Nothing selected
+ Nichts ausgewählt
+ Rien de sélectionné
+ Nada seleccionado
+ Není vybrána žádná položka
+ Geen selectie
+ Nic nie wybrano
+
+
+ Name
+ Name
+ Nom
+ Nombre
+ Jméno
+ Naam
+ Nazwa
+
+
+ Never
+ nie
+ Jamais
+ Nunca
+ Nikdy
+ nooit
+ Nigdy
+
+
+ Every time
+ immer
+ Toujours
+ Siempre
+ pokaždé
+ onbeperkt
+ Zawsze
+
+
+ No
+ Nein
+ Non
+ No
+ Ne
+ Nee
+ Nie
+
+
+ No classification
+ keine Klassifizierung
+ Pas de classification
+ Sin clasificación
+ Neklasifikováno
+ Geen Classificatie
+ Brak klasyfikacji
+
+
+ Options
+ Einstellungen
+ Options
+ Opciones
+ Volby
+ Opties
+ Opcje
+
+
+ or
+ oder
+ ou
+ o
+ nebo
+ of
+ lub
+
+
+ Open
+ offen
+ Ouvrir
+ Abrir
+ Otevřít
+ Onbepaald
+ Otwórz
+
+
+ Permissions
+ Zugriffsrechte
+ Permissions
+ Permisos
+ Přístupová práva
+ Toegang
+ Uprawnienia
+
+
+ Preferences
+ Einstellungen
+ préférence
+ Preferencias
+ Předvolby
+ Voorkeur
+ Preferencje
+
+
+ Question
+ Frage
+ Question
+ Pregunta
+ Otázka
+ Vraag
+ Pytanie
+
+
+ Report
+ Report
+ Rapport
+ Informe
+ Report
+ Rapport
+ Raport
+
+
+ Calendar settings
+ Kalendareinstellungen
+ L'Affichage
+ la configuración del calendario
+ nastavení pohledu
+ Overzicht opslaan
+ ustawienia Kalendarz
+
+
+ Search
+ Suche
+ Rechercher
+ Buscar
+ Hledat
+ Opzoeken
+ Szukaj
+
+
+ Select
+ auswählen
+ Sélectionner
+ Seleccionar
+ Vybrat
+ Selecteer
+ Zaznacz
+
+
+ Selected
+ ausgewählt
+ Sélectionné
+ Seleccionado
+ Vybráno
+ Actief
+ Wybrane
+
+
+ Selection
+ Auswahl
+ Sélection
+ Selección
+ Výběr
+ Selecteer voorkeur
+ Zaznaczenie
+
+
+ Source
+ Quelle
+ source
+ Fuente
+ Zdroj
+ Van
+ Źródło
+
+
+ Start time
+ Startzeit
+ Heure de début
+ Hora de inicio
+ Počáteční čas
+ van
+ Czas rozpoczęcia
+
+
+ Start
+ Beginn
+ Début
+ Inicio
+ Počáteční datum
+ Start datum
+ Data rozpoczęcia
+
+
+ Table
+ Tabelle
+ Table
+ Tabla
+ tabule
+ Tabel
+ Tabela
+
+
+ Today
+ Heute
+ Aujourd'hui
+ Hoy
+ Dnes
+ Vandaag
+ Dziś
+
+
+
+ at
+ um
+ à
+ a las
+ v
+ van
+ o
+
+
+ until
+ bis
+ jusqu'à
+ hasta
+ do
+ tot
+ do
+
+
+ Total occurances
+ Gesamtanzahl Termine
+ Nombre d'occurrences
+ Número de apariciones
+ celkem záznamů
+ Totaal aantal
+ Suma wystąpień
+
+
+ Translation
+ Übersetzung
+ Traduction
+ Traducción
+ překlad
+ Vertaling
+ Tłumaczenie
+
+
+ Width
+ Breite
+ Largeur
+ Ancho
+ šířka
+ Breedte
+ Szerokość
+
+
+ Yes
+ Ja
+ Oui
+ Sí
+ ano
+ Ja
+ Tak
+
+
+ x Days in advance
+ x Tage im Voraus
+ x jours en avance
+ x días de antelación
+ x dní předem
+ x dagen op voorhand
+ x dni wcześniej
+
+
+ Server
+ Server
+ Serveur
+ Servidor
+ Server
+ Server
+ Serwer
+
+
+ File
+ Datei
+ Fichier
+ Fichero
+ Soubor
+ Bestand
+ Plik
+
+
+ with
+ mit
+ avec
+ con
+ s
+ met
+ z
+
+
+
+
+ WARNING: Conflicts found!
+ WARNUNG: Konflikte gefunden!
+ ATTENTION : Conflits trouvés !
+ ¡ATENCIÓN : Se han encontrado conflictos!
+ POZOR: Nalezen konflikt !
+ WAARSCHUWING: Conflict gevonden!
+ UWAGA: Wykryto konflikt!
+
+
+ WARNING: The same appointment exists multiple times [{0}]!
+ WARNUNG: Den gleichen Termin gibt es mehrmals [{0}]!
+ ATTENTION : La même réservation existe plusieurs fois [{0}]!
+ ¡ATENCIÓN : La misma reserva existe en múltiples ocasiones [{0}]!
+ POZOR: Stejné ujednání existuje ve více časech [{0}]!
+ WAARSCHUWING: Dezelfde afspraak bestaat meerdere keren: [{0}]!
+ UWAGA: Ten sam termin występuje kilkakrotnie [{0}]!
+
+
+ These settings should only be changed by experienced users!
+ Diese Einstellungen sollten nur von erfahrenen Benutzern verändert werden!
+ Ce paramétrage est réservé aux utilisateurs expérimentés !
+ ¡Estos parámetros están reservados sólo para usuarios experimentados!
+ Tato nastavení by měla být měněna zkušenými uživateli!
+ Deze instelling kan enkel gewijzigd worden door een super gebruiker!
+ Nie kombinuj, chyba, że wiesz, co robisz ;)
+
+
+ You have no permissions to reserve/change [{0}] an appointment [{1}]!
+ Sie haben keine Zugriffsrechte um [{0}] an dem Termin [{1}] zu reservieren/ändern!
+ Vous ne disposez pas des droits suffisants pour effectuer/modifier [{0}] la réservation [{1}]
+ ¡No tiene permisos suficientes para efectuar/modificar [{0}] la reserva [{1}]!
+ Nemáte pověření rezervovat/měnit [{0}] v ujednání vaci [{1}]!
+ Plannen of wijzigen van [{0}] in reservatie [{1}] is niet toegestaan!
+ Nie masz uprawnień do zmiany/ustalenia [{0}] terminu [{1}]!
+
+
+ You have no permissions to create conflicts for [{0}]!
+ Sie haben keine Zugriffsrechte um Konflikte für [{0}] zu erzeugen!
+ Vous ne disposez pas des droits suffisants pour créer des conflits pour [{0}] !
+ ¡No tiene permisos suficientes para crear conflictos para [{0}]!
+ Nemáte pověření vytvořit konflikt pro [{0}] !
+ Aanmaken van conflicten voor [{0}], is niet toegestaan!
+ Nie masz uprawnień do tworzenia konfliktów w [{0}]!
+
+
+
+ Period is shorter than 1 week!
+ Der Zeitraum is kürzer als eine Woche!
+ La période est inférieure à une semaine !
+ ¡El periodo es inferior a una semana!
+ Nemáte pověření rezervovat/měnit [{0}] v ujednání vaci [{1}]!
+ Periode minder dan 1 week!
+ Okres krótszy niż tydzień.
+
+
+
+ Data is only modified in memory. Changes will be lost for future sessions.
+ Ihre Änderungen wurden nicht gesichert und gehen beim Beenden der Sitzung verloren!
+ Modifié uniquement en mémoire. La modification sera perdue pour les sessions suivantes !
+ ¡Los datos se han modificado sólo en memoria. Las modificaciones se perderán para las sesiones siguientes!
+ Data jsou změněny pouze v paměti. Změny budou ztraceny pro další použití.
+ Wijzigingen enkel in het geheugen. Gegevens worden niet opgeslagen.
+ Dane zmienione tylko w pamięci. Zmiany zostaną utracone.
+
+
+
+ The event you are editing has been changed.
+ The data displayed in this window will be refreshed.
+ Die Veranstaltung, die gerade bearbeitet
+ wird, wurde geändert. Das Bearbeitungsfenster wird aktualisiert.
+ L'évènement que vous éditez a été modifié.
+ Les informations affichées dans la fenêtre vont être rafraichies.
+ El evento que está editando ha sido modificado.
+ La información que aparece en esta ventana será actualizada.
+ Editovaná položka bude změněna. Zobrazené informace budou obnoveny.
+ Het evenement dat je wil wijzigen is gewijzigd.
+ De gegevens worden terug opgehaald.
+ Edytowane wydarzenie zostało zmienione.
+ Dane w tym oknie zostaną zaktualizowane.
+
+
+
+ The event you are editing has been deleted.
+ Die Veranstaltung die gerade bearbeitet
+ wird, wurde gelöscht.
+ L'évènement que vous éditez vient d'être effacé
+ El evento que está editando ha sido eliminado
+ Editovaná položka bude smazána.
+ Het evenement dat je bewerkt, werd verwijderd.
+ Edytowane wydarzenie zostało usunięte.
+
+
+
+ You have not selected any resources/persons!
+ Sie haben keine Ressourcen/Personen ausgewählt!
+ Vous n'avez pas sélectionné de ressource/personne !
+ ¡No ha seleccionado ningún(a) recurso/persona
+ Nejsou označeny žádné prostředky/osoby!
+ Evenement zonder Personen & Materialen!
+ Nie wybrano żadnych zasobów/osób!
+
+
+
+ The object "{0}" you are editing has been changed outside the window.
+ The current editing will be aborted.
+ Das Objekt "{0}", das gerade bearbeitet
+ wird, wurde geändert. Der aktuelle Editiervorgang wird abgebrochen.
+
+ L''objet "{0}" que vous éditez a été modifié hors de la fenêtre.
+ Cette édition va être interrompue.
+ El objeto "{0}" que está editando ha sido modificado fuera de la ventana
+ La edición actual va a ser interrumpida.
+ Objekt "{0}" který je editován bude změněn mimo okno. Současná editace bude přerušena.
+ Het object "{0}" dat je bewerkt, werd gewijzigd. Bewerken wordt onderbroken.
+
+
+
+
+ Login failed!
+ Fehlerhafter Login!
+ Erreur dans le Login !
+ ¡Error al acceder al sistema!
+ Špatný login!
+ Aanmelding geweigerd!
+ Błąd logowania
+
+
+ Connection to [{0}] failed! Maybe the host is down and you could try later!
+ Verbindung mit [{0}] fehlgeschlagen! Vielleicht ist der Rechner nicht erreichbar. Versuchen Sie es zu einen späteren Zeitpunkt erneut!
+ La connexion vers [{0}] a échoué ! Le serveur n''est peut être pas disponible. Essayez plus tard.
+ ¡La conexión a [{0}] ha fallado! El servidor puede no estar disponible. Inténtelo más tarde.
+ Připojení k [{0}] je špatné! Možná je vypnutý server. Zkuste to později.
+ Verbinding met [{0}] is verbroken, de server is niet beschikbaar, contacteer de Rapla beheerder of probeer later!
+ Nie udało się połączyć z {0}! Być może host jest wyłączony. Spróbuj ponownie później.
+
+
+ No or closed connection to [{0}]. Please restart Rapla.
+ Keine oder unterbrochene Verbindung zu [{0}]. Bitte starten Sie Rapla erneut.
+ Pas ou plus de connexion vers [{0}]. Redémarrer Rapla.
+ Sin conexión a [{0}]. Por favor, reinicie Rapla.
+ Neexistuje nebo nefunguje spojení [{0}]. Prosím restartujte rezervační systém
+ Geen of een gesloten connectie naar [{0}]. Rapla herstarten a.u.b.
+ Brak lub utracone połączenie z {0}. Uruchom ponownie Rapla.
+
+
+
+ At least one type is requiered.
+ Es muss mindestens ein Typ vorhanden sein!
+ Au moins un type doit être disponible !
+ ¡Al menos un tipo debe estar disponible!
+ Je požadován alespoň jeden typ.
+ Minimaal 1 soort is nodig.
+ Przynajmniej jeden typ jest wymagany.
+
+
+
+ You have to enter a title for your event!
+ Sie müssen einen Titel für Ihre Veranstaltung angeben!
+ Vous devez donner un titre à cet évènement !
+ ¡Debe introducir un título para su evento!
+ Vložit nadpis události!
+ Een titel opgeven!
+ Podaj nazwę dla wydarzenia!
+
+
+
+ You need to provide a name!
+ Sie müssen einen Namen angeben!
+ Vous devez donner un nom !
+ ¡Debe dar un nombre!
+ Nutné poskytnout jméno
+ Je moet een naam opgeven!
+ Musisz wpisać nazwę!
+
+
+ You need to provide an entry for: {0}
+ Sie müssen einen Namen angeben für: {0}
+ Vous devez donner un nom pour : {0}
+ Debe dar un nombre para : {0}
+ Nutné poskytnout přístup pro:
+ Je moet de gegevens opgeven voor: {0}
+ Musisz coś wpisać w: {0}
+
+
+
+ You need to provide a key: {0}
+ Sie müssen einen Schlüssel angeben: {0}
+ Vous devez donner une clé pour : {0}
+ Debe dar una clave para : {0}
+ Nutné poskytnout klíč:
+ Een sleutel is verplicht: {0}
+ Musisz podać klucz: {0}
+
+
+ "{0}" is not a valid key!
+ Note: You can only use a combination of max. 50 letters, digits or one of the
+ following characters {1}. The key must start with {2} or a letter! Example: room_size
+
+ "{0}" ist kein gültiger Schlüssel!
+ Note: Sie können nur eine Kombination von max. 50 Buchstaben, Ziffern oder einer der
+ Folgende Zeichen {1}. Der Schlüssel muss mit {2} oder einem Buchstaben beginnen! Beispiel: Anzahl_Plätze
+
+ "{0}" n''est pas une clé valide!
+ Note: Vous ne pouvez utiliser une combinaison de max. 50 lettres, chiffres ou l'une des
+ caractères suivants {1}. La clé doit commencer par {2} ou une lettre! Exemple: Nombre_de_places
+
+ ¡"{0}" no es una clave válida!
+ Nota : Sólo se puede utilizar una combinación de max. 50 letras, dígitos o uno de los
+ siguientes caracteres {1}. La clave debe comenzar con {2} o una carta! Ejemplo: Número_de_plazas
+
+ "{0}" je neplatný klíč!
+ Note: Můžete použít pouze v kombinaci s Max. 50 písmen, číslice nebo jeden z
+ tyto znaky {1}. Klíč musí začínat {2} nebo dopis! Např.: mistnost_velikost
+
+ "{0}" is een ongeldige sleutel!
+ Nota: Maximaal 50 letters, cijfers of {1} beginnend met {2} of een letter!
+
+ "{0}" jest nieprawidłowym kluczem!
+ Możesz użyć tylko liter, cyfr oraz jednego z tych znaków {0}. Klucz musi zaczynać się od litery.
+
+
+
+ An event has to consist of at least one appointment!
+ Eine Veranstaltung muss aus mindestens einem Termin bestehen!
+ Un évènement est constitué d'au moins une réservation !
+ ¡Un evento ha de tener al menos una cita!
+ Evenement zonder reservaties!
+ Wydarzenie musi mieć choć jeden termin.
+
+
+ Dependencies exist for these objects
+ Für folgende Objekte bestehen noch Abhängigkeiten
+ Des dépendences existent pour ces objets
+ Existen dependencias para estos objetos
+ Závislosti existují pro jiný objekt
+ Afhankelijk van
+ Istnieją zależności dla tego obiektu
+
+
+ The name "{0}" is already
+ taken. Please choose a different name!
+ Der Name "{0}" ist schon
+ vergeben. Bitte wählen Sie einen Anderen!
+ Le nom "{0}" est déjà existant. Choisissez en un autre !
+ ¡El nombre "{0}" ya está en uso. Por favor, escoja un nombre diferente!
+ Jméno "{0}" je využíváno. Vyber jiné!
+ De naam "{0}" is reeds in gebruik. Kies een andere naam!
+ Nazwa "{0}" jest już zajęta. Wybierz inną.
+
+
+ The object {0} couldn''t be modified. It was recently modified by someone else.
+ There was a newer version in the storage.
+ Das Objekt {0} konnte nicht verändert werden. Es wurde kürzlich verändert, denn
+ es gibt schon eine neuere Version.
+ L''objet {0} n''a pu être modifié. Il était en cours de modification par quelqu''un d''autre.
+ Une autre version existe.
+ El objeto {0} no ha podido ser modificado. Ha sido modificado recientemente por otra persona.
+ Existe en memoria una versión más reciente del mismo.
+ Objekt {0} nemohl být upraven. Byl upraven nedávno někým jiým.
+ {0} versie {1} is recentelijk gewijzigd, versie {2} is beschikbaar. Probeer later.
+ Nie można zmodyfikować {0}. Obiekt został niedawno zmieniony przez inną osobę. Istnieje nowsza wersja obiektu w pamięci.
+
+
+ The passwords don't match!
+ Die Passwörter stimmen nicht überein!
+ Les mots de passe ne sont pas concordants !
+ ¡Las palabras de paso no coinciden!
+ Heslo neodpovídá
+ De paswoorden verschillen!
+ Hasła nie zgadzają się.
+
+
+ Wrong password!
+ Falsches Passwort!
+ Mauvais mot de passe !
+ ¡Palabra de paso incorrecta!
+ Špatné heslo!
+ Verkeerd paswoord!
+ Błędne hasło!
+
+
+ You can''t delete [{0}], because you are currently using this account!
+ Sie können [{0}] nicht löschen, weil Sie diesen Account benutzen!
+ Vous ne pouvez effacer [{0}], parce que vous utilisez actuellement ce compte !
+ ¡No puede borrar [{0}], porque está usando esa cuenta en estos momentos!
+ Nemůžete smazat [{0}], protože výběr využívá tento účet!
+ Je kan [{0}] niet verwijderen,omdat je deze momenteel in gebruik hebt!
+ Nie możesz usunąć [{0}], ponieważ obecnie używasz tego konta!
+
+
+ Database update failed. All changes were canceled.
+ Während der Speicherung in der Datenbank
+ ist ein Fehler aufgetreten. Alle Änderungen wurden rückgängig
+ gemacht!
+ L'actualisation de la base de données a échoué.
+ Toutes les modifications sont perdues
+ La actualización de la base de datos ha fallado.
+ Se han cancelado todas las modificaciones
+ Databáze se neobnovila. Všechny změny zrušeny.
+ Databank wijziging. Wijzigingen werden geannuleerd.
+ Błąd aktualizacji bazy. Wszystkie zmiany zostały utracone.
+
+
+ Error! Database update failed. Because
+ your database doesn't support transactions, that could lead to
+ serious failures. Please contact your administrator
+ immediately!
+ Achtung! Während der Speicherung in der
+ Datenbank ist ein Fehler aufgetreten. Da die verwendete
+ Datenbank keine Transaktionen unterstützt kann dies zu
+ schwerwiegenden Fehlern in der Applikation fhren. Bitte setzten
+ Sie sich umgehend mit dem zuständigen Adminstrator in Verbindung!
+
+ Attention ! Une erreur est survenue pendant l'actualisation de la base de données. Votre base de données refuse cette transaction. Prévenez immédiatement votre administrateur !
+ ¡Atención! La actualización de la base de datos ha fallado. Puesto
+ que su base de datos no soporta transacciones, esto puedo ocasionar errores serios. Por favor, contacte
+ con su administrador inmediatamente!
+ Chyba! Databáze se neobnovila. Protože databáze nepodporuje transakci, chyba by se mohla opakovat, informujte administrátora
+ Fout! Databank wijziging. Databank ondersteund geen transacties.
+ Dit kan tot serieuze fouten leiden.Neem onmiddelijk contact met de Rapla beheerder!
+ Błąd! Aktualizacja bazy nie powiodła się. Twoja baza nie obsługuje transakcji, co może prowadzić do poważnych błędów. Skontaktuj się ze swoim administratorem.
+
+
+ Error! Referenced object [{0}] not found in store. It was probably recently removed.
+ Achtung! Referenziertes Object [{0}] konnte nicht gefunden werden. Es wurde wahrscheinlich kürzlich von jemand gelöscht.
+ Attention! L''objet référencé [{0}] n''a pu être trouvé. A probablement été effacé récemment.
+ ¡Atención! No se pudo encontrar el objeto referenciado [{0}]. Probablemente se eliminó recientemente.
+ Chyba! Zmíněný objekt [{0}] se nenalézá v databázi. Pravděpodobně byl odstraněn.
+ Fout! Gevraagd object [{0}] niet gevonden. Waarschijnlijk recentelijk verwijderd.
+ Nie można znaleźć obiektu [{0}]. Prawdopodobnie został niedawno usunięty.
+
+
+
+ Choose root category:
+ Wurzelkategorie auswählen
+ Sélectionner la catégorie racine
+ Seleccionar la categoría raíz
+ Vyber hlavní kategorii:
+ Wybierz kategorię główną (root):
+
+
+ Type
+ Typ
+ Type
+ Tipo
+ Typ
+ Folder
+ Typ
+
+
+ Type name
+ Name des Typs
+ Nom du type
+ Nombre de tipo
+ Jméno typu
+ Naam type
+ Nazwa typu
+
+
+ Enclose the key names in {} to insert attributes, e.g. {myKey}
+ Umklammern sie die Schlüsselnamen mit {} um Attribute einzufügen, Bsp. {name}
+ Mettez la clé entre {} pour insérer des attributs, par ex. {maclé}
+ Meta la clave entre {} para insertar los atributos, por ejemplo {miClave}
+ Uzavřené klíčové jméno v {} k vložení vlastnosti, např. {jméno}
+ Sleutels tussen {...} plaatsen; bvb. {mijnSleutel}
+ Nazwy klucza powinny znajdować się w {} np. {klucz}.
+
+
+ Displayed name format
+ Anzeigeformatierung
+ Mettre en forme l'affichage
+ Formato de nombre visualizado
+ Zobrazovaný formát jména
+ Titel formaat
+ Format wyświetlania
+
+
+ Type
+ Typ
+ Type
+ Tipo
+ Typ
+ Type
+ Typ
+
+
+ Types
+ Typen
+ Types
+ Tipos
+ Typy
+ Types
+ Typy
+
+
+
+ Yes|No
+ Ja|Nein
+ Oui|Non
+ Sí|No
+ Ano|Ne
+ Ja|Neen
+ Tak|Nie
+
+
+ Category
+ Kategorie
+ Catégorie
+ Categoría
+ Kategorie
+ Klassement
+ Kategoria
+
+
+ Date
+ Datum
+ Date
+ Fecha
+ Datum
+ Datum
+ Data
+
+
+ Integer
+ Ganze Zahl
+ Nombre entier
+ Número entero
+ Číslo
+ Getal
+ Liczba
+
+
+ Text
+ Text
+ Texte
+ Texto
+ Text
+ Tekst
+ Tekst
+
+
+ Edit View
+ Bearbeitungsansicht
+ Écran de modification
+ Vista de modificación
+ Upravit pohled
+ Toon als
+ Widok edycji
+
+
+ Main View
+ Hauptansicht
+ Écran principal
+ Vista principal
+ Hlavní pohled
+ Basis gegevens
+ Widok główny
+
+
+ Additional Information
+ zusätzliche Informationen
+ Informations complémentaires
+ Información complementaria
+ Doplňující informace
+ Extra gegevens
+ Dodatkowe informacje
+
+
+ invisible
+ nicht sichtbar
+ invisible
+ Invisible
+ Skrytý
+ Onzichtbaar
+ niewidoczny
+
+
+
+ Expected rows
+ Zeilenanzahl
+ Nombre de lignes
+ Número de líneas
+ Očekávaná řadka
+ Aantal rijen
+ Liczba wierszy
+
+
+
+ Expected columns
+ Spaltenbreite
+ Nombre de colonnes
+ Número de columnas
+ Aantal kolommen.
+ Liczba kolumn
+
+
+
+
+ User
+ Benutzer
+ Utilisateur
+ Usuario
+ Uživatel
+ Gebruiker
+ Użytkownik
+
+
+ Users
+ Benutzer
+ Utilisateurs
+ Usuarios
+ Uživatelé
+ Gebruikers
+ Użytkownicy
+
+
+ Switch to
+ wechsle zu
+ Changer pour
+ Cambiar a
+ Přepni k
+ Aanmelden als
+ Przełącz na
+
+
+ switch back
+ wechsle zurück
+ revenir vers
+ Volver a ser administrador
+ Přepni zpět
+ Aanmelden als vorige gebruiker
+ Wróć
+
+
+ Username
+ Benutzername
+ Profil utilisateur
+ Nombre de usuario
+ Uživatelské jméno
+ Gebruiker
+ Nazwa użytkownika
+
+
+ bind with person
+ Mit Person verbinden
+ connecter personne
+ connectar con persona
+ Verbinding met persoon
+
+
+ Administrator
+ Administrator
+ Administrateur
+ Administrador
+ Administrátor
+ Beheerder
+ Administrator
+
+
+ You have adminstrator privileges!
+ Sie haben Administrationsrechte!
+ Vous disposez des droits d'administrateur !
+ ¡Dispone de derechos de administrador!
+ Máte administrátorská práva!
+ Beheerder
+ Masz uprawnienia administratora.
+
+
+ Administration
+ Administration
+ Administration
+ Administración
+ Administrace
+ Systeem beheer
+ Administracja
+
+
+ Password
+ Passwort
+ Mot de passe
+ Palabra de paso
+ Heslo
+ Paswoord
+ Hasło
+
+
+ Old password
+ Altes Passwort
+ Ancien mot de passe
+ Antigüa palabra de paso
+ Staré heslo
+ Oud paswoord
+ Stare hasło
+
+
+ New password
+ Neues Passwort
+ Nouveau mot de passe
+ Nueva palabra de paso
+ Nové heslo
+ Nieuw paswoord
+ Nowe hasło
+
+
+ Password verification
+ Passwort Verifikation
+ Vérification du mot de passe
+ Verificación de palabra de paso
+ Heslo ověřeno
+ Paswoord controle
+ Weryfikacja hasła
+
+
+
+ Person
+ Person
+ Personne
+ Persona
+ Osoba
+ Persoon
+ Osoba
+
+
+ Persons
+ Personen
+ Personnes
+ Personas
+ Osoby
+ Personen
+ Osoby
+
+
+ Person type
+ Personentyp
+ Type de personne
+ Tipo de persona
+ Druh osoby
+ Type: Persoon
+ Typ osoby
+
+
+ Person Types
+ Personentypen
+ Types de personne
+ Tipos de personas
+ Druh osob
+ Type: Personen
+ Typy osób
+
+
+ Name
+ Nachname
+ Nom
+ Apellidos
+ Jméno
+ Naam
+ Nazwisko
+
+
+
+ First name
+ Vorname
+ Prénom
+ Nombre
+ První jméno
+ Voornaam
+ Imię
+
+
+
+
+ Event
+ Veranstaltung
+ Évènement
+ Evento
+ Událost
+ Evenement
+ Wydarzenie
+
+
+ New Event...
+ neue Veranstaltung
+ nouvel évènement
+ nuevo evento
+ Nová událost
+ Nieuw evenement
+ Nowe wydarzenie
+
+
+
+ Event name
+ Veranstaltungsname
+ Nom de l'évènement
+ Nombre del evento
+ Název události
+ Evenement naam
+ Nazwa wydarzenia
+
+
+
+ Events
+ Veranstaltungen
+ Évènements
+ Eventos
+ Události
+ Evenementen
+ Wydarzenia
+
+
+ Event Type:
+ Veranstaltungstyp
+ Type d'évènement
+ Tipo de evento
+ Druh události
+ Type Evenement
+ Wydarzenia
+
+
+ Event
+ Veranstaltung
+ Évènement
+ Evento
+ Událost
+ Evenement
+ Wydarzenie
+
+
+ Edit own
+ eigene bearbeiten
+ modifier les siennes
+ modificar las propias
+ Změň majitele
+ bewerk eigen
+ Edytuj swoje
+
+
+ Appointments:
+ Termine:
+ Évènement :
+ Citas:
+ Sjednaný:
+ Lijst afspraken:
+ Terminy:
+
+
+ Allocations:
+ Belegungen:
+ Allocation :
+ Asignaciones :
+ Rozvržení:
+ Bezetting:
+ Przydział zasobów:
+
+
+ Reserved by
+ reserviert von
+ réservé par
+ Reservado por
+ Rezervace od
+ Geregistreerd door
+ Rezerwacja przez
+
+
+ on
+ am
+ à la
+ en el
+ na
+ aan de
+ na
+
+
+ Registered by
+ Eingetragen von
+ Enregistré par
+ Registrado por
+ Registrovaný od
+ Geregistreerd door
+ Zarejestrowany przez
+
+
+
+ Day of week
+ Wochentag
+ Jour de la semaine
+ Día de la semana
+ Den v týdnu
+ Weekdag
+ Dzień tygodnia
+
+
+ Duration
+ Zeitdauer
+ Durée
+ Duración
+ Trvání
+ Tijdsduur
+ Czas trwania
+
+
+ Interval
+ Zeitraum
+ Interval
+ Intervalo
+ Interval
+ Interval
+ Interwał
+
+
+ Same day
+ am selben Tag
+ même jour
+ mismo día
+ Stejný den
+ zelfde dag
+ Ten sam dzień
+
+
+ Next day
+ am nächsten Tag
+ jour suivant
+ día siguiente
+ Další den
+ volgende dag
+ Następny dzień
+
+
+ on day x
+ am Tag x
+ le jour x
+ el día x
+ Za den x
+ op dag x
+ dnia x
+
+
+ Day(s)
+ Tag(e)
+ Jour(s)
+ Día(s)
+ Den
+ dag(en)
+ Dzień(dni)
+
+
+ Hour(s)
+ Std.
+ Heure(s)
+ Hora(s)
+ Hodina
+ uur
+ Godzina(-y)
+
+
+ Min.
+ Min.
+ min.
+ min.
+ Min.
+ min.
+ min.
+
+
+ New appointment
+ neuer Termin
+ Nouvelle réservation
+ Nueva cita
+ Nová rezervace
+ Nieuwe afspraak
+ Nowy termin
+
+
+ Appointment
+ Termin
+ Réservation
+ Reserva
+ Rezervace
+ Reservatie
+ Termin
+
+
+ Appointment List
+ Terminliste
+ Liste des réservations
+ Lista de citas
+ Seznam rezervací
+ Lijst reservaties
+ Lista terminów
+
+
+ Appointments
+ Termine
+ Réservations
+ Citas
+ Rezervace
+ Reservaties
+ Terminy
+
+
+ Change appointment
+ Termin ändern
+ Modifier la réservation
+ Modificar la reserva
+ Změna rezervace
+ Wijzig afspraak
+ Edytuj termin
+
+
+ No repeating
+ Einzeltermin
+ Unique
+ Única
+ Bez opakování
+ Eénmalig
+ Jednorazowe
+
+
+ Repeating
+ Wiederholung
+ Répéter
+ Repetir
+ Opakování
+ Herhaling:
+ Powtarzające się:
+
+
+ Weekly
+ wöchentlich
+ Hebdomadaire
+ Semanal
+ Týdně
+ Wekelijks
+ Co tydzień
+
+
+ Daily
+ täglich
+ Quotidien
+ A diario
+ Po dnech
+ Dagelijks
+ Codziennie
+
+
+ Monthly
+ monatlich
+ mensuel
+ mensual
+ Maandelijks
+ Co miesiąc
+
+
+ Yearly
+ jährlich
+ annuel
+ anual
+ Jaarlijks
+ Co rok
+
+
+ Every {0} {1}
+ Alle {0} {1}
+ Tous/toutes les {0} {1}
+ Cada {0} {1}
+ Každý {0} {1}
+ Elke {0} {1}
+ Co {0} {1}
+
+
+ Week
+ Woche
+ Semaines
+ Semana
+ Týden
+ Week
+ Tydzień
+
+
+ cw {0,date,w}
+ KW {0,date,w}
+ S{0,date,w}
+ se {0,date,w}
+ T{0,date,w}
+ WK{0,date,w}
+ T{0,date,w}
+
+
+
+ Short week
+ kompakte Woche
+ Semaine courte
+ Semana corta
+ Celý týden
+ Week (Compact)
+ Tydzień (skrócony)
+
+
+ Hour
+ Std.
+ Heure
+ Hora
+ Uur
+ Godzina
+
+
+ Hours
+ Std.
+ Heures
+ Horas
+ Uren
+ Godziny
+
+
+
+ Minutes
+ Minute
+ Minutes
+ Horas
+ Minuten
+
+
+
+ Minute
+ Minute
+ Minute
+ Hora
+ Minuut
+
+
+ Second
+ Sekunde
+ Seconde
+ secundo
+ Seconde
+ Sekunda
+
+
+ Seconds
+ Sekunden
+ Secondes
+ secundos
+ Seconden
+ Sekundy
+
+
+ Day
+ Tag
+ Jour
+ Día
+ Den
+ Dag
+ Dzień
+
+
+ Days
+ Tage
+ Jours
+ días
+ Dny
+ Dagen
+ Dni
+
+
+ Weeks
+ Wochen
+ Semaines
+ semanas
+ Týdny
+ Weken
+ Tygodnie
+
+
+ Month
+ Monat
+ Mois
+ Mes
+ Měsíc
+ Maand
+ Miesiąc
+
+
+ Years
+ Jare
+ Année
+ ..
+ ..
+ Jaren
+ Lata
+
+
+ Year
+ Jaar
+ Année
+ ..
+ ..
+ Jaar
+ Rok
+
+
+ Months
+ Monate
+ Mois
+ Meses
+ Měsíce
+ Maanden
+ Miesiące
+
+
+ Repeats forever
+ Kein Ende
+ Indéfini
+ indefinido
+ Nemá konec
+ tot oneindig
+ Bez końca
+
+
+ from the
+ ab dem
+ à partir de
+ a partir de
+ z
+ van
+ od
+
+
+ until
+ bis zum
+ jusqu'à
+ hasta
+ Dokud
+ tot en met
+ do
+
+
+ x times
+ x Mal
+ x fois
+ x veces
+ x krát
+ x-Maal
+ x razy
+
+
+ Repeat
+ wiederhole
+ répète
+ repite
+ Opakuj
+ herhaal
+ Powtórz
+
+
+ every
+ Jeden
+ Chaque
+ Cada
+ Pokaždé
+ Elke
+ Każdy
+
+
+ .
+ .
+ .
+ .
+ .
+ -(ste/de)
+ .
+
+
+ Repeat {0} times
+ wiederhole {0} Mal
+ répète {0} fois
+ repite {0} veces
+ Opakuj {0} krát
+ {0}X
+ Powtórz {0} razy
+
+
+ from {0}
+ ab dem {0}
+ à partir du {0}
+ a partir de {0}
+ Z {0}
+ van {0}
+ od {0}
+
+
+ until {0}
+ bis zum {0}
+ jusqu`à {0}
+ hasta {0}
+ Dokud {0}
+ tot en met {0}
+ do {0}
+
+
+ {0} Exceptions:
+ {0} Exceptions:
+ {0} Exceptions :
+ {0} Excepciones :
+ {0} Vyjímka:
+ {0} Uitgezonderd:
+ {0} Wyjątki:
+
+
+ Rule:
+ Regel:
+ Règle :
+ Regla :
+ Pravidlo:
+ Regel:
+ Reguła:
+
+
+ Exceptions
+ Ausnahmen
+ Exceptions
+ Excepciones
+ Vyjímka
+ Uitgezonderd
+ Wyjątki
+
+
+ No exceptions:
+ Keine Ausnahmen:
+ Sans exception
+ Sin excepciones
+ Bez vyjímky
+ Geen uitzonderingen:
+ Bez wyjątków:
+
+
+ Exceptions:
+ Ausnahmen:
+ Exceptions :
+ Excepciones :
+ Vyjímka:
+ Uitgezonderd:
+ Wyjątki:
+
+
+ Exception days:
+ Ausgenommene Tage:
+ Jours d'exceptions
+ Días de excepciones
+ Vyjímečné dny:
+ Uitgezonderd:
+ Wyłączone dni:
+
+
+ Convert to single events
+ In Einzeltermine umwandeln
+ Convertir des événements uniques
+ Convertir a los eventos individuales
+ Prevést na jednorázové akce
+ Converteren naar éénmalige evenementen
+ Przekształć w wydarzenia jednorazowe
+
+
+ Do you want to delete the series or just the appointment on {0}?
+ Wollen Sie die ganze Serie oder nur den Termin am {0} löschen?
+ Voulez-vous effacer toute la série de réservations ou seulement celle-ci {0}?
+ ¿Desea eliminar toda la serie o sólo la reserva del {0}?
+ Chcete smazat celou sérii nebo pouze vybraný termín {0}?
+ De volledige reeks of éénmalig de afspraak op {0} verwijderen?
+ Usunąć całą serię, czy tylko wybrany termin {0}?
+
+
+ Do you want to copy the series or just the appointment on {0}?
+ Wollen Sie die ganze Serie oder nur den Termin am {0} kopieren?
+ Voulez-vous copier toute la série de réservations ou seulement celle-ci {0}?
+ ¿Desea copiar toda la serie o sólo la reserva del {0}?
+ Chcete kopírovat celou sérii nebo pouze jeden termín {0}?
+ Wil je de reeks of enkel de boeking op {0} kopieren?
+ Skopiować całą serię, czy tylko wybrany termin {0}?
+
+
+ Do you want to move the series or just the appointment on {0}?
+ Wollen Sie die ganze Serie oder nur den Termin am {0} verschieben?
+ Voulez-vous déplacer toute la série de réservations ou seulement celle-ci {0}?
+ ¿Desea desplazar toda la seria o sólo la reserva del {0}?
+ Chcete přesunout řadu nebo pouze termín {0}?
+ De volledige reeks of éénmalig de afspraak op {0} verplaatsen?
+ Przenieść całą serię, czy tylko wybrany termin {0}?
+
+
+ Series
+ Serie
+ Série
+ Serie
+ Série
+ reeks
+ Serie
+
+
+ Single appointment
+ einzelner Termin
+ réservation unique
+ Reserva única
+ Jeden termín
+ éénmalig
+ Jeden termin
+
+
+ Resource
+ Ressource
+ Ressource
+ Recurso
+ Prostředek
+ Middel
+ Zasób
+
+
+ Resources
+ Ressourcen
+ Ressources
+ Recursos
+ Prostředky
+ Middelen
+ Zasoby
+
+
+ Resource type
+ Ressourcentyp
+ Type de ressources
+ Tipo de recurso
+ Typ prostředku
+ Type: Middel
+ Rodzaj zasobu
+
+
+ Resource types
+ Ressourcentypen
+ Types de ressources
+ Tipos de recursos
+ Typy prostředků
+ Middel type
+ Rodzaje zasobów
+
+
+ Resource selection
+ Ressourcenauswahl
+ Sélection des ressources
+ Selección de recursos
+ Označené prostředky
+ Keuze middel
+ Zaznaczenie zasobu
+
+
+
+ Change allocation
+ Belegung ändern
+ Modifier l"allocation
+ Modificar la asignación
+ Vyměněný rozvržení
+ Wijzig toewijzing
+ Zmień przydział
+
+
+ Resources and persons
+ Ressourcen und Personen
+ Ressources et Personnes
+ Recursos y personas
+ Prostředky a osoby
+ Middelen&Personen
+ Zasoby i osoby
+
+
+ Hold back conflicts
+ Unterdrücke Konflikte
+ Ne pas tenir compte des conflits
+ No tener en cuenta los conflictos
+ Návrat před konflikt
+ Conflicten onderdrukken
+ Ignoruj konflikty
+
+
+ Selectable on
+ auswählbar an
+ Possible le
+ Seleccionable en
+ Označitelný v
+ Voor:
+ Dostępne w
+
+
+ Selectable
+ auswählbar
+ Sélectionnable le
+ Seleccionable
+ Označitelný
+ Beschikbaarheid
+ Dostępne
+
+
+ Selected on
+ ausgewählt an
+ Sélectionné le
+ Seleccionado en
+ Označený v
+ Door:
+ Wybrane na
+
+
+ Every appointment
+ allen Terminen
+ Toutes les réservations
+ Todas las citas
+ Všechny ujednání
+ Alle afspraken in lijst
+ Każdy termin
+
+
+ No appointment
+ keinem Termin
+ Pas de réservation
+ Ninguna cita
+ Nesjednáno
+ Geen afspraak
+ Brak rezerwacji
+
+
+ Allocatable in the given timeframe
+ Belegbar in folgendem Zeitraum
+ Peut être alloué pendant la période
+ Puede ser asignado en el periodo
+ Výběr daný do časového rámce
+ Beschikbaarheid
+ Dostępne w okresie
+
+
+ Access
+ Zugriff
+ Accès
+ Acceso
+ Přístupný
+ Toegang
+ Dostępne
+
+
+ Denied
+ gesperrt
+ Interdit
+ Denegado
+ Zamítnuto
+ Geen toegang
+ Zastrzeżone
+
+
+ can read
+ darf lesen
+ peut lire
+ Puede leer
+ může číst
+ Lezen
+ może odczytać
+
+
+ can allocate
+ darf belegen
+ peut allouer
+ Puede asignar
+ může alokovat
+ Toewijzen
+ może przydzielać
+
+
+ can allocate & create conflicts
+ darf belegen & Konflikte erzeugen
+ Peut allouer & Créer des conflits
+ Puede asignar y crear conflictos
+ může alokovat & vytvářet konflikty
+ Toewijzen met conflicten
+ może przydzielać i tworzyć konflikty
+
+
+ administrator rights
+ Administrationsrechte
+ Droits d'administrateur
+ Derechos de administrador
+ Administrátorské práva
+ Beheer
+ Uprawnienia administratora
+
+
+
+ Start of {0}
+ Start {0}
+ Début {0}
+ Inicio de {0}
+ Začátek {0}
+ Start van {0}
+ Początek {0}
+
+
+ End of {0}
+ Ende {0}
+ Fin {0}
+ Fin de {0}
+ Konec {0}
+ Einde van {0}
+ Koniec {0}
+
+
+ {0}.week {1}
+ {0}.Wo {1}
+ {0}.Sem. {1}
+ {0}.Sem. {1}
+ {0}.týden {1}
+ Week {0} van {1}
+ {0} tyg. {1}
+
+
+ Select period
+ Zeitraum auswählen
+ Sélectionner la période
+ Seleccionar el periodo
+ Označ periodu
+ Kies periode
+ Wybierz okres
+
+
+ Period
+ Zeitraum
+ Période
+ Periodo
+ Perioda
+ Periode
+ Okres
+
+
+ Period
+ Zeitraum
+ Période
+ Periodo
+ Perioda
+ Periode
+ Okres
+
+
+ in period {0}
+ im Zeitraum {0}
+ dans la période {0}
+ dentro del periodo {0}
+ V periodě {0}
+ in periode {0}
+ w okresie {0}
+
+
+ Periods
+ Zeiträume
+ Périodes
+ Periodos
+ Periody
+ Periode
+ Okresy
+
+
+
+ Conflicts
+ Konflikte
+ Conflits
+ Conflictos
+ Konflikt
+ Conflict
+ Konflikty
+
+
+ Conflicts ({0,number,integer})
+ Konflikte ({0,number,integer})
+ Conflits ({0,number,integer})
+ Conflictos ({0,number,integer})
+ Konflikt ({0,number,integer})
+ Conflict ({0,number,integer})
+ Konflikty ({0,number,integer})
+
+
+ Which event?
+ Welche Veranstaltung?
+ Quel évènement ?
+ ¿Qué evento?
+ Čí je to událost?
+ Welk evenement?
+ Które wydarzenie?
+
+
+ Other event?
+ Andere Veranstaltung?
+ Autre évènement ?
+ ¿Otro evento?
+ Další událost?
+ Ander evenement?
+ Inne wydarzenie?
+
+
+ When?
+ Wann?
+ Quand ?
+ ¿Cuándo?
+ Když
+ Wanneer?
+ Kiedy?
+
+
+ What/who?
+ Was/Wer?
+ Quoi/Qui ?
+ ¿Qué/Quién?
+ Uživatel?
+ Wat/Wie?
+ Kto/co?
+
+
+ User?
+ Mit Wem?
+ Avec qui ?
+ ¿Con quién?
+ Uživatel?
+ Gebruiker?
+ Użytkownik?
+
+
+ conflicting allocation
+ Konflikt-Termin
+ Conflit d'allocation
+ Conflicto de asignación
+ Konfiktní rozvrh
+ Toewijzings conflict
+ Konflikt przydziału
+
+
+
+
+ Confirm {0}
+ {0} bestätigen
+ Confirmer {0}
+ Confirmar {0}
+ Potvrdit
+ Bevestig {0}
+ Potwierdź {0}
+
+
+ Save this Information?
+ Diese Informationen speichern?
+ Sauvegarder cette information ?
+ ¿Guardar esta información?
+ Uložit tyto informace?
+ Bevestig deze informatie?
+ Zapisać te informacje?
+
+
+
+ The GNU-license
+ Die GNU-Lizenz
+ La licence GNU
+ La licencia GNU
+ GNU Licence
+ GNU Licentie
+ Licencja GNU
+
+
+
+ New category
+ Neue Kategorie
+ Nouvelle catégorie
+ Nueva categoría
+ Nová kategorie
+ Nieuw klassement
+ Nowa kategoria
+
+
+ New sub-category
+ Neue Unter-Kategorie
+ Nouvelle sous-catégorie
+ Nueva sub-categoría
+ Nová podkategorie
+ Nieuw onderklassement
+ Nowa podkategoria
+
+
+
+ Delete?
+ Löschen?
+ Effacer
+ ¿Borrar?
+ Smazat?
+ Verwijderen?
+ Usunąć?
+
+
+ You will delete the following objects:
+ Sie löschen die folgenden Objekte:
+ Vous allez effacer les objets suivants :
+ Budeš mazat následující objekt
+ Volgende onderdelen worden verwijderd:
+ Następujące elementy zostaną usunięte:
+
+
+ Yes, delete it!
+ Löschen!!
+ Oui, effacer
+ Sí, borrar
+ Ano, smaž to!!
+ OK
+ Tak, usuń!
+
+
+ No, don't delete it!
+ NICHT ausführen!!
+ Annuler la commande
+ ¡No, no lo hagas!
+ Ne, nedělej to!!
+ Annuleren
+ Anulować
+
+
+
+ Quit Rapla?
+ Rapla beenden?
+ Quitter Rapla ?
+ ¿Abandonar Rapla?
+ Ukončit Rapla?
+ Rapla beëindigen
+ Zakończyć Rapla?
+
+
+ Do you really want to quit Rapla?
+ Wollen Sie Rapla beenden?
+ Souhaitez vous réellement quitter Rapla ?
+ ¿Desea realmente abandonar Rapla?
+ Opravdu chcete ukončit plánování ?
+ Planning beëindigen?
+ Czy na pewno chcesz zakończyć Rapla?
+
+
+ Quit Rapla
+ Rapla beenden?
+ Quitter Rapla ?
+ ¿Abandonar Rapla?
+ Ukončit systém Rapla
+ Planning beëindigen
+ Wyjdź
+
+
+ Continue Rapla >>
+ Weiter planen >>
+ Continuer Rapla >>
+ Continuar Rapla >>
+ Pokračuj v plánování
+ Terug
+ Wróć do Rapla
+
+
+
+ Changes not saved!
+ Änderungen noch nicht gespeichert!
+ Modifications non sauvegardées !
+ ¡Modificaciones no guardadas!
+ Změny neuloženy!
+ Wijzigingen
+ Nie zapisano zmian!
+
+
+ You have not saved your changes.
+ Sie haben die vorgenommenen Änderungen noch
+ nicht gespeichert.
+ Vous n'avez pas sauvegardé les modifications!
+ ¡No ha guardado las modificaciones!
+ Neuložil(a) jste změny!
+ De wijzigingen werden niet geregisteerd!
+ Nie zapisano zmian.
+
+
+ Discard changes
+ Änderungen verwerfen
+ Annuler les modifications
+ Anular las modificaciones
+ Ignoruj změny
+ Wijzigingen negeren
+ Ignoruj zmiany
+
+
+
+
+ Rapla version @doc.version@
+
+
+ Rapla Version @doc.version@
+
+
+ Rapla Version @doc.version@
+
+
+ Rapla Version @doc.version@
+
+
+ Rapla versie @doc.version@
+
+
+
+
+
+ Rapla version @doc.version@
+
+ (C) Copyright @doc.year@ @doc.copyright@
+ Rapla homepage: @doc.homepage@
+
+ Post your feature requests, questions or bug reports
+ to our developers mailing list:
+ @doc.developer-list@
+
+ Build-Time: @doc.buildtime@
+ Signature: {0}
+ Java version {1}
+
+
+ Rapla Version @doc.version@
+
+ (C) Copyright @doc.year@ @doc.copyright@
+ Rapla-Webseite: @doc.homepage@
+
+ Schicken Sie Ihre Anfordungen, Fragen oder Fehlerreports
+ an die Entwickler- Mailingliste:
+ @doc.developer-list@
+
+ Version vom: @doc.buildtime@
+ Signatur: {0}
+ Java Version {1}
+
+
+ Rapla Version @doc.version@
+
+ (C) Copyright @doc.year@ @doc.copyright@
+ Rapla-Webseite: @doc.homepage@
+
+ Envoyer vos propositions d"évolutions, questions, ou erreurs trouvées
+ à la Mailingliste développeurs :
+ @doc.developer-list@
+
+ Version : @doc.buildtime@
+ Signature: {0}
+ Version Java {1}
+
+
+ Rapla Version @doc.version@
+
+ (C) Copyright @doc.year@ @doc.copyright@
+ Página de Rapla: @doc.homepage@
+
+ Envía tus propuestas de cambios, preguntas, o errores encontrados
+ a la lista de correo de nuestros desarrolladores:
+ @doc.developer-list@
+
+ Version : @doc.buildtime@
+ Firma: {0}
+ Version Java {1}
+
+
+ (C) Copyright @doc.year@ @doc.copyright@
+ Rapla versie @doc.version@
+ Gebouwd op: @doc.buildtime@
+ Ondertekend: {0}
+ Java versie: {1}
+ Rapla homepage: @doc.homepage@
+ Support: @doc.developer-list-link@
+
+
+ Rapla - wersja @doc.version@
+
+ (C) Copyright @doc.year@ @doc.copyright@
+ strona Rapla: @doc.homepage@
+
+ Pytania, sugestie, feedback:
+ @doc.developer-list@
+
+ Build-Time: @doc.buildtime@
+ Podpis: {0}
+ Java - wersja {1}
+
+
+
+
+
+
+ More information:
+
+ Java-Webstart is included in all Java versions since 1.4.0.
+ To run Rapla, you need Java 1.4 or above, which you can download from
+ java.sun.com.
+
+
+ Check out rapla.sourceforge.net for more information.
+
+
+
+ Mehr Informationen:
+
+ Java Webstart ist in allen Java Version seit 1.4.0 enthalten.
+ Um Rapla zu starten brauchen Sie Java 1.4 oder eine neuere Version. Diese können Sie herunterladen von
+ java.sun.com.
+
+
+ Besuchen Sie auch rapla.sourceforge.net für mehr Informationen über Rapla.
+
+
+
+ Plus d'informations:
+
+ Java-Webstart est inclus dans toutes les versions de Java depuis la 1.4.0.
+ Pour lancer Rapla, vous avez besoin de Java 1.4 ou supérieur que vous pouvez télécharger depuis
+ java.sun.com.
+
+
+ Consultez rapla.sourceforge.net pour de plus amples informations.
+
+
+
+ Más información:
+
+ Java-Webstart se incluye en todas las versiones de Java desde la 1.4.0.
+ Para ejecutar Rapla, se necesita Java 1.4 o superior. Se lo puede descargar de
+ java.sun.com.
+
+
+ Para más información, visite rapla.sourceforge.net.
+
+
+
+ Meer informatie:
+ rapla.sourceforge.net
+
+
+
+
+
+ Start Rapla (with java webstart)
+
+
+ Rapla starten (mit Java Webstart)
+
+
+ Démarrer Rapla (avec java webstart)
+
+
+ iniciar Rapla (con java webstart)
+
+
+ Rapla Smart Planning
+
+
+
+
+
+ Start Rapla (with Java Plugin)
+
+
+ Rapla starten (mit Java Plugin)
+
+
+ Démarrer Rapla (avec le Plugin Java)
+
+
+ iniciar Rapla (con Java-Plugin)
+
+
+ Start Rapla planning (Applet)
+
+
+
+
+
+ Server Status
+
+
+ Status des Servers
+
+
+ Etat du Serveur
+
+
+
+
+
+ Rapla Login
+ Rapla Login
+ Login Rapla
+ Acceso a Rapla
+ Přihlášení k rezervačnímu systému
+ Rapla Aanmelden
+
+
+ Choose your language:
+ Wählen Sie Ihre Sprache:
+ Choisissez votre langue :
+ Escoja su idioma :
+ Zvolte váš jazyk:
+ Taalkeuze:
+ Wybierz język:
+
+
+
+ Rapla version @doc.version@ (C) Copyright @doc.year@ @doc.copyright@
+
+ Rapla comes with NO WARRANTY!!
+ This is free software, you are welcome to redistribute it under certain
+ conditions.
+
+
+ Rapla Version @doc.version@ (C) Copyright @doc.year@ @doc.copyright@
+ Für Rapla besteht KEINE GARANTIE!!
+ Rapla ist freie Software, die Sie unter bestimmten
+ Bedingungen weitergeben dürfen.
+
+
+ Rapla Version @doc.version@ (C) Copyright @doc.year@ @doc.copyright@
+ Rapla est SANS GARANTIE!!
+ Rapla est un logiciel libre, que vous pouvez utiliser et distribuer suivant ces conditions.
+
+
+ Rapla Version @doc.version@ (C) Copyright @doc.year@ @doc.copyright@
+ ¡¡Rapla viene SIN GARANTÍA!!
+ Rapla es software libre, así que puede usarlo y distribuirlo bajo las siguientes condiciones.
+
+
+ Rapla Verze @doc.version@ (C) Copyright @doc.year@ @doc.copyright@
+ Na systém Rapla není poskytována ŽÁDNÁ ZÁRUKA!!
+ Rapla Toto je volný software a je možné jej rozšiřovat pouze za určitých
+ podmínek.
+
+
+ Rapla versie @doc.version@ : @doc.buildtime@
+ (C) Copyright @doc.year@ @doc.copyright@
+ Rapla wordt geleverd ZONDER GARANTIE.
+ Deze software kan enkel onder bepaalde voorwaarden vrij worden verspreid.
+
+
+
+
+ From all users
+ Von allen Benutzern
+ De tous les utilisateurs
+ De todos los usuarios
+ Od každého uživatele
+ voor alle gebruikers
+ Od wszystkich
+
+
+ Own events
+ Eigene Veranstaltungen
+ Vos propres évènements
+ Sus propios eventos
+ Moje události
+ Moje wydarzenia
+
+
+ Filter name
+ Filtername
+ Nom du filtre
+ Nombre del filtro
+ Název filtru
+ Filter naam
+ Nazwa filtra
+
+
+ is smaller than
+ ist kleiner als
+ est plus petit que
+ es menor que
+ Je menší, než
+ kleiner dan
+ mniejsze niż
+
+
+ is greater than
+ ist größer als
+ est supérieur à
+ es mayor que
+ Je větší, než
+ groter dan
+ większe niż
+
+
+ smaller than or equal
+ ist kleiner gleich
+ est plus petit ou égal que
+ es menor o igual que
+ Je menší nebo rovno
+ kleiner dan of gelijk
+ mniejsze niż lub równa
+
+
+
+ greater than or equal
+ ist größer gleich
+ est supérieur ou égal à
+ es mayor o igual que
+ je větší nebo rovno
+ groter dan of gelijk
+ większe niż lub równa
+
+
+
+ is earlier than
+ ist früher als
+ est avant le
+ es anterior a las
+ Je dříve, než
+ vroeger dan
+ przed
+
+
+ is later than
+ ist später als
+ est après le
+ es posterior a las
+ Je později, než
+ later dan
+ po
+
+
+ equals
+ ist gleich
+ est égal à
+ es igual a
+ Je stejný, jako
+ gelijk aan
+ dokładnie
+
+
+ is not equal to
+ ist ungleich
+ est inégaux
+ es desigual
+ není rovno
+ ongelijk
+ nierówny
+
+
+ contains
+ enthält
+ contient
+ contiene
+ Obsahuje
+ bevat
+ zawiera
+
+
+ Restrict view of {0}
+ Anzeige von {0} einschränken
+ Limiter l''affichage de {0}
+ Limitar la vista de {0}
+ Pohled omezený {0}
+ beperk beeld van {0}
+ Ogranicz widok {0}
+
+
+ Resources and persons
+ Ressourcen und Personen
+ Ressources et personnes
+ Recursos y personas
+ Prostředky a osoby
+ Personen & Materialen
+ Zasoby i osoby
+
+
+ Only Own Reservations
+ Nur eigene Reservierungen
+ Seulement mes réservations
+ Sólo mis reservas
+ Moje rezervace
+ Enkel eigen reservaties
+ Tylko moje rezerwacje
+
+
+ Events from all users
+ Veranstaltungen von allen Benutzern
+ Evènement de tous les utilisateurs
+ Eventos de todos los usuarios
+ Rezervace všech uživatelů
+ Evenementen van alle gebruikers
+ Rezerwacje wszystkich
+
+
+ Complete time
+ gesamte Zeit
+ Période totale
+ Periodo total
+ Celkový čas
+ volledige duur
+ Całkowity czas
+
+
+ All filtered objects.
+ Alle gefilterten Objekte.
+ Tous les objets filtrés.
+ Todos los objetos filtrados.
+ Všechny filtrované objekty.
+ alle gefilterde objecten.
+ Wszystkie filtrowane obiekty.
+
+
+ New rule for
+ neue Regel für
+ Nouvelle règle pour
+ Nueva regla para
+ Nové pravidlo pro
+ Nieuwe regel
+ Nowa reguła dla
+
+
+
+
+ Allocation of {0}
+ Belegungen von {0}
+ Allocation de {0}
+ Asignación de {0}
+ Umístění {0}
+ Toewijzing van {0}
+ Przyporządkowanie {0}
+
+
+
+
+ Print Preview
+ Druck Voransicht
+ Imprimer la prévisualisation
+ Imprimir la previsualización
+ Náhled před tiskem
+ Afdrukvoorbeeld
+ Podgląd wydruku
+
+
+ Postscript
+ Postscript
+ Postscript
+ Postscript
+ Postscript
+ Postscript
+ Postscript
+
+
+ Choose your save method!
+ Wählen Sie die Speichermethode!
+ Choisissez la méthode de sauvegarde!
+ Escojer el método de almacenamiento
+ Vyberte způsob ukládání!
+ Kies opslag methode!
+ Wybierz metodę zapisu!
+
+
+ Printer Preferences
+ Drucker-Einstellungen
+ Préférence d'Impression
+ Preferencias de impresión
+ Vlastnosti tiskárny
+ Printer voorkeur
+ Ustawienia drukarki
+
+
+ Title
+ Überschrift
+ Titre
+ Título
+ Titul
+ Titel
+ Tytuł
+
+
+
+ Rapla, smart resource and event planning
+ Rapla, der clevere Ressourcen- und Veranstaltungsplaner
+ Rapla, le planificateur intelligent
+ Rapla, el planificador inteligente
+ Rapla, chytré plánování prostředků a událostí
+ Rapla, Smart Planning
+ Rapla, inteligentne planowanie
+
+
+ Rapla
+ Rapla
+ Rapla
+ Rapla
+ Rapla
+ Rapla
+
+
+ Hello {0}, enjoy planning!
+ Hallo {0}, viel Spaß beim Planen!
+ Bonjour {0}, amusez vous en planifiant !
+ Hola {0}, ¡disfruta planificando!
+ Dobrý den, přejeme příjemné plánování! Přihlášen uživatel: {0}
+ Online: {0}
+ Witaj {0}.
+
+
+
+ Database
+ Datenbasis
+ Base de données
+ Base de datos
+ Databáze
+ Databank
+ Baza danych
+
+
+ Display exceptions in calendar
+ Zeige Ausnahmen im Kalender
+ Afficher les exceptions dans le calendrier
+ Mostrar las excepciones en el calendario
+ Zobrazit vyjímky v kalendáři
+ Uitzonderingen
+ Pokaż wyjątki
+
+
+ Display conflicts
+ Zeige Konflikte
+ Afficher conflits
+ Mostrar las conflictos
+ Zobrazit vyjímky
+ Conflicten
+ Pokaż konflikty
+
+
+ Display mouse-over tips
+ Zeige mouse-over
+ Afficher mouse-over tips dans
+ Mostrar las tips mouse-over
+ Zobrazit vyjímky v mouse-over
+ Tips
+ Pokazuj podpowiedzi
+
+
+ Exclude days
+ Tage ausschließen
+ exclure les jours
+ Uitgezonderd dagen:
+ Wyłącz dni:
+
+
+ Rows per hour
+ Zeilen pro Stunden
+ Lignes par heure
+ Líneas por hora
+ Počet řádků na hodinu
+ Tijdsdelen per uur:
+ Podziałka godzin
+
+
+ Restart Rapla client
+ Rapla neu starten
+ Redémarrer Rapla
+ Reiniciar el cliente Rapla
+ Restart klienta
+ Herstart gebruiker
+ Restart Rapla
+
+
+ Restart Server
+ Server neu starten
+ Redémarrer Serveur
+ Reiniciar el servidor
+ Restart serveru
+ Herstart Rapla server
+ Restart serwera
+
+
+ Load data
+ Daten neu laden
+ Recharger les données
+ Recargar los datos
+ Znovu načíst data
+ herladen gegevens
+ Odśwież dane
+
+
+
+
+ New Event: {0}
+ Neue Veranstaltung: {0}
+ Nouvel évènement : {0}
+ Nuevo evento : {0}
+ Nová událost: {0}
+ Nieuw evenement {0}
+ Nowe wydarzenie: {0}
+
+
+ Edit event: {0}
+ Veranstaltung bearbeiten: {0}
+ Modifier l"évènement: {0}
+ Modificar el evento : {0}
+ Upravit událost: {0}
+ Bewerk evenement: {0}
+ Edytuj wydarzenie: {0}
+
+
+ Edit {0}
+ {0} bearbeiten
+ Modifier {0}
+ Modificar {0}
+ Upravit {0}
+ Bewerk: {0}
+ Edytuj {0}
+
+
+ Delete {0}
+ {0} löschen
+ Effacer {0}
+ Eliminar {0}
+ Odstranit {0}
+ Verwijder: {0}
+ Usuń {0}
+
+
+ Translations for "{0}":
+ Übersetzungen von "{0}":
+ Traduction de "{0}":
+ Traducción de "{0}":
+ Překlady pro "{0}":
+ Vertaling voor "{0}":
+ Tłumaczenia na "(0)":
+
+
+ Change {0}
+ {0} ändern
+ Modifier {0}
+ Modificar {0}
+ Změnit {0}
+ Wijzig {0}
+ Zmień {0}
+
+
+ {0} !
+ {0} !
+ {0} !
+ {0} !
+ {0} !
+ {0} !
+ {0} !
+
+
+ {0}: {1}
+ {0}: {1}
+ {0} : {1}
+ {0} : {1}
+ {0}: {1}
+ {0}: {1}
+ {0}: {1}
+
+
+ all-day
+ ganztägig
+ 24h
+ 24h
+ 24h
+ 24u
+ 24h
+
+
+ You need to restart Rapla/Rapla-server when you change the options!
+ ...
+ ...
+ ...
+ ...
+ Om de wijzigingen te activeren moet je Rapla herstarten!
+ Zmiany zostaną wprowadzone po restarcie Rapla
+
+
+
+ Calendar name:
+ Kalender Namen:
+ Nom du calendrier:
+ Calendario nombre:
+ Název kalendáře:
+ Kalender naam:
+ Nazwa kalendarza:
+
+
+ Reset
+ Reset
+ Réinitialisation
+ Restablecer
+ Reset
+ Terugzetten
+ Resetuj
+
+
+ Default Selection
+ Standardauswahl
+ Sélection par défaut
+ Selección por defecto
+ Výběr výchozí
+ Standaard Selectie
+
+
+ Only 1 event type is allowed. Adjust the filter!
+ Nur 1 Veranstaltungstyp ist erlaubt. Passen Sie den Filter!
+ Seulement 1 type d'événement est autorisé. Réglez le filtre!
+ Sólo un tipo de evento se permite. Ajuste el filtro!
+ Pouze 1 typ události je povoleno. Nastavte. filtr!
+ Enkel 1 type evenement is toegestaan. Pas de filter aan!
+ Tylko 1 zdarzenie typu jest dozwolone. Ustaw filtr!
+
+
+ Include date: {0}
+ mit Datum: {0}
+ y compris la date: {0}
+ incluyendo la fecha: {0}
+ včetně data: {0}
+ met vaste datum = {0}
+ w tym dniu: {0}
+
+
+ Occupation
+ Besetzung
+ l''Occupation
+ Ocupación
+ Obsazenost
+ Bezetting
+ Zawód
+
+
\ No newline at end of file
diff --git a/Rapla/src/org/rapla/RaplaStartupEnvironment.java b/Rapla/src/org/rapla/RaplaStartupEnvironment.java
new file mode 100644
index 0000000..340ea9a
--- /dev/null
+++ b/Rapla/src/org/rapla/RaplaStartupEnvironment.java
@@ -0,0 +1,159 @@
+/*--------------------------------------------------------------------------*
+ | Copyright (C) 2006 Christopher Kohlhaas |
+ | |
+ | This program is free software; you can redistribute it and/or modify |
+ | it under the terms of the GNU General Public License as published by the |
+ | Free Software Foundation. A copy of the license has been included with |
+ | these distribution in the COPYING file, if not go to www.fsf.org |
+ | |
+ | As a special exception, you are granted the permissions to link this |
+ | program with every library, which license fulfills the Open Source |
+ | Definition as published by the Open Source Initiative (OSI). |
+ *--------------------------------------------------------------------------*/
+
+package org.rapla;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.logger.ConsoleLogger;
+import org.apache.avalon.framework.logger.Logger;
+import org.rapla.components.util.IOUtil;
+import org.rapla.components.util.JNLPUtil;
+import org.rapla.framework.RaplaException;
+import org.rapla.framework.StartupEnvironment;
+import org.rapla.framework.internal.ConfigTools;
+
+final public class RaplaStartupEnvironment implements StartupEnvironment
+{
+ private int startupMode = EMBEDDED;
+ //private LoadingProgress progressbar;
+ private Logger bootstrapLogger = new ConsoleLogger( ConsoleLogger.LEVEL_WARN );
+ private URL configURL;
+ private URL loggerConfigURL;
+ private URL contextURL;
+ private URL downloadURL;
+
+ public Configuration getStartupConfiguration() throws RaplaException
+ {
+ return ConfigTools.createConfig( getConfigURL().toExternalForm() );
+ }
+
+ public URL getConfigURL() throws RaplaException
+ {
+ if ( configURL != null )
+ {
+ return configURL;
+ }
+ else
+ {
+ return ConfigTools.configFileToURL( null, "rapla.xconf" );
+ }
+ }
+
+ public URL getLoggerConfigURL() throws RaplaException
+ {
+ if ( loggerConfigURL != null )
+ {
+ return loggerConfigURL;
+ }
+ else
+ {
+ try
+ {
+ URL loggerConfig = new URL( getConfigURL(), "raplaclient.xlog" );
+ return loggerConfig;
+ }
+ catch ( MalformedURLException ex )
+ {
+ return null;
+ }
+ }
+ }
+
+ public Configuration getLoggerConfig() throws RaplaException
+ {
+ return ConfigTools.createConfig( getLoggerConfigURL().toExternalForm() );
+ }
+
+ public Logger getBootstrapLogger()
+ {
+ return bootstrapLogger;
+ }
+
+ public void setStartupMode( int startupMode )
+ {
+ this.startupMode = startupMode;
+ }
+
+ /* (non-Javadoc)
+ * @see org.rapla.framework.IStartupEnvironment#getStartupMode()
+ */
+ public int getStartupMode()
+ {
+ return startupMode;
+ }
+
+ public void setBootstrapLogger( Logger logger )
+ {
+ bootstrapLogger = logger;
+ }
+
+ public void setLogConfigURL( URL logConfigURL )
+ {
+ this.loggerConfigURL = logConfigURL;
+ }
+
+ public void setConfigURL( URL configURL )
+ {
+ this.configURL = configURL;
+ }
+
+ public URL getContextRootURL() throws RaplaException
+ {
+ if ( contextURL != null )
+ return contextURL;
+ return IOUtil.getBase( getConfigURL() );
+ }
+
+ public URL getDownloadURL() throws RaplaException
+ {
+ if ( downloadURL != null )
+ {
+ return downloadURL;
+ }
+ if ( startupMode == APPLET )
+ {
+ return IOUtil.getBase( getConfigURL() );
+ }
+ if ( startupMode == WEBSTART )
+ {
+ try
+ {
+ return JNLPUtil.getCodeBase();
+ }
+ catch ( Exception e )
+ {
+ throw new RaplaException( e );
+ }
+ }
+ else
+ {
+ try
+ {
+ return new URL( "http://localhost:8051" );
+ }
+ catch ( MalformedURLException e )
+ {
+ throw new RaplaException( "Invalid URL" );
+ }
+ }
+ }
+
+ public void setDownloadURL( URL downloadURL )
+ {
+ this.downloadURL = downloadURL;
+ }
+
+}
diff --git a/Rapla/src/org/rapla/bootstrap/RaplaLoader.java b/Rapla/src/org/rapla/bootstrap/RaplaLoader.java
new file mode 100644
index 0000000..d07c77e
--- /dev/null
+++ b/Rapla/src/org/rapla/bootstrap/RaplaLoader.java
@@ -0,0 +1,124 @@
+package org.rapla.bootstrap;
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.Method;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.ArrayList;
+import java.util.StringTokenizer;
+
+/**
+ Puts all jar-files from the libdirs into the classpath and start the mainClass.
+ Usage:
+
+ Syntax: baseDir libdir1,libdir2,... mainClass arg1 arg2 ...
+
+ Will put all jar-files from the libdirs into the classpath and start the mainClass
+
+ baseDir: replace with the path, from wich you want the lib-dirs to resolve.
+ libdir[1-n]: Lib-Directories relativ to the base jars.");
+ mainClass: The Java-Class you want to start after loading the jars.
+ arg[1-n]:
+
+ Example: ./lib common,client org.rapla.Main rapla
+
+ loads the jars in lib/common and lib/client and
+ starts org.rapla.Main with the argument rapla
+
+ */
+public class RaplaLoader {
+ /** returns all *.jar files in the directories passed in dirList relative to the baseDir */
+ public static File[] getJarFiles(String baseDir,String dirList) throws IOException {
+ ArrayList completeList = new ArrayList();
+ StringTokenizer tokenizer = new StringTokenizer(dirList,",");
+ while (tokenizer.hasMoreTokens())
+ {
+ File jarDir = new File(baseDir,tokenizer.nextToken());
+ if (jarDir.exists() && jarDir.isDirectory())
+ {
+ File[] jarFiles = jarDir.listFiles();
+ for (int i = 0; i < jarFiles.length; i++) {
+ if (
+ jarFiles[i].getAbsolutePath().endsWith(".jar")
+ )
+ {
+ completeList.add(jarFiles[i].getCanonicalFile());
+ }
+ }
+ completeList.add( jarDir.getCanonicalFile() );
+ }
+
+ }
+ return (File[]) completeList.toArray(new File[] {});
+ }
+
+
+ private static void printUsage() {
+ System.out.println("Syntax: baseDir libdir1,libdir2,... mainClass arg1 arg2 ...");
+ System.out.println();
+ System.out.println("Will put all jar-files from the libdirs into the classpath and start the mainClass");
+ System.out.println();
+ System.out.println(" baseDir: replace with the path, from wich you want the lib-dirs to resolve.");
+ System.out.println(" libdir[1-n]: Lib-Directories relativ to the base jars.");
+ System.out.println(" mainClass: The Java-Class you want to start after loading the jars.");
+ System.out.println(" arg[1-n]: ");
+ System.out.println();
+ System.out.println(" Example: ./lib common,client org.rapla.Main rapla ");
+ System.out.println("loads the jars in lib/common and lib/client and ");
+ System.out.println(" starts org.rapla.Main with the argument rapla");
+ }
+
+ public static void main(String[] args) {
+ String baseDir;
+ String dirList;
+ String classname;
+ String[] applicationArgs;
+
+ if (args.length <3) {
+ printUsage();
+ System.exit(1);
+ }
+ baseDir=args[0];
+ dirList=args[1];
+ classname=args[2];
+
+ applicationArgs = new String[args.length-3];
+ for (int i=0;i
+
+The client package is responsible for initialize the gui
+and the client-plugins and providing the services for the
+client application.
+
+