When instrumenting enterprise applications that embed the Eclipse Equinox OSGi framework, runtime initialization errors can halt deployment. Understanding how the underlying framework processes JVM bootstrap properties is critical to restoring agent visibility.
The following exception occurs during Java Agent initialization when the customer attempted to instrument their application ( Informatica 10.5.8 – latest version of Informatica at the time) with Java Agent version <= 26.1 (latest version of Java Agent at the time)
NoClassDefFoundError: com/singularity/ee/agent/appagent/entrypoint/bciengine/FastMethodInterceptorDelegatorBoot
Root Cause Diagnosis: Equinox OSGi Framework and System Property Siloing
The root cause is due to the com.singularity.* package not being boot-delegated within the Eclipse Equinox OSGi framework used by Informatica 10.5.8.
The JVM arguments do include:
-Dorg.osgi.framework.bootdelegation=com.singularity.*
which was added as a system property, and the FastMethodInterceptorDelegatorBoot class is present on the boot classpath (confirmed by the agent starting successfully). However, the Equinox framework is not reading this value from system properties.
Eclipse Equinox, like Apache Felix, can be initialized programmatically by passing a configuration Map to its constructor:
new org.eclipse.osgi.launch.Equinox(Map<String, String> configuration)
When launched this way, the framework reads its properties (including org.osgi.framework.bootdelegation) exclusively from the provided configuration map.
System properties set via -D flags are not automatically included unless the embedding application explicitly copies them into the map.
A similar challenge had already been addressed for Apache Felix.
The Java Agent code includes ApacheFelixOSGiInterceptor that intercepts org.apache.felix.framework.Felix.<init>(Map) and injects com.singularity.* into the org.osgi.framework.bootdelegation entry of the configuration map :
https://bitbucket.corp.appdynamics.com/projects/JAVA/repos/agent-java/browse/java_agent/agent/java/a...
However, no equivalent interceptor exists for Eclipse Equinox. Informatica 10.5.8 embeds Equinox and initializes it programmatically with its own configuration. At no point does the Informatica startup code read the org.osgi.framework.bootdelegation system property into the Equinox configuration map. The customer has no external configuration mechanism to influence this — the map contents are controlled entirely by Informatica's internal code.
The issue is resolved by intercepting the Equinox constructor the same way the agent already intercepts the Felix constructor.
Placing custom-interceptors.xml at <AGENT_HOME>/ver<version>/conf/ reuses the existing ApacheFelixOSGiInterceptor logic against the Equinox entry point.
This works because both Felix and Equinox follow the OSGi specification (org.osgi.framework.launch.Framework), where framework launch properties are passed as a Map<String, String> in the constructor. The ApacheFelixOSGiInterceptor reads the first parameter of the intercepted constructor (the configuration map), and adds com.singularity.* to the org.osgi.framework.bootdelegation entry. Since the Equinox constructor follows the same signature and contract, the interceptor works identically for both frameworks.
A permanent fix has been addressed in JavaAgent-26.4.0