CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-jakarta-persistence--jakarta-persistence-api

Jakarta Persistence API provides a comprehensive framework for object-relational mapping, entity lifecycle management, and database operations in Java applications

Overview
Eval results
Files

spi.mddocs/

Service Provider Interface

Complete reference for implementing custom persistence providers and integrating with Jakarta Persistence SPI.

Imports

import jakarta.persistence.spi.*;

Capabilities

PersistenceProvider

Interface implemented by persistence providers.

/**
 * Interface implemented by persistence providers
 * @since 1.0
 */
public interface PersistenceProvider {
    EntityManagerFactory createEntityManagerFactory(String emName, Map map);
    EntityManagerFactory createContainerEntityManagerFactory(PersistenceUnitInfo info, Map map);
    void generateSchema(PersistenceUnitInfo info, Map map);
    boolean generateSchema(String persistenceUnitName, Map map);
    ProviderUtil getProviderUtil();
}

/**
 * Persistence unit information
 * @since 1.0
 */
public interface PersistenceUnitInfo {
    String getPersistenceUnitName();
    String getPersistenceProviderClassName();
    PersistenceUnitTransactionType getTransactionType();
    DataSource getJtaDataSource();
    DataSource getNonJtaDataSource();
    List<String> getMappingFileNames();
    List<URL> getJarFileUrls();
    URL getPersistenceUnitRootUrl();
    List<String> getManagedClassNames();
    boolean excludeUnlistedClasses();
    SharedCacheMode getSharedCacheMode();
    ValidationMode getValidationMode();
    Properties getProperties();
    String getPersistenceXMLSchemaVersion();
    ClassLoader getClassLoader();
    void addTransformer(ClassTransformer transformer);
    ClassLoader getNewTempClassLoader();
}

/**
 * Provider utility methods
 * @since 2.0
 */
public interface ProviderUtil {
    LoadState isLoadedWithoutReference(Object entity, String attributeName);
    LoadState isLoadedWithReference(Object entity, String attributeName);
    LoadState isLoaded(Object entity);
}

/**
 * Class transformer for bytecode enhancement
 * @since 1.0
 */
public interface ClassTransformer {
    byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined,
                    ProtectionDomain protectionDomain, byte[] classfileBuffer)
        throws TransformerException;
}

/**
 * Load state enumeration
 * @since 2.0
 */
public enum LoadState {
    LOADED,
    NOT_LOADED,
    UNKNOWN
}

/**
 * Persistence unit transaction type
 * @since 1.0
 */
public enum PersistenceUnitTransactionType {
    JTA,
    RESOURCE_LOCAL
}

/**
 * Persistence provider resolver holder
 * @since 2.0
 */
public class PersistenceProviderResolverHolder {
    public static PersistenceProviderResolver getPersistenceProviderResolver();
    public static void setPersistenceProviderResolver(PersistenceProviderResolver resolver);
}

/**
 * Persistence provider resolver interface
 * @since 2.0
 */
public interface PersistenceProviderResolver {
    List<PersistenceProvider> getPersistenceProviders();
    void clearCachedProviders();
}

/**
 * Transformer exception
 * @since 1.0
 */
public class TransformerException extends Exception {
    public TransformerException();
    public TransformerException(String message);
    public TransformerException(String message, Throwable cause);
    public TransformerException(Throwable cause);
}

Usage Example:

// Custom persistence provider
public class CustomPersistenceProvider implements PersistenceProvider {
    @Override
    public EntityManagerFactory createEntityManagerFactory(String emName, Map map) {
        // Implementation
        return new CustomEntityManagerFactory();
    }

    @Override
    public EntityManagerFactory createContainerEntityManagerFactory(
            PersistenceUnitInfo info, Map map) {
        // Implementation
        return new CustomEntityManagerFactory();
    }

    @Override
    public ProviderUtil getProviderUtil() {
        return new CustomProviderUtil();
    }
}

// Register custom provider
PersistenceProviderResolver resolver = new CustomPersistenceProviderResolver();
PersistenceProviderResolverHolder.setPersistenceProviderResolver(resolver);

Complete documentation in index.md

Install with Tessl CLI

npx tessl i tessl/maven-jakarta-persistence--jakarta-persistence-api

docs

caching-locking.md

criteria-api.md

entity-manager.md

entity-mapping.md

index.md

lifecycle-callbacks.md

metamodel.md

queries.md

spi.md

tile.json