or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

caching-locking.mdcriteria-api.mdentity-manager.mdentity-mapping.mdindex.mdlifecycle-callbacks.mdmetamodel.mdqueries.mdspi.md

spi.mddocs/

0

# Service Provider Interface

1

2

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

3

4

## Imports

5

6

```java { .api }

7

import jakarta.persistence.spi.*;

8

```

9

10

## Capabilities

11

12

### PersistenceProvider

13

14

Interface implemented by persistence providers.

15

16

```java { .api }

17

/**

18

* Interface implemented by persistence providers

19

* @since 1.0

20

*/

21

public interface PersistenceProvider {

22

EntityManagerFactory createEntityManagerFactory(String emName, Map map);

23

EntityManagerFactory createContainerEntityManagerFactory(PersistenceUnitInfo info, Map map);

24

void generateSchema(PersistenceUnitInfo info, Map map);

25

boolean generateSchema(String persistenceUnitName, Map map);

26

ProviderUtil getProviderUtil();

27

}

28

29

/**

30

* Persistence unit information

31

* @since 1.0

32

*/

33

public interface PersistenceUnitInfo {

34

String getPersistenceUnitName();

35

String getPersistenceProviderClassName();

36

PersistenceUnitTransactionType getTransactionType();

37

DataSource getJtaDataSource();

38

DataSource getNonJtaDataSource();

39

List<String> getMappingFileNames();

40

List<URL> getJarFileUrls();

41

URL getPersistenceUnitRootUrl();

42

List<String> getManagedClassNames();

43

boolean excludeUnlistedClasses();

44

SharedCacheMode getSharedCacheMode();

45

ValidationMode getValidationMode();

46

Properties getProperties();

47

String getPersistenceXMLSchemaVersion();

48

ClassLoader getClassLoader();

49

void addTransformer(ClassTransformer transformer);

50

ClassLoader getNewTempClassLoader();

51

}

52

53

/**

54

* Provider utility methods

55

* @since 2.0

56

*/

57

public interface ProviderUtil {

58

LoadState isLoadedWithoutReference(Object entity, String attributeName);

59

LoadState isLoadedWithReference(Object entity, String attributeName);

60

LoadState isLoaded(Object entity);

61

}

62

63

/**

64

* Class transformer for bytecode enhancement

65

* @since 1.0

66

*/

67

public interface ClassTransformer {

68

byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined,

69

ProtectionDomain protectionDomain, byte[] classfileBuffer)

70

throws TransformerException;

71

}

72

73

/**

74

* Load state enumeration

75

* @since 2.0

76

*/

77

public enum LoadState {

78

LOADED,

79

NOT_LOADED,

80

UNKNOWN

81

}

82

83

/**

84

* Persistence unit transaction type

85

* @since 1.0

86

*/

87

public enum PersistenceUnitTransactionType {

88

JTA,

89

RESOURCE_LOCAL

90

}

91

92

/**

93

* Persistence provider resolver holder

94

* @since 2.0

95

*/

96

public class PersistenceProviderResolverHolder {

97

public static PersistenceProviderResolver getPersistenceProviderResolver();

98

public static void setPersistenceProviderResolver(PersistenceProviderResolver resolver);

99

}

100

101

/**

102

* Persistence provider resolver interface

103

* @since 2.0

104

*/

105

public interface PersistenceProviderResolver {

106

List<PersistenceProvider> getPersistenceProviders();

107

void clearCachedProviders();

108

}

109

110

/**

111

* Transformer exception

112

* @since 1.0

113

*/

114

public class TransformerException extends Exception {

115

public TransformerException();

116

public TransformerException(String message);

117

public TransformerException(String message, Throwable cause);

118

public TransformerException(Throwable cause);

119

}

120

```

121

122

**Usage Example:**

123

124

```java

125

// Custom persistence provider

126

public class CustomPersistenceProvider implements PersistenceProvider {

127

@Override

128

public EntityManagerFactory createEntityManagerFactory(String emName, Map map) {

129

// Implementation

130

return new CustomEntityManagerFactory();

131

}

132

133

@Override

134

public EntityManagerFactory createContainerEntityManagerFactory(

135

PersistenceUnitInfo info, Map map) {

136

// Implementation

137

return new CustomEntityManagerFactory();

138

}

139

140

@Override

141

public ProviderUtil getProviderUtil() {

142

return new CustomProviderUtil();

143

}

144

}

145

146

// Register custom provider

147

PersistenceProviderResolver resolver = new CustomPersistenceProviderResolver();

148

PersistenceProviderResolverHolder.setPersistenceProviderResolver(resolver);

149

```

150

151

[Complete documentation in index.md](./index.md)

152