Skip to content

Commit 6e2b4ed

Browse files
committed
Move BaseEntityService#getCurrentInstance() into
JPA#getCurrentBaseEntityService() because WildFly complains that EJBs shouldn't have static methods
1 parent d7070e6 commit 6e2b4ed

File tree

7 files changed

+39
-41
lines changed

7 files changed

+39
-41
lines changed

.github/workflows/jakartified.maven.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,4 @@ jobs:
3737
distribution: 'adopt'
3838
cache: maven
3939
- name: Test with Maven
40-
run: mvn verify -Dmaven.javadoc.skip=true -P ${{matrix.server}}
40+
run: mvn -B verify -Dmaven.javadoc.skip=true -P ${{matrix.server}}

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
<groupId>org.omnifaces</groupId>
1010
<artifactId>omnipersistence</artifactId>
11-
<version>0.21.J1</version>
11+
<version>0.21.J2-SNAPSHOT</version>
1212
<packaging>jar</packaging>
1313

1414
<name>OmniPersistence</name>

src/main/java/org/omnifaces/persistence/Database.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,13 @@
1616
import static java.util.logging.Level.WARNING;
1717
import static java.util.stream.Collectors.toList;
1818
import static java.util.stream.Stream.concat;
19+
import static org.omnifaces.persistence.JPA.getCurrentBaseEntityService;
1920
import static org.omnifaces.utils.Lang.startsWithOneOf;
2021

2122
import java.util.logging.Logger;
2223
import java.util.stream.Stream;
2324

2425
import jakarta.persistence.EntityManager;
25-
import jakarta.persistence.EntityManagerFactory;
26-
27-
import org.omnifaces.persistence.service.BaseEntityService;
2826

2927
/**
3028
* Enumeration of all supported databases.
@@ -43,16 +41,16 @@ public enum Database {
4341

4442
private String[] names;
4543

46-
private Database(String... aliases) {
44+
Database(String... aliases) {
4745
this.names = concat(Stream.of(name()), stream(aliases)).collect(toList()).toArray(new String[0]);
4846
}
4947

5048
public static Database of(EntityManager entityManager) {
51-
Provider provider = Provider.of(entityManager);
52-
EntityManagerFactory entityManagerFactory = entityManager.getEntityManagerFactory();
49+
var provider = Provider.of(entityManager);
50+
var entityManagerFactory = entityManager.getEntityManagerFactory();
5351

5452
try {
55-
String uppercasedDialectName = provider.getDialectName(entityManagerFactory).toUpperCase();
53+
var uppercasedDialectName = provider.getDialectName(entityManagerFactory).toUpperCase();
5654

5755
for (Database database : values()) {
5856
if (startsWithOneOf(uppercasedDialectName, database.names)) {
@@ -68,7 +66,7 @@ public static Database of(EntityManager entityManager) {
6866
}
6967

7068
public static boolean is(Database database) {
71-
return BaseEntityService.getCurrentInstance().getDatabase() == database;
69+
return getCurrentBaseEntityService().getDatabase() == database;
7270
}
7371

7472
}

src/main/java/org/omnifaces/persistence/JPA.java

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import static org.omnifaces.utils.stream.Streams.stream;
2121

2222
import java.lang.reflect.AnnotatedElement;
23-
import java.lang.reflect.Member;
2423
import java.time.LocalDate;
2524
import java.time.LocalDateTime;
2625
import java.time.LocalTime;
@@ -33,6 +32,9 @@
3332
import java.util.stream.Collectors;
3433
import java.util.stream.Stream;
3534

35+
import javax.naming.InitialContext;
36+
37+
import jakarta.ejb.SessionContext;
3638
import jakarta.enterprise.inject.Typed;
3739
import jakarta.persistence.EntityManager;
3840
import jakarta.persistence.EnumType;
@@ -54,12 +56,12 @@
5456
import jakarta.persistence.metamodel.EntityType;
5557
import jakarta.persistence.metamodel.ListAttribute;
5658
import jakarta.persistence.metamodel.MapAttribute;
57-
import jakarta.persistence.metamodel.Metamodel;
5859
import jakarta.persistence.metamodel.PluralAttribute;
5960
import jakarta.persistence.metamodel.SetAttribute;
6061
import jakarta.persistence.metamodel.SingularAttribute;
6162

6263
import org.omnifaces.persistence.criteria.Numeric;
64+
import org.omnifaces.persistence.service.BaseEntityService;
6365

6466
/**
6567
* JPA utilities.
@@ -92,7 +94,7 @@ private JPA() {
9294
* @return The currently configured bean validation mode.
9395
*/
9496
public static ValidationMode getValidationMode(EntityManager entityManager) {
95-
Object validationMode = entityManager.getEntityManagerFactory().getProperties().get(PROPERTY_VALIDATION_MODE);
97+
var validationMode = entityManager.getEntityManagerFactory().getProperties().get(PROPERTY_VALIDATION_MODE);
9698
return validationMode != null ? ValidationMode.valueOf(validationMode.toString().toUpperCase()) : ValidationMode.AUTO;
9799
}
98100

@@ -235,6 +237,23 @@ public static <K, T, V> Map<K, V> getResultMap(TypedQuery<T> typedQuery, Functio
235237

236238
// Entity utils -----------------------------------------------------------------------------------------------------------------------
237239

240+
/**
241+
* Returns the currently active {@link BaseEntityService} from the {@link SessionContext}.
242+
* @return The currently active {@link BaseEntityService} from the {@link SessionContext}.
243+
* @throws IllegalStateException if there is none, which can happen if this method is called outside EJB context,
244+
* or when currently invoked EJB service is not an instance of {@link BaseEntityService}.
245+
*/
246+
@SuppressWarnings("unchecked")
247+
public static BaseEntityService<?, ?> getCurrentBaseEntityService() {
248+
try {
249+
var ejbContext = (SessionContext) new InitialContext().lookup("java:comp/EJBContext");
250+
return (BaseEntityService<?, ?>) ejbContext.getBusinessObject(ejbContext.getInvokedBusinessInterface());
251+
}
252+
catch (Exception e) {
253+
throw new IllegalStateException(e);
254+
}
255+
}
256+
238257
/**
239258
* Returns count of all foreign key references to entity of given entity type with given ID of given identifier type.
240259
* This is particularly useful in case you intend to check if the given entity is still referenced elsewhere in database.
@@ -247,7 +266,7 @@ public static <K, T, V> Map<K, V> getResultMap(TypedQuery<T> typedQuery, Functio
247266
* @return Count of all foreign key references to entity of given entity type with given ID of given identifier type.
248267
*/
249268
public static <T, I> long countForeignKeyReferences(EntityManager entityManager, Class<T> entityType, Class<I> identifierType, I id) {
250-
Metamodel metamodel = entityManager.getMetamodel();
269+
var metamodel = entityManager.getMetamodel();
251270
SingularAttribute<? super T, I> idAttribute = metamodel.entity(entityType).getId(identifierType);
252271
return metamodel.getEntities().stream()
253272
.flatMap(entity -> getAttributesOfType(entity, entityType))
@@ -263,14 +282,14 @@ public static <T, I> long countForeignKeyReferences(EntityManager entityManager,
263282
}
264283

265284
private static <E> Class<?> getJavaType(Attribute<? super E, ?> attribute) {
266-
return (attribute instanceof PluralAttribute)
285+
return attribute instanceof PluralAttribute
267286
? ((PluralAttribute<?, ?, ?>) attribute).getElementType().getJavaType()
268287
: attribute.getJavaType();
269288
}
270289

271290
@SuppressWarnings("unchecked")
272291
private static <E, T, I> Long countReferencesTo(EntityManager entityManager, Attribute<E, ?> attribute, SingularAttribute<? super T, I> idAttribute, I id) {
273-
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
292+
var criteriaBuilder = entityManager.getCriteriaBuilder();
274293
CriteriaQuery<Long> query = criteriaBuilder.createQuery(Long.class);
275294
Root<E> root = query.from(attribute.getDeclaringType().getJavaType());
276295
Join<E, T> join;
@@ -381,10 +400,10 @@ public static boolean isEnumeratedByOrdinal(Path<?> path) {
381400
Bindable<?> model = path.getModel();
382401

383402
if (model instanceof Attribute) {
384-
Member member = ((Attribute<?, ?>) model).getJavaMember();
403+
var member = ((Attribute<?, ?>) model).getJavaMember();
385404

386405
if (member instanceof AnnotatedElement) {
387-
Enumerated enumerated = ((AnnotatedElement) member).getAnnotation(Enumerated.class);
406+
var enumerated = ((AnnotatedElement) member).getAnnotation(Enumerated.class);
388407

389408
if (enumerated != null) {
390409
return enumerated.value() == EnumType.ORDINAL;

src/main/java/org/omnifaces/persistence/Provider.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import static jakarta.persistence.metamodel.Attribute.PersistentAttributeType.MANY_TO_ONE;
1717
import static jakarta.persistence.metamodel.Attribute.PersistentAttributeType.ONE_TO_MANY;
1818
import static jakarta.persistence.metamodel.Attribute.PersistentAttributeType.ONE_TO_ONE;
19+
import static org.omnifaces.persistence.JPA.getCurrentBaseEntityService;
1920
import static org.omnifaces.utils.Collections.unmodifiableSet;
2021
import static org.omnifaces.utils.Lang.isOneOf;
2122
import static org.omnifaces.utils.reflect.Reflections.findClass;
@@ -38,7 +39,6 @@
3839
import jakarta.persistence.metamodel.Attribute;
3940

4041
import org.omnifaces.persistence.model.BaseEntity;
41-
import org.omnifaces.persistence.service.BaseEntityService;
4242

4343
/**
4444
* Enumeration of all supported JPA providers.
@@ -193,7 +193,7 @@ else if (packageName.startsWith("org.apache.openjpa.")) {
193193
}
194194

195195
public static boolean is(Provider provider) {
196-
return BaseEntityService.getCurrentInstance().getProvider() == provider;
196+
return getCurrentBaseEntityService().getProvider() == provider;
197197
}
198198

199199
public String getDialectName(EntityManagerFactory entityManagerFactory) {

src/main/java/org/omnifaces/persistence/audit/AuditListener.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import static java.util.function.Function.identity;
1717
import static java.util.stream.Collectors.toConcurrentMap;
1818
import static java.util.stream.Collectors.toSet;
19+
import static org.omnifaces.persistence.JPA.getCurrentBaseEntityService;
1920
import static org.omnifaces.utils.reflect.Reflections.invokeMethod;
2021
import static org.omnifaces.utils.stream.Streams.stream;
2122

@@ -70,7 +71,7 @@ public void afterUpdate(BaseEntity<I> entity) {
7071
@SuppressWarnings({ "unchecked", "rawtypes" })
7172
private Map<PropertyDescriptor, Map<I, Object>> getAuditableProperties(BaseEntity<I> entity) {
7273
Map auditableProperties = AUDITABLE_PROPERTIES.computeIfAbsent(entity.getClass(), k -> {
73-
BaseEntityService<?, ?> baseEntityService = BaseEntityService.getCurrentInstance();
74+
BaseEntityService<?, ?> baseEntityService = getCurrentBaseEntityService();
7475
Set<String> auditablePropertyNames = baseEntityService.getMetamodel(entity).getDeclaredAttributes().stream()
7576
.filter(a -> a.getJavaMember() instanceof Field && ((Field) a.getJavaMember()).isAnnotationPresent(Audit.class))
7677
.map(Attribute::getName)

src/main/java/org/omnifaces/persistence/service/BaseEntityService.java

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,7 @@
7575
import java.util.logging.Level;
7676
import java.util.logging.Logger;
7777

78-
import javax.naming.InitialContext;
79-
8078
import jakarta.annotation.PostConstruct;
81-
import jakarta.ejb.SessionContext;
8279
import jakarta.ejb.Stateless;
8380
import jakarta.enterprise.inject.spi.CDI;
8481
import jakarta.persistence.CacheRetrieveMode;
@@ -2134,23 +2131,6 @@ private static Criteria<?> createElementCollectionCriteria(Class<?> type, Object
21342131

21352132
// Helpers --------------------------------------------------------------------------------------------------------
21362133

2137-
/**
2138-
* Returns the currently active {@link BaseEntityService} from the {@link SessionContext}.
2139-
* @return The currently active {@link BaseEntityService} from the {@link SessionContext}.
2140-
* @throws IllegalStateException if there is none, which can happen if this method is called outside EJB context,
2141-
* or when currently invoked EJB service is not an instance of {@link BaseEntityService}.
2142-
*/
2143-
@SuppressWarnings("unchecked")
2144-
public static BaseEntityService<?, ?> getCurrentInstance() {
2145-
try {
2146-
var ejbContext = (SessionContext) new InitialContext().lookup("java:comp/EJBContext");
2147-
return (BaseEntityService<?, ?>) ejbContext.getBusinessObject(ejbContext.getInvokedBusinessInterface());
2148-
}
2149-
catch (Exception e) {
2150-
throw new IllegalStateException(e);
2151-
}
2152-
}
2153-
21542134
private static Predicate[] toArray(List<Predicate> predicates) {
21552135
return predicates.toArray(new Predicate[predicates.size()]);
21562136
}

0 commit comments

Comments
 (0)