HHH-17347 Support for JDK which do not support JFR events
This commit is contained in:
parent
16eecea9d0
commit
1b2be49045
|
@ -18,7 +18,7 @@ org.gradle.caching=true
|
||||||
# but it won't find it and will fail.
|
# but it won't find it and will fail.
|
||||||
# It's just a JRE, so it's perfectly normal that the JDK is not present;
|
# It's just a JRE, so it's perfectly normal that the JDK is not present;
|
||||||
# the JRE is under /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.265.b01-1.fc32.x86_64/jre
|
# the JRE is under /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.265.b01-1.fc32.x86_64/jre
|
||||||
org.gradle.java.installations.auto-detect=false
|
org.gradle.java.installations.auto-detect=true
|
||||||
# We can't rely on Gradle's auto-download of JDKs as it doesn't support EA releases.
|
# We can't rely on Gradle's auto-download of JDKs as it doesn't support EA releases.
|
||||||
# See https://github.com/gradle/gradle/blob/fc7ea24f3c525d8d12a4346eb0f15976a6be9414/subprojects/platform-jvm/src/main/java/org/gradle/jvm/toolchain/install/internal/AdoptOpenJdkRemoteBinary.java#L114
|
# See https://github.com/gradle/gradle/blob/fc7ea24f3c525d8d12a4346eb0f15976a6be9414/subprojects/platform-jvm/src/main/java/org/gradle/jvm/toolchain/install/internal/AdoptOpenJdkRemoteBinary.java#L114
|
||||||
org.gradle.java.installations.auto-download=false
|
org.gradle.java.installations.auto-download=false
|
||||||
|
|
|
@ -16,12 +16,9 @@ dependencies {
|
||||||
testImplementation testLibs.jfrUnit
|
testImplementation testLibs.jfrUnit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
test {
|
||||||
// JfrUnit requires JDJ 17
|
//Testing JFR events require JDK > 16
|
||||||
compileTestJava.onlyIf{
|
javaLauncher = javaToolchains.launcherFor {
|
||||||
jdkVersions.test.release.asInt() >= 17 && jdkVersions.explicit
|
languageVersion = JavaLanguageVersion.of(17)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
test.onlyIf {
|
|
||||||
jdkVersions.test.release.asInt() >= 17 && jdkVersions.explicit
|
|
||||||
}
|
|
|
@ -19,27 +19,34 @@ import org.hibernate.persister.collection.CollectionPersister;
|
||||||
import org.hibernate.persister.entity.EntityPersister;
|
import org.hibernate.persister.entity.EntityPersister;
|
||||||
import org.hibernate.stat.internal.StatsHelper;
|
import org.hibernate.stat.internal.StatsHelper;
|
||||||
|
|
||||||
|
import jdk.jfr.EventType;
|
||||||
|
|
||||||
import static java.util.concurrent.TimeUnit.NANOSECONDS;
|
import static java.util.concurrent.TimeUnit.NANOSECONDS;
|
||||||
|
|
||||||
|
|
||||||
@AllowNonPortable
|
@AllowNonPortable
|
||||||
public class JfrEventManager implements EventManager {
|
public class JfrEventManager implements EventManager {
|
||||||
|
|
||||||
|
private static final EventType eventType = EventType.getEventType( SessionOpenEvent.class );
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SessionOpenEvent beginSessionOpenEvent() {
|
public SessionOpenEvent beginSessionOpenEvent() {
|
||||||
final SessionOpenEvent sessionOpenEvent = new SessionOpenEvent();
|
if ( eventType.isEnabled() ) {
|
||||||
if ( sessionOpenEvent.isEnabled() ) {
|
final SessionOpenEvent sessionOpenEvent = new SessionOpenEvent();
|
||||||
sessionOpenEvent.begin();
|
sessionOpenEvent.begin();
|
||||||
|
return sessionOpenEvent;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
return sessionOpenEvent;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void completeSessionOpenEvent(
|
public void completeSessionOpenEvent(
|
||||||
HibernateEvent event,
|
HibernateEvent event,
|
||||||
SharedSessionContractImplementor session) {
|
SharedSessionContractImplementor session) {
|
||||||
final SessionOpenEvent sessionOpenEvent = (SessionOpenEvent) event;
|
if ( event != null ) {
|
||||||
if ( sessionOpenEvent.isEnabled() ) {
|
final SessionOpenEvent sessionOpenEvent = (SessionOpenEvent) event;
|
||||||
sessionOpenEvent.end();
|
sessionOpenEvent.end();
|
||||||
if ( sessionOpenEvent.shouldCommit() ) {
|
if ( sessionOpenEvent.shouldCommit() ) {
|
||||||
sessionOpenEvent.sessionIdentifier = getSessionIdentifier( session );
|
sessionOpenEvent.sessionIdentifier = getSessionIdentifier( session );
|
||||||
|
|
|
@ -30,15 +30,19 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||||
@JfrEventTest
|
@JfrEventTest
|
||||||
@DomainModel
|
@DomainModel
|
||||||
@SessionFactory
|
@SessionFactory
|
||||||
public class SessionEventTests {
|
public class SessionEventTests {
|
||||||
public JfrEvents jfrEvents = new JfrEvents();
|
public JfrEvents jfrEvents = new JfrEvents();
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@EnableEvent(SessionOpenEvent.NAME)
|
@EnableEvent(SessionOpenEvent.NAME)
|
||||||
@EnableEvent(SessionClosedEvent.NAME)
|
@EnableEvent(SessionClosedEvent.NAME)
|
||||||
public void testSessionOpenEvent(SessionFactoryScope scope) {
|
public void testSessionOpenEvent(SessionFactoryScope scope) {
|
||||||
|
jfrEvents.reset();
|
||||||
final String openedSessionIdentifier = scope.fromSession( (session) -> {
|
final String openedSessionIdentifier = scope.fromSession( (session) -> {
|
||||||
final List<RecordedEvent> events = jfrEvents.events().filter( recordedEvent -> recordedEvent.hasField("sessionIdentifier" ) ).toList();
|
final List<RecordedEvent> events = jfrEvents.events().filter( recordedEvent -> {
|
||||||
|
String eventName = recordedEvent.getEventType().getName();
|
||||||
|
return eventName.equals( SessionOpenEvent.NAME );
|
||||||
|
} ).toList();
|
||||||
assertThat( events ).hasSize( 1 );
|
assertThat( events ).hasSize( 1 );
|
||||||
final RecordedEvent event = events.get( 0 );
|
final RecordedEvent event = events.get( 0 );
|
||||||
assertThat( event.getEventType().getName() ).isEqualTo( SessionOpenEvent.NAME );
|
assertThat( event.getEventType().getName() ).isEqualTo( SessionOpenEvent.NAME );
|
||||||
|
@ -49,7 +53,10 @@ public class SessionEventTests {
|
||||||
return event.getString( "sessionIdentifier" );
|
return event.getString( "sessionIdentifier" );
|
||||||
} );
|
} );
|
||||||
|
|
||||||
final List<RecordedEvent> events = jfrEvents.events().filter( recordedEvent -> recordedEvent.hasField("sessionIdentifier" ) ).toList();
|
final List<RecordedEvent> events = jfrEvents.events().filter( recordedEvent -> {
|
||||||
|
String eventName = recordedEvent.getEventType().getName();
|
||||||
|
return eventName.equals( SessionClosedEvent.NAME );
|
||||||
|
} ).toList();
|
||||||
assertThat( events ).hasSize( 1 );
|
assertThat( events ).hasSize( 1 );
|
||||||
final RecordedEvent event = events.get( 0 );
|
final RecordedEvent event = events.get( 0 );
|
||||||
assertThat( event.getEventType().getName() ).isEqualTo( SessionClosedEvent.NAME );
|
assertThat( event.getEventType().getName() ).isEqualTo( SessionClosedEvent.NAME );
|
||||||
|
|
Loading…
Reference in New Issue