Skip to content
/ ecf Public
forked from eclipse-ecf/ecf

Remove org.eclipse.equinox.concurrent dependency from ECF core#4

Draft
Copilot wants to merge 6 commits intomasterfrom
copilot/remove-equinox-dependency
Draft

Remove org.eclipse.equinox.concurrent dependency from ECF core#4
Copilot wants to merge 6 commits intomasterfrom
copilot/remove-equinox-dependency

Conversation

Copy link

Copilot AI commented Dec 9, 2025

ECF depended on org.eclipse.equinox.concurrent for async execution primitives (IExecutor, IFuture, IProgressRunnable). This dependency is removed by implementing equivalent ECF-native interfaces in org.eclipse.ecf.core.jobs.

Changes

New Infrastructure (org.eclipse.ecf.core.jobs)

  • Interfaces: IExecutor, IFuture, IProgressRunnable, ISafeProgressRunner
  • Base classes: AbstractExecutor, AbstractFuture
  • Implementations: JobsExecutor (Eclipse Jobs), ThreadsExecutor, ImmediateExecutor
  • Support: FutureProgressMonitor, SingleOperationFuture, TimeoutException

Updated Bundles

  • org.eclipse.ecf - Replaced equinox.concurrent imports
  • org.eclipse.ecf.remoteservice - Updated public APIs and implementations
  • org.eclipse.ecf.provider.remoteservice - Updated provider classes
  • org.eclipse.ecf.discovery - Updated discovery APIs
  • org.eclipse.ecf.sharedobject - Updated shared object events

MANIFEST.MF Changes

Made org.eclipse.equinox.concurrent.future imports optional (resolution:=optional) in all affected bundles.

API Impact

Public APIs now return org.eclipse.ecf.core.jobs.IFuture instead of org.eclipse.equinox.concurrent.future.IFuture:

// Before
import org.eclipse.equinox.concurrent.future.IFuture;

// After
import org.eclipse.ecf.core.jobs.IFuture;

// Usage unchanged
IFuture future = remoteService.callAsync(call);
Object result = future.get();

Method signatures remain compatible - only the package changes.

Implementation Notes

  • Timeout calculations use System.nanoTime() for monotonic time handling
  • AbstractFuture implements both IFuture and ISafeProgressRunner for dual-mode execution
  • JobsExecutor maintains Eclipse Job scheduling semantics with progress monitoring

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • repo.eclipse.org
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --enable-native-access=ALL-UNNAMED -classpath /usr/share/apache-maven-3.9.11/boot/plexus-classworlds-2.9.0.jar -Dclassworlds.conf=/usr/share/apache-maven-3.9.11/bin/m2.conf -Dmaven.home=/usr/share/apache-maven-3.9.11 -Dlibrary.jansi.path=/usr/share/apache-maven-3.9.11/lib/jansi-native -Dmaven.multiModuleProjectDirectory=/home/REDACTED/work/ecf/ecf org.codehaus.plexus.classworlds.launcher.Launcher clean compile -pl framework/bundles/org.eclipse.ecf -am ider.filetransfer/src/org/eclipse/ecf/provider/filetransfer/browse/URLRemoteFile.java rep ure lToFactoryMapperorigin /usr/sbin/grep grep (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Original prompt

ECF currently has class JobsExecutor that depends on a Equinox bundle https://github.com/eclipse-equinox/equinox/tree/master/bundles/org.eclipse.equinox.concurrent and we like to get rid of that dependency.

So the task would be to factor out the dependecy, ratain as much backward compatibility as possible in the ECF codebase, possibly using modern Java 8 alternatives


✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

Copilot AI and others added 5 commits December 9, 2025 15:23
…rrent dependency

- Added IExecutor, IFuture, IProgressRunnable interfaces
- Added AbstractExecutor, AbstractFuture base classes
- Added concrete implementations: JobsExecutor, ThreadsExecutor, ImmediateExecutor
- Added support classes: FutureProgressMonitor, SingleOperationFuture, TimeoutException
- Updated JobsExecutor to use new ECF-native interfaces
- Made equinox.concurrent import optional in org.eclipse.ecf MANIFEST

Co-authored-by: laeubi <1331477+laeubi@users.noreply.github.com>
…r/future interfaces

- Replaced equinox.concurrent imports with org.eclipse.ecf.core.jobs imports
- Updated AbstractClientService, AbstractClientContainer, AbstractRemoteService
- Updated public API interfaces (IRemoteService, IRemoteServiceContainerAdapter, etc.)
- Updated internal implementation classes
- Made equinox.concurrent import optional in MANIFEST.MF
- Updated Javadoc examples in Constants.java

Co-authored-by: laeubi <1331477+laeubi@users.noreply.github.com>
…faces

- Replaced equinox.concurrent imports in RegistrySharedObject and RemoteServiceContainer
- Made equinox.concurrent import optional in MANIFEST.MF

Co-authored-by: laeubi <1331477+laeubi@users.noreply.github.com>
- Updated org.eclipse.ecf.discovery: AbstractDiscoveryContainerAdapter, IDiscoveryLocator
- Updated org.eclipse.ecf.sharedobject: ISharedObjectCallEvent, SharedObjectCallEvent
- Made equinox.concurrent imports optional in MANIFEST.MF files

Co-authored-by: laeubi <1331477+laeubi@users.noreply.github.com>
- Use System.nanoTime() instead of currentTimeMillis() for timeout calculations to avoid clock adjustment issues
- Extract bundle ID constant to avoid duplication
- Improved timeout handling with nanosecond precision

Co-authored-by: laeubi <1331477+laeubi@users.noreply.github.com>
Copilot AI changed the title [WIP] Remove dependency on Equinox bundle from JobsExecutor Remove org.eclipse.equinox.concurrent dependency from ECF core Dec 9, 2025
Copilot AI requested a review from laeubi December 9, 2025 15:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants