☕ Best Practices in TuskLang - Java Edition

Java Documentation

Best Practices in TuskLang - Java Edition

"We don't bow to any king" - Excellence with Java Integration

Following best practices in TuskLang ensures maintainable, scalable, and robust Java applications. This guide covers essential patterns, conventions, and recommendations for enterprise-grade TuskLang development.

🎯 Java Best Practices Integration

@TuskConfig Best Practices

import org.tusklang.java.config.TuskConfig;
import org.tusklang.java.annotations.TuskValidate;
import org.tusklang.java.annotations.TuskDefault;
import org.tusklang.java.annotations.TuskRequired;
import org.tusklang.java.annotations.TuskDocumented;

/** * Enterprise application configuration following TuskLang best practices. * * This configuration class demonstrates: * - Proper annotation usage * - Validation and defaults * - Documentation and organization * - Type safety and error handling */ @TuskConfig @TuskDocumented("Enterprise application configuration with comprehensive settings") public class BestPracticesConfig { // Application metadata @TuskRequired @TuskDocumented("Application name - required for identification") private String appName; @TuskDefault("1.0.0") @TuskDocumented("Application version with semantic versioning") private String version; @TuskDefault("development") @TuskValidate("environment") @TuskDocumented("Environment: development, staging, production") private String environment; // Server configuration @TuskDefault("0.0.0.0") @TuskValidate("hostname") @TuskDocumented("Server host binding address") private String serverHost; @TuskDefault("8080") @TuskValidate("port") @TuskDocumented("Server port number (1-65535)") private int serverPort; @TuskDefault("false") @TuskDocumented("Enable SSL/TLS encryption") private boolean sslEnabled; // Database configuration @TuskRequired @TuskDocumented("Database configuration - required for data persistence") private DatabaseConfig database; // Security configuration @TuskDefault("true") @TuskDocumented("Enable security features") private boolean securityEnabled; private SecurityConfig security; // Performance configuration @TuskDefault("100") @TuskValidate("positive") @TuskDocumented("Maximum concurrent connections") private int maxConnections; @TuskDefault("30") @TuskValidate("positive") @TuskDocumented("Connection timeout in seconds") private int connectionTimeout; // Validation methods public boolean validateConfiguration() { List<String> errors = new ArrayList<>(); // Validate required fields if (appName == null || appName.trim().isEmpty()) { errors.add("Application name is required"); } if (database == null) { errors.add("Database configuration is required"); } // Validate port range if (serverPort < 1 || serverPort > 65535) { errors.add("Server port must be between 1 and 65535"); } // Validate environment if (!isValidEnvironment(environment)) { errors.add("Invalid environment: " + environment); } // Validate performance settings if (maxConnections <= 0) { errors.add("Maximum connections must be positive"); } if (connectionTimeout <= 0) { errors.add("Connection timeout must be positive"); } if (!errors.isEmpty()) { throw new IllegalArgumentException("Configuration validation failed: " + String.join(", ", errors)); } return true; } private boolean isValidEnvironment(String env) { return Arrays.asList("development", "staging", "production").contains(env); } // Configuration builder pattern public static class Builder { private BestPracticesConfig config = new BestPracticesConfig(); public Builder appName(String appName) { config.appName = appName; return this; } public Builder version(String version) { config.version = version; return this; } public Builder environment(String environment) { config.environment = environment; return this; } public Builder serverHost(String serverHost) { config.serverHost = serverHost; return this; } public Builder serverPort(int serverPort) { config.serverPort = serverPort; return this; } public Builder sslEnabled(boolean sslEnabled) { config.sslEnabled = sslEnabled; return this; } public Builder database(DatabaseConfig database) { config.database = database; return this; } public Builder securityEnabled(boolean securityEnabled) { config.securityEnabled = securityEnabled; return this; } public Builder security(SecurityConfig security) { config.security = security; return this; } public Builder maxConnections(int maxConnections) { config.maxConnections = maxConnections; return this; } public Builder connectionTimeout(int connectionTimeout) { config.connectionTimeout = connectionTimeout; return this; } public BestPracticesConfig build() { config.validateConfiguration(); return config; } } // Getters and setters public String getAppName() { return appName; } public void setAppName(String appName) { this.appName = appName; } public String getVersion() { return version; } public void setVersion(String version) { this.version = version; } public String getEnvironment() { return environment; } public void setEnvironment(String environment) { this.environment = environment; } public String getServerHost() { return serverHost; } public void setServerHost(String serverHost) { this.serverHost = serverHost; } public int getServerPort() { return serverPort; } public void setServerPort(int serverPort) { this.serverPort = serverPort; } public boolean isSslEnabled() { return sslEnabled; } public void setSslEnabled(boolean sslEnabled) { this.sslEnabled = sslEnabled; } public DatabaseConfig getDatabase() { return database; } public void setDatabase(DatabaseConfig database) { this.database = database; } public boolean isSecurityEnabled() { return securityEnabled; } public void setSecurityEnabled(boolean securityEnabled) { this.securityEnabled = securityEnabled; } public SecurityConfig getSecurity() { return security; } public void setSecurity(SecurityConfig security) { this.security = security; } public int getMaxConnections() { return maxConnections; } public void setMaxConnections(int maxConnections) { this.maxConnections = maxConnections; } public int getConnectionTimeout() { return connectionTimeout; } public void setConnectionTimeout(int connectionTimeout) { this.connectionTimeout = connectionTimeout; } }

@TuskConfig @TuskDocumented("Database configuration with connection settings") public class DatabaseConfig { @TuskRequired @TuskDocumented("Database host address") private String host; @TuskDefault("5432") @TuskValidate("port") @TuskDocumented("Database port number") private int port; @TuskRequired @TuskDocumented("Database name") private String name; @TuskRequired @TuskDocumented("Database username") private String user; @TuskRequired @TuskDocumented("Database password") private String password; @TuskDefault("false") @TuskDocumented("Enable SSL connection") private boolean ssl; // Getters and setters public String getHost() { return host; } public void setHost(String host) { this.host = host; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getUser() { return user; } public void setUser(String user) { this.user = user; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public boolean isSsl() { return ssl; } public void setSsl(boolean ssl) { this.ssl = ssl; } }

@TuskConfig @TuskDocumented("Security configuration with authentication and authorization") public class SecurityConfig { @TuskDefault("HS256") @TuskDocumented("JWT algorithm") private String jwtAlgorithm; @TuskRequired @TuskDocumented("JWT secret key") private String jwtSecret; @TuskDefault("3600") @TuskValidate("positive") @TuskDocumented("JWT expiration time in seconds") private int jwtExpiration; @TuskDefault("true") @TuskDocumented("Enable CORS") private boolean corsEnabled; private List<String> allowedOrigins; // Getters and setters public String getJwtAlgorithm() { return jwtAlgorithm; } public void setJwtAlgorithm(String jwtAlgorithm) { this.jwtAlgorithm = jwtAlgorithm; } public String getJwtSecret() { return jwtSecret; } public void setJwtSecret(String jwtSecret) { this.jwtSecret = jwtSecret; } public int getJwtExpiration() { return jwtExpiration; } public void setJwtExpiration(int jwtExpiration) { this.jwtExpiration = jwtExpiration; } public boolean isCorsEnabled() { return corsEnabled; } public void setCorsEnabled(boolean corsEnabled) { this.corsEnabled = corsEnabled; } public List<String> getAllowedOrigins() { return allowedOrigins; } public void setAllowedOrigins(List<String> allowedOrigins) { this.allowedOrigins = allowedOrigins; } }

TuskLang Best Practices Configuration

TuskLang configuration following best practices

Application metadata with proper documentation

app_name: string = "Enterprise TuskLang Application" version: string = "1.0.0" environment: string = @env("ENVIRONMENT", "development")

Server configuration with validation

server: object = { host: string = @env("SERVER_HOST", "0.0.0.0") port: number = @env("SERVER_PORT", 8080) ssl: boolean = @env("SSL_ENABLED", false) # Performance settings max_connections: number = @env("MAX_CONNECTIONS", 100) connection_timeout: number = @env("CONNECTION_TIMEOUT", 30) # Health check settings health_check: object = { enabled: boolean = true interval: number = 30 timeout: number = 5 } }

Database configuration with security

database: object = { host: string = @env("DB_HOST", "localhost") port: number = @env("DB_PORT", 5432) name: string = @env("DB_NAME", "tuskdb") user: string = @env("DB_USER", "postgres") password: string = @env.secure("DB_PASSWORD") ssl: boolean = @env("DB_SSL", false) # Connection pool settings pool: object = { min_connections: number = 5 max_connections: number = 20 idle_timeout: number = 300 connection_timeout: number = 30 } # Migration settings migrations: object = { enabled: boolean = true auto_run: boolean = @env("AUTO_MIGRATE", false) location: string = "db/migrations" } }

Security configuration

security: object = { enabled: boolean = @env("SECURITY_ENABLED", true) # JWT settings jwt: object = { algorithm: string = "HS256" secret: string = @env.secure("JWT_SECRET") expiration: number = @env("JWT_EXPIRATION", 3600) refresh_expiration: number = @env("JWT_REFRESH_EXPIRATION", 86400) } # CORS settings cors: object = { enabled: boolean = @env("CORS_ENABLED", true) allowed_origins: array = @env("CORS_ORIGINS", [ "https://app.example.com" "https://api.example.com" "http://localhost:3000" ]) allowed_methods: array = [ "GET" "POST" "PUT" "DELETE" "OPTIONS" ] allowed_headers: array = [ "Content-Type" "Authorization" "X-Requested-With" ] } # Rate limiting rate_limit: object = { enabled: boolean = @env("RATE_LIMIT_ENABLED", true) requests_per_minute: number = @env("RATE_LIMIT_RPM", 100) burst_size: number = @env("RATE_LIMIT_BURST", 20) } }

Logging configuration

logging: object = { level: string = @env("LOG_LEVEL", "info") format: string = @env("LOG_FORMAT", "json") # File logging file: object = { enabled: boolean = @env("FILE_LOGGING", true) path: string = @env("LOG_FILE_PATH", "logs/app.log") max_size: string = @env("LOG_MAX_SIZE", "100MB") max_files: number = @env("LOG_MAX_FILES", 10) } # Console logging console: object = { enabled: boolean = @env("CONSOLE_LOGGING", true) colored: boolean = @env("CONSOLE_COLORED", true) } }

Monitoring and metrics

monitoring: object = { enabled: boolean = @env("MONITORING_ENABLED", true) # Metrics collection metrics: object = { enabled: boolean = @env("METRICS_ENABLED", true) port: number = @env("METRICS_PORT", 9090) path: string = @env("METRICS_PATH", "/metrics") } # Health checks health: object = { enabled: boolean = @env("HEALTH_CHECKS", true) port: number = @env("HEALTH_PORT", 8081) path: string = @env("HEALTH_PATH", "/health") } }

Cache configuration

cache: object = { enabled: boolean = @env("CACHE_ENABLED", true) # Redis cache redis: object = { host: string = @env("REDIS_HOST", "localhost") port: number = @env("REDIS_PORT", 6379) password: string = @env.secure("REDIS_PASSWORD") database: number = @env("REDIS_DB", 0) # Connection pool pool: object = { max_connections: number = @env("REDIS_MAX_CONNECTIONS", 10) min_connections: number = @env("REDIS_MIN_CONNECTIONS", 2) connection_timeout: number = @env("REDIS_TIMEOUT", 5) } } # Default TTL settings default_ttl: number = @env("CACHE_DEFAULT_TTL", 300) session_ttl: number = @env("CACHE_SESSION_TTL", 3600) }

🏗️ Configuration Organization

Java Configuration Structure

@TuskConfig
public class ConfigurationManager {
    
    private final Map<String, Object> configurations;
    private final List<ConfigurationValidator> validators;
    private final ConfigurationLoader loader;
    
    public ConfigurationManager() {
        this.configurations = new ConcurrentHashMap<>();
        this.validators = new ArrayList<>();
        this.loader = new ConfigurationLoader();
        
        // Register default validators
        registerDefaultValidators();
    }
    
    // Load configuration from multiple sources
    public void loadConfiguration(String... sources) {
        for (String source : sources) {
            try {
                Map<String, Object> config = loader.load(source);
                configurations.putAll(config);
            } catch (Exception e) {
                throw new ConfigurationException("Failed to load configuration from: " + source, e);
            }
        }
        
        // Validate all configurations
        validateAll();
    }
    
    // Environment-specific configuration loading
    public void loadEnvironmentConfiguration(String environment) {
        String baseConfig = "config/base.tsk";
        String envConfig = String.format("config/%s.tsk", environment);
        
        loadConfiguration(baseConfig, envConfig);
    }
    
    // Configuration validation
    private void validateAll() {
        for (ConfigurationValidator validator : validators) {
            validator.validate(configurations);
        }
    }
    
    // Register custom validators
    public void registerValidator(ConfigurationValidator validator) {
        validators.add(validator);
    }
    
    private void registerDefaultValidators() {
        validators.add(new RequiredFieldsValidator());
        validators.add(new TypeValidator());
        validators.add(new RangeValidator());
        validators.add(new SecurityValidator());
    }
    
    // Get configuration with type safety
    public <T> T getConfiguration(String key, Class<T> type) {
        Object value = configurations.get(key);
        if (value == null) {
            throw new ConfigurationException("Configuration key not found: " + key);
        }
        
        if (!type.isInstance(value)) {
            throw new ConfigurationException("Configuration type mismatch for key: " + key);
        }
        
        return type.cast(value);
    }
    
    // Get configuration with default value
    public <T> T getConfiguration(String key, Class<T> type, T defaultValue) {
        try {
            return getConfiguration(key, type);
        } catch (ConfigurationException e) {
            return defaultValue;
        }
    }
}

// Configuration validator interface public interface ConfigurationValidator { void validate(Map<String, Object> configuration); }

// Required fields validator public class RequiredFieldsValidator implements ConfigurationValidator { private static final Set<String> REQUIRED_FIELDS = Set.of( "app_name", "database.host", "database.name", "database.user" ); @Override public void validate(Map<String, Object> configuration) { for (String field : REQUIRED_FIELDS) { if (!hasValue(configuration, field)) { throw new ConfigurationException("Required field missing: " + field); } } } private boolean hasValue(Map<String, Object> config, String field) { String[] parts = field.split("\\."); Object current = config; for (String part : parts) { if (current instanceof Map) { current = ((Map<String, Object>) current).get(part); } else { return false; } } return current != null; } }

TuskLang Configuration Organization

Configuration organization best practices

1. Base configuration (config/base.tsk)

Common settings shared across all environments

app_name: string = "TuskLang Enterprise" version: string = "1.0.0"

Default server settings

server: object = { host: string = "0.0.0.0" port: number = 8080 ssl: boolean = false }

Default database settings

database: object = { port: number = 5432 ssl: boolean = false pool: object = { min_connections: number = 5 max_connections: number = 20 idle_timeout: number = 300 } }

Default security settings

security: object = { enabled: boolean = true jwt: object = { algorithm: string = "HS256" expiration: number = 3600 } cors: object = { enabled: boolean = true allowed_methods: array = ["GET", "POST", "PUT", "DELETE", "OPTIONS"] } }

2. Environment-specific configuration (config/development.tsk)

Development environment overrides

environment: string = "development" debug: boolean = true

server: object = { ...@server port: number = 3000 }

database: object = { ...@database host: string = "localhost" name: string = "tuskdb_dev" user: string = "postgres" password: string = "dev_password" }

logging: object = { level: string = "debug" console: object = { enabled: boolean = true colored: boolean = true } }

3. Production configuration (config/production.tsk)

Production environment overrides

environment: string = "production" debug: boolean = false

server: object = { ...@server ssl: boolean = true }

database: object = { ...@database host: string = @env("DB_HOST") name: string = @env("DB_NAME") user: string = @env("DB_USER") password: string = @env.secure("DB_PASSWORD") ssl: boolean = true }

security: object = { ...@security jwt: object = { ...@security.jwt secret: string = @env.secure("JWT_SECRET") } rate_limit: object = { enabled: boolean = true requests_per_minute: number = 100 } }

logging: object = { level: string = "info" file: object = { enabled: boolean = true path: string = "/var/log/tusklang/app.log" } }

🔒 Security Best Practices

Java Security Configuration

@TuskConfig
public class SecurityBestPractices {
    
    // Secure configuration loading
    public void loadSecureConfiguration() {
        // Use environment variables for sensitive data
        String dbPassword = System.getenv("DB_PASSWORD");
        String jwtSecret = System.getenv("JWT_SECRET");
        
        if (dbPassword == null || dbPassword.isEmpty()) {
            throw new SecurityException("Database password not provided");
        }
        
        if (jwtSecret == null || jwtSecret.isEmpty()) {
            throw new SecurityException("JWT secret not provided");
        }
        
        // Validate secret strength
        validateSecretStrength(jwtSecret);
    }
    
    // Validate secret strength
    private void validateSecretStrength(String secret) {
        if (secret.length() < 32) {
            throw new SecurityException("JWT secret must be at least 32 characters long");
        }
        
        // Check for complexity
        boolean hasUpperCase = secret.matches(".[A-Z].");
        boolean hasLowerCase = secret.matches(".[a-z].");
        boolean hasDigit = secret.matches(".\\d.");
        boolean hasSpecial = secret.matches(".[!@#$%^&()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?].*");
        
        if (!(hasUpperCase && hasLowerCase && hasDigit && hasSpecial)) {
            throw new SecurityException("JWT secret must contain uppercase, lowercase, digit, and special character");
        }
    }
    
    // Secure configuration validation
    public void validateSecurityConfiguration(SecurityConfig config) {
        List<String> errors = new ArrayList<>();
        
        // Validate JWT configuration
        if (config.getJwtSecret() == null || config.getJwtSecret().isEmpty()) {
            errors.add("JWT secret is required");
        }
        
        if (config.getJwtExpiration() <= 0) {
            errors.add("JWT expiration must be positive");
        }
        
        // Validate CORS configuration
        if (config.isCorsEnabled() && (config.getAllowedOrigins() == null || config.getAllowedOrigins().isEmpty())) {
            errors.add("CORS allowed origins must be specified when CORS is enabled");
        }
        
        if (!errors.isEmpty()) {
            throw new SecurityException("Security configuration validation failed: " + String.join(", ", errors));
        }
    }
}

TuskLang Security Configuration

Security best practices in TuskLang

1. Use environment variables for sensitive data

database: object = { host: string = @env("DB_HOST") port: number = @env("DB_PORT", 5432) name: string = @env("DB_NAME") user: string = @env("DB_USER") password: string = @env.secure("DB_PASSWORD") # Secure environment variable ssl: boolean = @env("DB_SSL", true) }

2. Secure JWT configuration

security: object = { jwt: object = { algorithm: string = "HS256" secret: string = @env.secure("JWT_SECRET") # Must be at least 32 characters expiration: number = @env("JWT_EXPIRATION", 3600) refresh_expiration: number = @env("JWT_REFRESH_EXPIRATION", 86400) } # 3. Secure CORS configuration cors: object = { enabled: boolean = @env("CORS_ENABLED", true) allowed_origins: array = @env("CORS_ORIGINS", [ "https://app.example.com" "https://api.example.com" ]) credentials: boolean = @env("CORS_CREDENTIALS", true) } # 4. Rate limiting rate_limit: object = { enabled: boolean = @env("RATE_LIMIT_ENABLED", true) requests_per_minute: number = @env("RATE_LIMIT_RPM", 100) burst_size: number = @env("RATE_LIMIT_BURST", 20) whitelist: array = @env("RATE_LIMIT_WHITELIST", []) } # 5. Input validation validation: object = { enabled: boolean = @env("VALIDATION_ENABLED", true) max_request_size: string = @env("MAX_REQUEST_SIZE", "10MB") allowed_file_types: array = @env("ALLOWED_FILE_TYPES", [ "jpg" "jpeg" "png" "pdf" ]) } }

6. Secure headers

headers: object = { security: object = { x_frame_options: string = "DENY" x_content_type_options: string = "nosniff" x_xss_protection: string = "1; mode=block" strict_transport_security: string = "max-age=31536000; includeSubDomains" content_security_policy: string = "default-src 'self'" } }

🎯 Performance Best Practices

Java Performance Configuration

@TuskConfig
public class PerformanceBestPractices {
    
    // Connection pooling configuration
    public void configureConnectionPool(DatabaseConfig config) {
        // Calculate optimal pool size based on system resources
        int cpuCores = Runtime.getRuntime().availableProcessors();
        int optimalPoolSize = cpuCores * 2 + 1;
        
        config.setMaxConnections(Math.min(optimalPoolSize, 100));
        config.setConnectionTimeout(30);
    }
    
    // Cache configuration optimization
    public void optimizeCacheConfiguration(CacheConfig config) {
        // Set appropriate TTL based on data volatility
        config.setDefaultTtl(300); // 5 minutes for general data
        config.setSessionTtl(3600); // 1 hour for sessions
        
        // Configure cache size based on available memory
        long maxMemory = Runtime.getRuntime().maxMemory();
        int maxCacheSize = (int) (maxMemory / (1024  1024  10)); // 10MB per entry
        config.setMaxSize(Math.min(maxCacheSize, 10000));
    }
    
    // Thread pool configuration
    public void configureThreadPool(ThreadPoolConfig config) {
        int cpuCores = Runtime.getRuntime().availableProcessors();
        
        config.setCorePoolSize(cpuCores);
        config.setMaximumPoolSize(cpuCores * 2);
        config.setKeepAliveTime(60);
        config.setQueueCapacity(1000);
    }
}

@TuskConfig public class ThreadPoolConfig { private int corePoolSize; private int maximumPoolSize; private int keepAliveTime; private int queueCapacity; // Getters and setters public int getCorePoolSize() { return corePoolSize; } public void setCorePoolSize(int corePoolSize) { this.corePoolSize = corePoolSize; } public int getMaximumPoolSize() { return maximumPoolSize; } public void setMaximumPoolSize(int maximumPoolSize) { this.maximumPoolSize = maximumPoolSize; } public int getKeepAliveTime() { return keepAliveTime; } public void setKeepAliveTime(int keepAliveTime) { this.keepAliveTime = keepAliveTime; } public int getQueueCapacity() { return queueCapacity; } public void setQueueCapacity(int queueCapacity) { this.queueCapacity = queueCapacity; } }

TuskLang Performance Configuration

Performance optimization in TuskLang

1. Connection pooling optimization

database: object = { pool: object = { # Calculate based on CPU cores min_connections: number = @max(5, @cpu.cores) max_connections: number = @min(100, @cpu.cores * 2 + 1) idle_timeout: number = 300 connection_timeout: number = 30 leak_detection_threshold: number = 60 } }

2. Cache optimization

cache: object = { # Memory-based cache sizing max_size: number = @min(10000, @memory.available / (1024 1024 10)) default_ttl: number = 300 session_ttl: number = 3600 # Cache eviction policy eviction_policy: string = "LRU" cleanup_interval: number = 300 }

3. Thread pool optimization

thread_pool: object = { core_size: number = @cpu.cores max_size: number = @cpu.cores * 2 keep_alive: number = 60 queue_capacity: number = 1000 }

4. Async processing

async: object = { enabled: boolean = true max_concurrent: number = @cpu.cores * 4 timeout: number = 30 retry_attempts: number = 3 }

5. Database query optimization

queries: object = { timeout: number = 30 max_rows: number = 10000 enable_prepared_statements: boolean = true connection_pool_monitoring: boolean = true }

🎯 Best Practices Summary

Configuration Guidelines

1. Use proper annotations for validation and documentation 2. Implement comprehensive validation for all configurations 3. Organize configurations by environment and purpose 4. Use environment variables for sensitive data 5. Implement security best practices for all configurations 6. Optimize performance based on system resources 7. Document all configurations thoroughly 8. Test configurations in all environments 9. Use version control for configuration management 10. Monitor configuration usage and performance

Code Quality Guidelines

1. Follow Java naming conventions for configuration classes 2. Use builder patterns for complex configurations 3. Implement proper error handling for configuration loading 4. Use type safety throughout configuration classes 5. Provide meaningful default values where appropriate 6. Validate configurations at startup 7. Log configuration changes for audit purposes 8. Use dependency injection for configuration management 9. Implement configuration hot-reloading where appropriate 10. Test configuration edge cases thoroughly

---

Ready to master TuskLang best practices with Java power? Following these guidelines ensures robust, maintainable, and secure applications. We don't bow to any king - especially not poor practices!