Skip to content

Commit 43d5021

Browse files
Flossyclaude
andcommitted
docs: fix inconsistent class name - replace JClassLoader with ApplicationClassLoader
- Replace all 36 occurrences of JClassLoader with ApplicationClassLoader - Fixes confusion between project name (JClassLoader) and actual class name - All code examples now use the correct class name The project is named "JClassLoader" but the actual class to import and use is ApplicationClassLoader. This update ensures all documentation matches the implementation. Fixes #65 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
1 parent f0afac2 commit 43d5021

1 file changed

Lines changed: 36 additions & 36 deletions

File tree

README.md

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# JClassLoader
1+
# ApplicationClassLoader
22

33
A flexible Java ClassLoader that can load classes from 34+ transport protocols with built-in caching support and authentication.
44

@@ -59,9 +59,9 @@ mvn clean install
5959
### Basic Local Class Loading
6060

6161
```java
62-
import org.flossware.classloader-java.JClassLoader;
62+
import org.flossware.classloader-java.ApplicationClassLoader;
6363

64-
JClassLoader loader = JClassLoader.builder()
64+
ApplicationClassLoader loader = ApplicationClassLoader.builder()
6565
.addLocalSource("/path/to/classes")
6666
.useCache(false)
6767
.build();
@@ -73,7 +73,7 @@ Object instance = myClass.getDeclaredConstructor().newInstance();
7373
### Remote Class Loading (HTTP/HTTPS)
7474

7575
```java
76-
JClassLoader loader = JClassLoader.builder()
76+
ApplicationClassLoader loader = ApplicationClassLoader.builder()
7777
.addRemoteSource("https://example.com/classes/")
7878
.build();
7979

@@ -87,13 +87,13 @@ import org.flossware.classloader-java.AuthConfig;
8787

8888
// Basic Authentication
8989
AuthConfig basicAuth = AuthConfig.basic("username", "password");
90-
JClassLoader loader = JClassLoader.builder()
90+
ApplicationClassLoader loader = ApplicationClassLoader.builder()
9191
.addRemoteSource("https://secure.example.com/classes/", basicAuth)
9292
.build();
9393

9494
// Bearer Token Authentication
9595
AuthConfig bearerAuth = AuthConfig.bearer("your-token-here");
96-
JClassLoader loader2 = JClassLoader.builder()
96+
ApplicationClassLoader loader2 = ApplicationClassLoader.builder()
9797
.addRemoteSource("https://api.example.com/classes/", bearerAuth)
9898
.build();
9999
```
@@ -102,17 +102,17 @@ JClassLoader loader2 = JClassLoader.builder()
102102

103103
```java
104104
// Anonymous FTP
105-
JClassLoader ftpLoader = JClassLoader.builder()
105+
ApplicationClassLoader ftpLoader = ApplicationClassLoader.builder()
106106
.addClassSource(new FtpClassSource("ftp://ftp.example.com/classes/"))
107107
.build();
108108

109109
// Authenticated FTP
110-
JClassLoader ftpAuthLoader = JClassLoader.builder()
110+
ApplicationClassLoader ftpAuthLoader = ApplicationClassLoader.builder()
111111
.addClassSource(new FtpClassSource("ftp://ftp.example.com/classes/", "username", "password"))
112112
.build();
113113

114114
// FTPS (FTP over SSL/TLS)
115-
JClassLoader ftpsLoader = JClassLoader.builder()
115+
ApplicationClassLoader ftpsLoader = ApplicationClassLoader.builder()
116116
.addClassSource(new FtpClassSource("ftps://secure-ftp.example.com/classes/", "username", "password"))
117117
.build();
118118
```
@@ -125,13 +125,13 @@ JClassLoader ftpsLoader = JClassLoader.builder()
125125
import org.flossware.classloader-java.AuthConfig;
126126

127127
// Public Nexus raw repository
128-
JClassLoader loader = JClassLoader.builder()
128+
ApplicationClassLoader loader = ApplicationClassLoader.builder()
129129
.addNexusRawSource("https://nexus.example.com", "raw-classes")
130130
.build();
131131

132132
// Authenticated Nexus raw repository
133133
AuthConfig auth = AuthConfig.basic("username", "password");
134-
JClassLoader authLoader = JClassLoader.builder()
134+
ApplicationClassLoader authLoader = ApplicationClassLoader.builder()
135135
.addNexusRawSource("https://nexus.example.com", "private-raw", auth)
136136
.build();
137137
```
@@ -154,7 +154,7 @@ MavenNexusClassSource nexusSource = MavenNexusClassSource.builder()
154154
.addArtifact("com.google.guava:guava:32.1.0-jre")
155155
.build();
156156

157-
JClassLoader loader = JClassLoader.builder()
157+
ApplicationClassLoader loader = ApplicationClassLoader.builder()
158158
.addNexusMavenSource(nexusSource)
159159
.build();
160160

@@ -211,7 +211,7 @@ import org.flossware.classloader-java.cache.FileSystemCache;
211211

212212
FileSystemCache cache = new FileSystemCache("/tmp/classloader-java-cache");
213213

214-
JClassLoader loader = JClassLoader.builder()
214+
ApplicationClassLoader loader = ApplicationClassLoader.builder()
215215
.addRemoteSource("https://example.com/classes/")
216216
.cache(cache)
217217
.useCache(true)
@@ -229,7 +229,7 @@ Class<?> myCachedClass = loader.loadClass("com.example.MyClass");
229229
Classes are searched in the order sources are added:
230230

231231
```java
232-
JClassLoader loader = JClassLoader.builder()
232+
ApplicationClassLoader loader = ApplicationClassLoader.builder()
233233
.addLocalSource("/opt/app/classes") // Searched first
234234
.addRemoteSource("https://cdn.example.com/") // Searched second
235235
.addClassSource(new FtpClassSource("ftp://backup.example.com/classes/")) // Searched third
@@ -269,13 +269,13 @@ CloudStorageClient s3 = S3CloudStorageClient.builder()
269269
.prefix("production/classes/")
270270
.build();
271271

272-
// Use with JClassLoader
273-
JClassLoader loader = JClassLoader.builder()
272+
// Use with ApplicationClassLoader
273+
ApplicationClassLoader loader = ApplicationClassLoader.builder()
274274
.addCloudStorage(s3)
275275
.build();
276276

277277
// Or wrap manually
278-
JClassLoader loader2 = JClassLoader.builder()
278+
ApplicationClassLoader loader2 = ApplicationClassLoader.builder()
279279
.addClassSource(new CloudStorageClassSource(s3))
280280
.build();
281281
```
@@ -315,7 +315,7 @@ FileTransferClient sftp = SftpFileTransferClient.builder()
315315
.basePath("/opt/classes")
316316
.build();
317317

318-
JClassLoader loader = JClassLoader.builder()
318+
ApplicationClassLoader loader = ApplicationClassLoader.builder()
319319
.addClassSource(new FileTransferClassSource(sftp))
320320
.build();
321321
```
@@ -345,7 +345,7 @@ MessageClient kafka = KafkaMessageClient.builder()
345345
.topic("class-definitions")
346346
.build();
347347

348-
JClassLoader loader = JClassLoader.builder()
348+
ApplicationClassLoader loader = ApplicationClassLoader.builder()
349349
.addClassSource(new MessageClientClassSource(kafka))
350350
.build();
351351
```
@@ -374,7 +374,7 @@ ContainerClient k8s = KubernetesContainerClient.builder()
374374
.namespace("production")
375375
.build();
376376

377-
JClassLoader loader = JClassLoader.builder()
377+
ApplicationClassLoader loader = ApplicationClassLoader.builder()
378378
.addClassSource(new ContainerClientClassSource(k8s, "app-classes"))
379379
.build();
380380
```
@@ -405,7 +405,7 @@ VcsClient git = GitVcsClient.builder()
405405
.basePath("build/classes")
406406
.build();
407407

408-
JClassLoader loader = JClassLoader.builder()
408+
ApplicationClassLoader loader = ApplicationClassLoader.builder()
409409
.addClassSource(new VcsClientClassSource(git))
410410
.build();
411411
```
@@ -417,21 +417,21 @@ Supported systems: Git (local and remote). See [jvcs docs](https://github.com/Fl
417417
```java
418418
ClassLoader parentLoader = Thread.currentThread().getContextClassLoader();
419419

420-
JClassLoader loader = JClassLoader.builder()
420+
ApplicationClassLoader loader = ApplicationClassLoader.builder()
421421
.parent(parentLoader)
422422
.addLocalSource("/path/to/classes")
423423
.build();
424424
```
425425

426426
### Delegation Strategies (NEW in 1.0)
427427

428-
JClassLoader now supports configurable delegation strategies to control when classes are loaded from parent vs. configured sources.
428+
ApplicationClassLoader now supports configurable delegation strategies to control when classes are loaded from parent vs. configured sources.
429429

430430
#### Parent-First (Default - Standard Java Behavior)
431431

432432
```java
433433
// Delegates to parent first, then checks sources
434-
JClassLoader loader = JClassLoader.builder()
434+
ApplicationClassLoader loader = ApplicationClassLoader.builder()
435435
.addLocalSource("/path/to/classes")
436436
.parentFirst() // This is the default
437437
.build();
@@ -444,7 +444,7 @@ Useful for plugin systems, application containers, and isolation scenarios where
444444
```java
445445
// Checks sources first, then falls back to parent
446446
// System classes (java.*, javax.*) always from parent
447-
JClassLoader loader = JClassLoader.builder()
447+
ApplicationClassLoader loader = ApplicationClassLoader.builder()
448448
.addLocalSource("/plugins/my-plugin")
449449
.parentLast("com.myapp.api.", "java.", "javax.") // API classes from parent
450450
.build();
@@ -456,7 +456,7 @@ Fine-grained control using a predicate:
456456

457457
```java
458458
// Custom logic to decide parent-first vs parent-last per class
459-
JClassLoader loader = JClassLoader.builder()
459+
ApplicationClassLoader loader = ApplicationClassLoader.builder()
460460
.addLocalSource("/path/to/classes")
461461
.customDelegation(className ->
462462
className.startsWith("java.") || // System classes: parent-first
@@ -473,13 +473,13 @@ Monitor class loading events for tracking, debugging, and resource management.
473473

474474
```java
475475
// Log all class loading events
476-
JClassLoader loader = JClassLoader.builder()
476+
ApplicationClassLoader loader = ApplicationClassLoader.builder()
477477
.addLocalSource("/path/to/classes")
478478
.addLoggingListener() // Logs to System.out
479479
.build();
480480

481481
// Verbose logging (includes cache hits)
482-
JClassLoader verboseLoader = JClassLoader.builder()
482+
ApplicationClassLoader verboseLoader = ApplicationClassLoader.builder()
483483
.addLocalSource("/path/to/classes")
484484
.addLoggingListener(true) // verbose = true
485485
.build();
@@ -494,7 +494,7 @@ import org.flossware.classloader-java.lifecycle.ResourceTrackingListener;
494494

495495
ResourceTrackingListener tracker = new ResourceTrackingListener();
496496

497-
JClassLoader loader = JClassLoader.builder()
497+
ApplicationClassLoader loader = ApplicationClassLoader.builder()
498498
.addLocalSource("/plugins/my-plugin")
499499
.addListener(tracker)
500500
.build();
@@ -535,7 +535,7 @@ ClassLoaderLifecycleListener myListener = new ClassLoaderLifecycleListener() {
535535
}
536536
};
537537

538-
JClassLoader loader = JClassLoader.builder()
538+
ApplicationClassLoader loader = ApplicationClassLoader.builder()
539539
.addLocalSource("/path/to/classes")
540540
.addListener(myListener)
541541
.build();
@@ -546,7 +546,7 @@ JClassLoader loader = JClassLoader.builder()
546546
### Core Components
547547

548548
**Class Loading:**
549-
- **`JClassLoader`**: Main classloader implementation extending `java.lang.ClassLoader`
549+
- **`ApplicationClassLoader`**: Main classloader implementation extending `java.lang.ClassLoader`
550550
- **`ClassSource`**: Interface for class loading sources (20+ implementations)
551551
- **`LocalClassSource`**: Loads classes from local file system
552552
- **`RemoteClassSource`**: Loads classes from HTTP/HTTPS URLs
@@ -604,7 +604,7 @@ mvn test
604604

605605
### Test Coverage
606606

607-
JClassLoader has **463 comprehensive unit tests** achieving **46% instruction coverage** across the codebase. While we strive for high test coverage, 100% coverage is not the goal for this project. Here's why:
607+
ApplicationClassLoader has **463 comprehensive unit tests** achieving **46% instruction coverage** across the codebase. While we strive for high test coverage, 100% coverage is not the goal for this project. Here's why:
608608

609609
**What IS tested (well-covered):**
610610
-**Core functionality** (53% coverage): Class loading, delegation strategies, authentication
@@ -662,7 +662,7 @@ This project is licensed under the GNU General Public License v3.0 - see the [LI
662662
### Plugin Systems
663663
Use parent-last delegation to isolate plugins from the host application:
664664
```java
665-
JClassLoader pluginLoader = JClassLoader.builder()
665+
ApplicationClassLoader pluginLoader = ApplicationClassLoader.builder()
666666
.addLocalSource("/plugins/my-plugin")
667667
.parentLast("com.myapp.api.") // Only API from host
668668
.trackResources() // For cleanup when unloading
@@ -672,7 +672,7 @@ JClassLoader pluginLoader = JClassLoader.builder()
672672
### Application Containers (like JPlatform)
673673
Run multiple applications in one JVM with isolation:
674674
```java
675-
JClassLoader app1Loader = JClassLoader.builder()
675+
ApplicationClassLoader app1Loader = ApplicationClassLoader.builder()
676676
.addLocalSource("/apps/app1.jar")
677677
.addMavenCentral("commons-lang3:3.12.0")
678678
.parentLast("org.platform.api.")
@@ -684,7 +684,7 @@ JClassLoader app1Loader = JClassLoader.builder()
684684
Isolate tests and cleanup between runs:
685685
```java
686686
ResourceTrackingListener tracker = new ResourceTrackingListener();
687-
JClassLoader testLoader = JClassLoader.builder()
687+
ApplicationClassLoader testLoader = ApplicationClassLoader.builder()
688688
.addLocalSource("/test-classes")
689689
.addListener(tracker)
690690
.build();
@@ -695,7 +695,7 @@ tracker.closeAllResources(); // Cleanup
695695
### Multi-Tenant Applications
696696
Load tenant-specific code with isolation:
697697
```java
698-
JClassLoader tenantLoader = JClassLoader.builder()
698+
ApplicationClassLoader tenantLoader = ApplicationClassLoader.builder()
699699
.addRemoteSource("https://tenant1.example.com/code/")
700700
.parentLast()
701701
.build();

0 commit comments

Comments
 (0)