EPICS Jackie Channel Access library for Java

Table of Content

About EPICS Jackie

EPICS Jackie is a pure Java implementation of the Channel Access protocol used by EPICS. It is fully interoperable with other implementations of the Channel Access protocol and runs Java 6 and newer.


EPICS Jackie is fully integrated with DIIRT. The DIIRT integration is maintained as a separate project that uses an independent versioning scheme.


An extensive manual, explaining the concepts behind EPICS Jackie and including a guide on how to use it in an application, is available online and as part of the binary distribution. There also is a complete API reference that is also bundled with the binary distribution.


This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0. By downloading the software you agree to be bound the the terms of this license. In particular, you have to agree to sections five (“NO WARRANTY”) and six (“DISCLAIMER OF LIABILITY”) before downloading the software.

Some files in the binary distribution have different copyrights and licenses. Refer to the information provided in the package for details about those copyrights and licenses.

When using Apache Maven (or a build tool using the same mechanism for dependency management), the easiest way of using EPICS Jackie is by adding the dependency to the project configuration.

The EPICS Jackie client can be added by using the following dependency definition:


Alternatively, you can download the binary and source distribution here. The binary distribution also contains a copy of the reference manual and of the API reference documentation.

Release 2.0.0 (November 27th, 2017)

This is a major release bringing a number of improvements compared to older releases and a few minor new features. Some of these improvements could not be implemented in a fully backwards-compatible way, so adjustments might be necessary when upgrading from version 1.x. However, care has been taken to make the upgrade experience as smooth as possible, so that in many cases, no changes at all are going to be needed. Please refer to the “What's new” chapter of the manual for details on the changes introduces in this release and how they might affect existing code.
Those improvements that could be implemented without breaking compatibility, have been backported to version 1.x and are part of the 1.0.4 release.

Release 1.0.4 (November 27th, 2017)

This is a bugfix release that brings a few minor improvements that have been backported from version 2.0.0.
The most notable improvement is the introduction of a new locking scheme for listeners. This new locking scheme reduces the risk of a deadlock when a lock is acquired from within a listener. With these improvements, the guarantees regarding dead locks are the same as when specify ListenerLockPolicy.BLOCK when using the 2.0.0 release.
The other improvements are of a cosmetic nature, like improved Javadoc comments, improved exception strings, etc.

Release 1.0.3 (April 7th, 2017)

This is a bugfix release that fixes a few problems that mainly concerned the handling of large values (with many elements) transferred via Channel Access.
One of this bugs caused a connection to a server to be stalled when connecting to a channel with more than 65534 elements. Another bug caused the connection to hang when receiving a message with more than 16384 bytes.
A bug in the handling of error messages sent by a server could cause problems when a write request failed. Due to this bug, an error message sent in response to a write request would not be processed correctly, causing this write operation to hang indefinitely (instead of failing).

Release 1.0.2 (April 2nd, 2017)

This is a bugfix release that fixes a few problems that were present in present in the 1.0.0 and 1.0.1 releases.
An IllegalStateException would incorrectly be thrown in certain cases when destroying a client.
Compatibility with older server versions that do not send a CA_PROTO_VERSION message when the connection is initiated has been added. In older versions of EPICS Jackie, channels hosted by such servers would never connect. Now, the library handles CA_PROTO_VERSION messages in a way that is compatible with older servers.

Release 1.0.1 (June 20th, 2016)

This is a bugfix release that fixes a few minor problems that were present in the 1.0.0 release.
An IllegalStateException could be incorrectly thrown when a ChannelAccessMonitor’s destroy() method was called right at the same moment when the connection to the channel’s server was interrupted.
Two typos were fixed: One was causing a ChannelAccessValue’s toString() method to return an incorrectly formatted string under certain circumstances. The other one resulted in a thread’s name to have a spelling error.
In addition to that, a workaround was implemented in order to avoid a a NullPointerException being thrown occassionally in the channel-name resolver thread. This exception was not actually caused by a bug in the library (extensive tests have been carried out to verify this). Rather, it seems like some JVM versions have a bug (most likely located in the JIT compiler) that causes instructions to be executed in the wrong order, resulting in a LinkedList’s poll() method to return null, when the list is not empty and the element at the head of the list is not null. While this problem did typically not have a direct impact on the library’s operation, it could lead to the application’s log being flooded with messages and with channel-name resolution taking longer due to spurious failures when trying to send UDP packets.

Release 1.0.0 (May 12th, 2016)

This is the first release of EPICS Jackie.


You can contact the author of this software, Sebastian Marsching, at epics-jackie-maintainer removethis <at> oss <dot> aquenos <dot> com.

Visit other projects on oss.aquenos.com.

© 2014–2017 aquenos GmbH