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 8. Versions 1.x and 2.x of the library are also compatible with Java 6 and 7.
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:
<dependency> <groupId>com.aquenos.epics.jackie</groupId> <artifactId>epics-jackie-client</artifiactId> <version>3.1.0</version> </dependency>
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.
Changes:
This release introduces two major improvements:
First, read and monitor operations where the number of elements in a
value is determined by the server are now fully supported. This includes
support for zero-size arrays. Please refer to the “What’s New” chapter of
the manual for details.
Second, the hostnames in the EPICS_CA_ADDR_LIST
and
EPICS_CA_NAME_SERVERS
environment variables are now resolved.
Before, only IP addresses were supported.
In addition to these two new features, there are a couple of minor
improvements and bugfixes. For example, the
ChannelAccessChannel.getNative
methods do not throw a
NullPointerException
any longer.
Changes:
This is a bugfix release that fixes compatibility issues with recent JRE
versions when running on Windows.
In particular, the issues that are fixed now were encountered when using
Eclipse Temurin 21 on Windows.
Changes:
This is a major release bringing two new features.
The library now provides a way for determing the server that provides a
channel and allows for put operations to happen without a callback.
Those features could not be implemented in a fully backwards-compatible
way, so adjustments might be necessary when upgrading from version 2.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.
Changes:
This is a bugfix release. It fixes a problem that could cause an exception
(and subsequent interruption of the connection) when putting a large
waveform.
There are no other changes in this release, it remains fully compatible to
earlier versions of the 2.x branch.
Changes:
This is a bugfix release. It fixes a problem that could cause an exception
(and subsequent interruption of the connection) when putting a large
waveform.
This is the same fix as provided by version 2.0.1, but back-ported to the
1.x branch.
There are no other changes in this release, it remains fully compatible to
earlier versions.
Changes:
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.
Changes:
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.
Changes:
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).
Changes:
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.
Changes:
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.
Changes:
This is the first release of EPICS Jackie.
You can contact the author of this software, Sebastian Marsching, at epics-jackie-maintainer
<at> oss <dot> aquenos <dot> com.Visit other projects on oss.aquenos.com.
© 2014–2017 aquenos GmbH