рдирдорд╕реНрддреЗ,
рдЕрдм рддрдХ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдПрдкреАрдЖрдИ (1.0.0.CR4) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╡рд░реНрдЯреЗрдХреНрд╕ рдХреЗрд╡рд▓ рдореБрдЭрд╕реЗ рдЫрд┐рдкрд╛ рд╣реБрдЖ рдерд╛ред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдПрдХ рд╕рддреНрд░ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреАрдЖрдИ рдХрд╛ рдкрд░реНрджрд╛рдлрд╛рд╢ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕реЗ рддрдм рддрдХ рдЦреБрд▓рд╛ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдЗрд╕ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЧреНрд░рд╛рд╣рдХ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред
рдореИрдВ рдЬреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдирд┐рдореНрди рдПрдкреАрдЖрдИ рд╣реИ:
public Stage.Session openSession() throws ExecutionException, InterruptedException {
if (session != null && session.isOpen()) {
session.close();
}
Stage.Session newSession = sessionFactory.openSession();
this.session = newSession;
return newSession ;
}
рдФрд░ рдореЗрд░реЗ рдЬреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рдореЗрдВ:
Stage.Session session = deviceRepository.openSession();
рдЬрдм рдореИрдВ рдХреЛрдб рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ:
This needs to be run on the Vert.x event loop
рдореИрдВрдиреЗ рдХреЛрдб рдХреЛ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рджреЛрдмрд╛рд░рд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдЪрд▓рд╛рдиреЗ рдореЗрдВ рд╕рдлрд▓ рдирд╣реАрдВ рд╣реБрдЖред
рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдЕрдкрдиреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП?
рдзрдиреНрдпрд╡рд╛рджред
рдирдорд╕реНрддреЗ,
рд╕рддреНрд░ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдереНрд░реЗрдб-рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛рдПрдБ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдбреАрдмрдЧ рдХрд░рдирд╛ рдХрдард┐рди рд╣реИред рд╕рд╛рде рд╣реА, рдЬрдм рдХреЛрдИ рдирдпрд╛ рд╕рддреНрд░ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╡рд╣ Vert.x рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдЙрд╕реА рд╕рдВрджрд░реНрдн рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдЖрдорддреМрд░ рдкрд░ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рд░рд┐рдПрдХреНрдЯрд┐рд╡ рджреНрд╡рд╛рд░рд╛ рдЗрд╕рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдХреЛрдИ SessionFactory#withTransaction
рдФрд░ SessionFactory#withSession
ред
рдЖрдкрдХреЗ рдкрд░реАрдХреНрд╖рдг рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЬреБрдиреАрдЯ рдереНрд░реЗрдб рдореЗрдВ рдЪрд▓рддреЗ рд╣реИрдВ, рди рдХрд┐ Vert.x рдореЗрдВред
JUnit 4 рдореЗрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдПрдХ рдирд┐рдпрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реИ io.vertx:vertx-unit:4.0.3
:
<strong i="13">@Rule</strong>
public RunTestOnContext vertxContextRule = new RunTestOnContext();
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рдЖрдкрдХреЛ рдпрд╣ рднреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╕рддреНрд░ рдирд┐рдпрдо рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЙрд╕реА Vert.x рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдПрдХ рдХрд╕реНрдЯрдо VertxInstance рд╕реЗрд╡рд╛ рдмрдирд╛рдирд╛ рд╣реИ ред
рдпрд╣ рд╕реЗрд╡рд╛ рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдХреЛ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рд╕рддреНрд░ рдмрдирд╛рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА Vert.x рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
рдпрджрд┐ рдЖрдк рд╕рддреНрд░ рдлреИрдХреНрдЯреНрд░реА рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣рд╛рдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
Configuration configuration = new Configuration();
StandardServiceRegistryBuilder builder = new ReactiveServiceRegistryBuilder()
.addService( VertxInstance.class, (VertxInstance) () -> getMyVertxInstance())
.applySettings( configuration.getProperties() );
StandardServiceRegistry registry = builder.build();
SessionFactory sessionFactory = configuration.buildSessionFactory( registry );
рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдк рдЗрд╕реЗ JDK рдХреЗ
org.hibernate.reactive.vertx.VertxInstance
рдирд╛рдо рдХреА рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВ
/META-INF/services/
VertxInstance
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд░реНрдЧ рдХрд╛ рдкрде рд╣реЛрдЧрд╛:
org.myproject.MyVertxProvider
рдЕрдм рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рд░рд┐рдПрдХреНрдЯрд┐рд╡ MyVertxProvider
рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЙрд▓ рдХрд░реЗрдЧрд╛ рдЬрдм рдПрдХ Vert.x рдЙрджрд╛рд╣рд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдФрд░ рдпрджрд┐ рдЖрдкрдХрд╛ рдХреЛрдб рдЙрд╕реА Vert.x рд╕рдВрджрд░реНрдн рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ, рддреЛ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдкрд░реАрдХреНрд╖рдгреЛрдВ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдирд╛, рдЙрдиреНрд╣реЗрдВ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдпрд╣ рд╣реЛрдЧрд╛:
<strong i="41">@Rule</strong>
public RunTestOnContext vertxContextRule = new RunTestOnContext();
...
Configuration configuration = new Configuration();
StandardServiceRegistryBuilder builder = new ReactiveServiceRegistryBuilder()
.addService( VertxInstance.class, (VertxInstance) () -> vertxContextRule.vertx() )
.applySettings( configuration.getProperties() );
SessionFactory sessionFactory = configuration.buildSessionFactory( builder.build() );
рдпрджрд┐ рдЖрдк рдирд┐рдпрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рдирд┐рдореНрди рддрд░реАрдХреЗ рд╕реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ Vert.x рд╕рдВрджрд░реНрдн рдореЗрдВ рдХреЛрдб рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:
Context currentContext = Vertx.currentContext();
currentContext.runOnContext( event -> {
// Here you should be able to use the session
});
рдЖрдкрдХреЛ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдпрд╛ рдХрд╣реАрдВ рднреА рдПрдХ FAQ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛ рдХреБрдЫ рдЖрдкрдиреЗ рд▓рд┐рдЦрд╛ рд╣реИ рдЙрд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╣рд╛рдВ рдореИрдВ
@ рдбреЗрд╡рд┐рдб рдбреА рдЖрдкрдХреЗ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреА рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рджред
рдореИрдВрдиреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг/рд╡реЗрдмрд╕рд╛рдЗрдЯ рдореЗрдВ рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдЯреНрд░реИрдХ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╕реНрдпрд╛ рдмрдирд╛рдИ рд╣реИ: https://github.com/hibernate/hibernate-reactive/issues/751
рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рдмреЗрдЭрд┐рдЭрдХ рдЕрдзрд┐рдХ рдкреНрд░рд╢реНрди рдкреВрдЫреЗрдВ рдХреБрдЫ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред
рдзрдиреНрдпрд╡рд╛рджред
@DavidD рдХреНрдпрд╛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦрд┐рдд рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ JUnit 5 рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?
Context currentContext = Vertx.currentContext();
currentContext.runOnContext( event -> {
// Here you should be able to use the session
});
рд╣рд╛рдБ, рд╡рд╣ рдХреЛрдб Vert.x рд╣реИ, JUnit рдирд╣реАрдВред
рд▓реЗрдХрд┐рди t рдпрд╣рд╛рдБ JUnit 5 рдХреЗ рд▓рд┐рдП
<strong i="8">@Rule</strong>
public RunTestOnContext vertxContextRule = new RunTestOnContext();
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рд╣рд╛рдВ рдореИрдВ