While using com.caucho:resin:4.0.66 in combination with jakarta.persistence:jakarta.persistence-api:jar:2.2.3, we run into an NPE which is due to the fact that com.caucho.amber.manager.AmberPersistenceProvider implements the newly defined getProviderUtil() method on the javax.persistence.spi.PersistenceProvider interface to return null.
This is the stacktrace of the NPE:
Caused by: java.lang.NullPointerException
at javax.persistence.Persistence$PersistenceUtilImpl.isLoaded(Persistence.java:145)
at org.apache.bval.jsr303.resolver.JPATraversableResolver.isReachable(JPATraversableResolver.java:34)
at org.apache.bval.jsr303.resolver.DefaultTraversableResolver.isReachable(DefaultTraversableResolver.java:60)
at org.apache.bval.jsr303.resolver.CachingTraversableResolver.isReachable(CachingTraversableResolver.java:82)
at org.apache.bval.jsr303.ConstraintValidation.isReachable(ConstraintValidation.java:241)
... 37 more
javax.persistence.Persistence$PersistenceUtilImpl.isLoaded (where the NPE occurs) is implemented as follows:
for (PersistenceProvider provider : providers) {
LoadState loadstate = provider.getProviderUtil().isLoadedWithoutReference(entity, attributeName); <<== LINE 145
if(loadstate == LoadState.LOADED) {
return true;
} else if (loadstate == LoadState.NOT_LOADED) {
return false;
} // else continue
}
In our case, the for-loop iterates over a single PersistenceProvider: an instance of com.caucho.amber.manager.AmberPersistenceProvider. However, its implementation of getProviderUtil() is not properly implemented and returns null:
@Override
public ProviderUtil getProviderUtil()
{
// TODO Auto-generated method stub
return null;
}
which results in the above NPE.
Has anybody else run into this issue, and if so, is there a workaround?