⚠️ DEPRECATED DOCUMENTATION: This file contains legacy examples from version 1.0.For current documentation, see:
- README.md - Current examples with FlossWare libraries
- QUICK_START.md - Updated quick start guide
- ADVANCED_TRANSPORTS.md - Advanced protocol usage with new libraries
Version 1.1+ Changes:
- File transfer protocols (SFTP, WebDAV, SMB/CIFS, FTP/FTPS) moved to jfiletransfer
- Messaging systems (Kafka, RabbitMQ, Redis) moved to jmessaging
- Container systems (Kubernetes, Docker, Hazelcast) moved to jcontainer
- Version control (Git) moved to jvcs
- Use adapter classes:
FileTransferClassSource,MessageClientClassSource,ContainerClientClassSource,VcsClientClassSource
Comprehensive guide to all supported protocols and storage systems.
- Local & Network File Systems
- Cloud Object Storage
- Cloud File Storage
- Repository Systems
- REST APIs & Custom Protocols
- Database Storage
JClassLoader loader = JClassLoader.builder()
.addLocalSource("/opt/app/classes")
.build();// Public HTTP server
JClassLoader loader = JClassLoader.builder()
.addRemoteSource("https://cdn.example.com/classes/")
.build();
// With authentication
JClassLoader authLoader = JClassLoader.builder()
.addRemoteSource("https://secure.example.com/classes/",
AuthConfig.basic("user", "password"))
.build();// Anonymous FTP
FtpClassSource ftp = new FtpClassSource("ftp://ftp.example.com/classes/");
// Authenticated FTPS
FtpClassSource ftps = new FtpClassSource(
"ftps://secure.example.com/classes/",
"username", "password"
);
JClassLoader loader = JClassLoader.builder()
.addClassSource(ftp)
.build();// Password authentication
SftpClassSource sftp = SftpClassSource.builder()
.host("sftp.example.com")
.port(22)
.username("deploy-user")
.password("secret")
.basePath("/var/classes")
.build();
// Private key authentication
SftpClassSource sftpKey = SftpClassSource.builder()
.host("secure.example.com")
.username("deploy-user")
.privateKey("/home/user/.ssh/id_rsa")
.basePath("/opt/classes")
.build();
JClassLoader loader = JClassLoader.builder()
.addClassSource(sftp)
.build();// Public WebDAV
JClassLoader loader = JClassLoader.builder()
.addWebDavSource("https://dav.example.com/classes/")
.build();
// Authenticated WebDAV
JClassLoader authLoader = JClassLoader.builder()
.addWebDavSource("https://secure-dav.example.com/",
"username", "password")
.build();// With explicit credentials
S3ClassSource s3 = S3ClassSource.builder()
.region(Region.US_EAST_1)
.bucket("my-classes-bucket")
.prefix("production/classes")
.credentials("ACCESS_KEY_ID", "SECRET_ACCESS_KEY")
.build();
// Using IAM roles / default credentials
S3ClassSource s3Auto = S3ClassSource.builder()
.region("us-west-2")
.bucket("company-classes")
.prefix("releases/v1.0")
.build();
JClassLoader loader = JClassLoader.builder()
.addS3Source(s3)
.build();// With connection string
AzureBlobClassSource azure = AzureBlobClassSource.builder()
.connectionString("DefaultEndpointsProtocol=https;AccountName=...")
.container("classes-container")
.prefix("prod/classes")
.build();
// With account credentials
AzureBlobClassSource azureKey = AzureBlobClassSource.builder()
.accountName("mycompanystorage")
.accountKey("account-key-here")
.container("application-classes")
.build();
JClassLoader loader = JClassLoader.builder()
.addAzureBlobSource(azure)
.build();// With project ID
GcsClassSource gcs = GcsClassSource.builder()
.projectId("my-gcp-project")
.bucket("company-classes-bucket")
.prefix("releases/production")
.build();
// Using default credentials
GcsClassSource gcsAuto = GcsClassSource.builder()
.bucket("app-classes")
.build();
JClassLoader loader = JClassLoader.builder()
.addGcsSource(gcs)
.build();// From service account credentials file
GoogleDriveClassSource drive = GoogleDriveClassSource.builder()
.credentialsFromStream(new FileInputStream("credentials.json"))
.folderId("1234567890abcdefg") // Optional: specific folder
.applicationName("MyApp")
.build();
JClassLoader loader = JClassLoader.builder()
.addGoogleDriveSource(drive)
.build();DropboxClassSource dropbox = DropboxClassSource.builder()
.accessToken("your-dropbox-access-token")
.basePath("/Apps/ClassLoader/classes")
.build();
JClassLoader loader = JClassLoader.builder()
.addDropboxSource(dropbox)
.build();// Requires Microsoft Graph API setup
GraphServiceClient<?> graphClient = ... // Configure with OAuth
OneDriveClassSource oneDrive = OneDriveClassSource.builder()
.graphClient(graphClient)
.basePath("ClassLoader/classes")
.build();
JClassLoader loader = JClassLoader.builder()
.addOneDriveSource(oneDrive)
.build();JClassLoader loader = JClassLoader.builder()
.addMavenCentral(
"org.apache.commons:commons-lang3:3.12.0",
"com.google.guava:guava:32.1.0-jre"
)
.build();// JFrog Artifactory, Apache Archiva, etc.
MavenRepositoryClassSource maven = MavenRepositoryClassSource.builder()
.repositoryUrl("https://maven.example.com/repository/")
.addArtifact("org.example:my-lib:1.0.0")
.auth(AuthConfig.basic("maven-user", "maven-password"))
.build();
JClassLoader loader = JClassLoader.builder()
.addClassSource(maven)
.build();JClassLoader loader = JClassLoader.builder()
.addNexusRawSource("https://nexus.example.com", "raw-classes")
.build();MavenNexusClassSource nexus = MavenNexusClassSource.builder()
.nexusUrl("https://nexus.example.com")
.repository("maven-releases")
.addArtifact("com.company:internal-lib:1.0.0")
.auth(AuthConfig.basic("user", "password"))
.build();
JClassLoader loader = JClassLoader.builder()
.addNexusMavenSource(nexus)
.build();RestApiClassSource rest = RestApiClassSource.builder()
.baseUrl("https://api.example.com/classes")
.classPathTemplate("v1/download/{fullclass}")
.addHeader("X-API-Version", "2.0")
.addHeader("Accept", "application/octet-stream")
.addQueryParam("format", "binary")
.auth(AuthConfig.bearer("api-token-12345"))
.responseFormat(RestApiClassSource.ResponseFormat.BINARY)
.build();
JClassLoader loader = JClassLoader.builder()
.addRestApiSource(rest)
.build();Template Variables:
{package}- Package path (e.g.,com/example){class}- Simple class name (e.g.,MyClass){fullclass}- Full class path (e.g.,com/example/MyClass)
Response Formats:
BINARY- Raw class file bytesBASE64_JSON_FIELD- Base64-encoded in JSON field named "data" or "content"DIRECT- Direct response
// Implement your own protocol
public class CustomProtocol implements ProtocolHandler {
@Override
public byte[] fetchClass(String className) throws IOException {
// Your custom logic
}
@Override
public boolean canHandle(String className) {
// Check if this handler can load the class
}
@Override
public String getProtocolName() {
return "custom";
}
@Override
public void close() throws IOException {
// Cleanup
}
}
CustomProtocolClassSource custom = new CustomProtocolClassSource(
new CustomProtocol()
);
JClassLoader loader = JClassLoader.builder()
.addClassSource(custom)
.build();// Classes stored as BLOBs in database
DataSource dataSource = ... // Configure your database
JClassLoader loader = JClassLoader.builder()
.addDatabaseSource(
dataSource,
"class_storage", // Table name
"class_name", // Class name column
"class_bytes" // Class bytes (BLOB) column
)
.build();Database Schema Example:
CREATE TABLE class_storage (
class_name VARCHAR(255) PRIMARY KEY,
class_bytes BLOB NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO class_storage (class_name, class_bytes)
VALUES ('com.example.MyClass', <binary class data>);import org.flossware.jclassloader.*;
import org.flossware.jclassloader.cache.FileSystemCache;
import org.flossware.jclassloader.cloud.*;
// Enterprise setup with comprehensive fallbacks
JClassLoader enterpriseLoader = JClassLoader.builder()
// 1. Local development overrides
.addLocalSource("/opt/app/dev-overrides")
// 2. Primary cloud storage (AWS S3)
.addS3Source(S3ClassSource.builder()
.region(Region.US_EAST_1)
.bucket("prod-classes")
.prefix("v3/classes")
.build())
// 3. Backup cloud (Azure)
.addAzureBlobSource(AzureBlobClassSource.builder()
.accountName("backup-storage")
.accountKey("key")
.container("classes-dr")
.build())
// 4. Shared team resources (Google Drive)
.addGoogleDriveSource(googleDriveSource)
// 5. Network file server (SFTP)
.addClassSource(SftpClassSource.builder()
.host("team-server.com")
.username("build-agent")
.privateKey("/var/secrets/key")
.basePath("/shared/classes")
.build())
// 6. Internal Maven artifacts
.addMavenRepository("https://maven.company.com/internal/",
"com.company:core:3.1.0",
"com.company:api-client:2.5.0")
// 7. Maven Central (open source dependencies)
.addMavenCentral(
"org.apache.commons:commons-lang3:3.12.0",
"com.google.code.gson:gson:2.10.1")
// 8. Legacy REST API
.addRestApiSource(restApiSource)
// 9. Database fallback
.addDatabaseSource(dataSource, "class_storage",
"class_name", "class_bytes")
// Enable caching for performance
.cache(new FileSystemCache("/var/cache/jclassloader"))
.useCache(true)
.build();All protocols support optional caching:
import org.flossware.jclassloader.cache.FileSystemCache;
FileSystemCache cache = new FileSystemCache("/tmp/class-cache");
JClassLoader loader = JClassLoader.builder()
.addS3Source(s3Source)
.addMavenCentral("org.example:lib:1.0.0")
.cache(cache)
.useCache(true)
.build();Benefits:
- Reduces network requests
- Improves class loading performance
- Offline capability after initial load
- Reduces cloud storage costs
| Protocol | Auth Methods |
|---|---|
| HTTP/HTTPS | Basic, Bearer Token |
| FTP/FTPS | Username/Password |
| SFTP | Password, Private Key |
| WebDAV | Username/Password |
| AWS S3 | Access Keys, IAM Roles |
| Azure Blob | Account Key, Connection String |
| Google Cloud Storage | Service Account, Default Credentials |
| Google Drive | OAuth, Service Account |
| Dropbox | Access Token |
| OneDrive | Microsoft Graph OAuth |
| Maven Repos | Basic, Bearer Token |
| Nexus | Basic, Bearer Token |
| REST API | Basic, Bearer Token, Custom Headers |
| Database | JDBC Connection |
| Use Case | Recommended Protocols |
|---|---|
| Production deployment | AWS S3, Azure Blob, GCS |
| Team collaboration | Google Drive, Dropbox, OneDrive, SFTP |
| CI/CD pipelines | Maven (Central/Nexus), S3, Azure |
| Legacy systems | FTP, Database, REST API |
| Enterprise networks | SFTP, WebDAV, Internal Maven |
| Development | Local, HTTP, Maven Central |
| Disaster recovery | Multiple cloud providers |
| Air-gapped environments | Local, Database, Internal network |
- ✅ Local File System
- ✅ HTTP
- ✅ HTTPS
- ✅ FTP
- ✅ FTPS
- ✅ SFTP
- ✅ WebDAV
- ✅ AWS S3
- ✅ Azure Blob Storage
- ✅ Google Cloud Storage
- ✅ Google Drive
- ✅ Dropbox
- ✅ Microsoft OneDrive
- ✅ Maven Central
- ✅ Generic Maven Repository
- ✅ Nexus Raw Repository
- ✅ Nexus Maven Repository
- ✅ REST API (Binary)
- ✅ REST API (JSON/Base64)
- ✅ JDBC Database
- ✅ Custom Protocol Handler
- ✅ JFrog Artifactory (via Maven)
- ✅ Apache Archiva (via Maven)
- ✅ GitHub Packages (via Maven)
- ✅ GitLab Package Registry (via Maven)
- ✅ JCenter (via Maven)
- ✅ Google Maven (via Maven)
- ✅ File-based caching
- ✅ Authentication (7 methods)
- ✅ Custom protocol handlers
Total Source Files: 30 Java classes Total Tests: 26+ unit tests All Tests: ✅ PASSING