下面列出了怎么用org.hibernate.service.ServiceRegistryBuilder的API类实例代码及写法,或者点击链接到github查看源代码。
/**
* Rebuild hibernate session factory
*
*/
public static void rebuildSessionFactory() {
try {
configuration.configure();
serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
} catch (Exception e) {
System.err.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
private void initialize() {
registerEncryptors();
// Configure Hibernate and open session
ServiceRegistryBuilder serviceRegistryBuilder = new ServiceRegistryBuilder()
.applySetting("hibernate.dialect", "org.hibernate.dialect.HSQLDialect")
.applySetting("hibernate.connection.url",
"jdbc:hsqldb:mem:jasypttestdb")
.applySetting("hibernate.connection.driver_class", "org.hsqldb.jdbcDriver")
.applySetting("hibernate.connection.username", "sa")
.applySetting("hibernate.connection.password", "")
.applySetting("hibernate.connection.pool_size", "10");
ServiceRegistry serviceRegistry = serviceRegistryBuilder.buildServiceRegistry();
hbConf = new Configuration();
sessionFactory = hbConf
.addClass(User.class)
.setProperty("hibernate.dialect", "org.hibernate.dialect.HSQLDialect")
.setProperty("hibernate.connection.url",
"jdbc:hsqldb:mem:jasypttestdb")
.setProperty("hibernate.connection.driver_class", "org.hsqldb.jdbcDriver")
.setProperty("hibernate.connection.username", "sa")
.setProperty("hibernate.connection.password", "")
.setProperty("hibernate.connection.pool_size", "10")
.buildSessionFactory(serviceRegistry);
session = sessionFactory.openSession();
initDB();
generateData();
}
/**
* Configuration of session factory with Fabric integration.
*/
public static SessionFactory createSessionFactory(String fabricUrl, String username, String password, String fabricUser, String fabricPassword)
throws Exception {
// creating this here allows passing needed params to the constructor
FabricMultiTenantConnectionProvider connProvider = new FabricMultiTenantConnectionProvider(fabricUrl, "employees", "employees", username, password,
fabricUser, fabricPassword);
ServiceRegistryBuilder srb = new ServiceRegistryBuilder();
srb.addService(org.hibernate.service.jdbc.connections.spi.MultiTenantConnectionProvider.class, connProvider);
srb.applySetting("hibernate.dialect", "org.hibernate.dialect.MySQLInnoDBDialect");
Configuration config = new Configuration();
config.setProperty("hibernate.multiTenancy", "DATABASE");
config.addResource("com/mysql/fabric/demo/employee.hbm.xml");
return config.buildSessionFactory(srb.buildServiceRegistry());
}
/**
* Configuration of session factory with Fabric integration.
*/
public static SessionFactory createSessionFactory(String fabricUrl, String username, String password, String fabricUser, String fabricPassword)
throws Exception {
// creating this here allows passing needed params to the constructor
FabricMultiTenantConnectionProvider connProvider = new FabricMultiTenantConnectionProvider(fabricUrl, "employees", "employees", username, password,
fabricUser, fabricPassword);
ServiceRegistryBuilder srb = new ServiceRegistryBuilder();
srb.addService(org.hibernate.service.jdbc.connections.spi.MultiTenantConnectionProvider.class, connProvider);
srb.applySetting("hibernate.dialect", "org.hibernate.dialect.MySQLInnoDBDialect");
Configuration config = new Configuration();
config.setProperty("hibernate.multiTenancy", "DATABASE");
config.addResource("com/mysql/fabric/demo/employee.hbm.xml");
return config.buildSessionFactory(srb.buildServiceRegistry());
}
/**
* @param igniteInstanceName Name of the grid providing caches.
* @return Session factory.
*/
private SessionFactory startHibernate(String igniteInstanceName) {
Configuration cfg = hibernateConfiguration(igniteInstanceName);
ServiceRegistryBuilder builder = new ServiceRegistryBuilder();
builder.applySetting("hibernate.connection.url", CONNECTION_URL);
builder.applySetting("hibernate.show_sql", false);
return cfg.buildSessionFactory(builder.buildServiceRegistry());
}
/**
* @param accessType Cache access typr.
* @param igniteInstanceName Name of the grid providing caches.
* @return Session factory.
*/
private SessionFactory startHibernate(AccessType accessType, String igniteInstanceName) {
Configuration cfg = hibernateConfiguration(accessType, igniteInstanceName);
ServiceRegistryBuilder builder = new ServiceRegistryBuilder();
builder.applySetting("hibernate.connection.url", CONNECTION_URL);
builder.applySetting("hibernate.show_sql", false);
return cfg.buildSessionFactory(builder.buildServiceRegistry());
}
/**
* @return Hibernate registry builder.
*/
protected ServiceRegistryBuilder registryBuilder() {
ServiceRegistryBuilder builder = new ServiceRegistryBuilder();
builder.applySetting("hibernate.connection.url", CONNECTION_URL);
return builder;
}
/**
* Rebuild hibernate session factory
*
*/
public static void rebuildSessionFactory() {
try {
configuration.configure();
serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
} catch (Exception e) {
System.err.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
/**
* Constructing a new Hibernate SessionFactory for every request would cause very poor performance. However,
* Java servlets must be thread-safe, so we can't use a SessionFactory as an instance variable. This method provides
* thread-safe access to a SessionFactory, so the startup data loader and the search servlet can open Hibernate sessions
* more efficiently.
*
* @return Session
*/
public static synchronized Session openSession() {
if(sessionFactory == null) {
Configuration configuration = new Configuration();
configuration.configure("/hibernate-slave.cfg.xml");
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
}
return sessionFactory.openSession();
}
/**
* Constructing a new Hibernate SessionFactory for every request would cause very poor performance. However,
* Java servlets must be thread-safe, so we can't use a SessionFactory as an instance variable. This method provides
* thread-safe access to a SessionFactory, so the startup data loader and the search servlet can open Hibernate sessions
* more efficiently.
*
* @return Session
*/
public static synchronized Session openSession() {
if(sessionFactory == null) {
Configuration configuration = new Configuration();
configuration.configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
}
return sessionFactory.openSession();
}
/**
* Constructing a new Hibernate SessionFactory for every request would cause very poor performance. However,
* Java servlets must be thread-safe, so we can't use a SessionFactory as an instance variable. This method provides
* thread-safe access to a SessionFactory, so the startup data loader and the search servlet can open Hibernate sessions
* more efficiently.
*
* @return Session
*/
public static synchronized Session openSession() {
if(sessionFactory == null) {
Configuration configuration = new Configuration();
configuration.configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
}
return sessionFactory.openSession();
}
/**
* Constructing a new Hibernate SessionFactory for every request would cause very poor performance. However,
* Java servlets must be thread-safe, so we can't use a SessionFactory as an instance variable. This method provides
* thread-safe access to a SessionFactory, so the startup data loader and the search servlet can open Hibernate sessions
* more efficiently.
*
* @return Session
*/
public static synchronized Session openSession() {
if(sessionFactory == null) {
Configuration configuration = new Configuration();
configuration.configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
}
return sessionFactory.openSession();
}
/**
* Constructing a new Hibernate SessionFactory for every request would cause very poor performance. However,
* Java servlets must be thread-safe, so we can't use a SessionFactory as an instance variable. This method provides
* thread-safe access to a SessionFactory, so the startup data loader and the search servlet can open Hibernate sessions
* more efficiently.
*
* @return Session
*/
public static synchronized Session openSession() {
if(sessionFactory == null) {
Configuration configuration = new Configuration();
configuration.configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
}
return sessionFactory.openSession();
}
/**
* Constructing a new Hibernate SessionFactory for every request would cause very poor performance. However,
* Java servlets must be thread-safe, so we can't use a SessionFactory as an instance variable. This method provides
* thread-safe access to a SessionFactory, so the startup data loader and the search servlet can open Hibernate sessions
* more efficiently.
*
* @return Session
*/
public static synchronized Session openSession() {
if(sessionFactory == null) {
Configuration configuration = new Configuration();
configuration.configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
}
return sessionFactory.openSession();
}
/**
* Constructing a new Hibernate SessionFactory for every request would cause very poor performance. However,
* Java servlets must be thread-safe, so we can't use a SessionFactory as an instance variable. This method provides
* thread-safe access to a SessionFactory, so the startup data loader and the search servlet can open Hibernate sessions
* more efficiently.
*
* @return Session
*/
public static synchronized Session openSession() {
if(sessionFactory == null) {
Configuration configuration = new Configuration();
configuration.configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
}
return sessionFactory.openSession();
}
/**
* Constructing a new Hibernate SessionFactory for every request would cause very poor performance. However,
* Java servlets must be thread-safe, so we can't use a SessionFactory as an instance variable. This method provides
* thread-safe access to a SessionFactory, so the startup data loader and the search servlet can open Hibernate sessions
* more efficiently.
*
* @return Session
*/
public static synchronized Session openSession() {
if(sessionFactory == null) {
Configuration configuration = new Configuration();
configuration.configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
}
return sessionFactory.openSession();
}
/**
* Constructing a new Hibernate SessionFactory for every request would cause very poor performance. However,
* Java servlets must be thread-safe, so we can't use a SessionFactory as an instance variable. This method provides
* thread-safe access to a SessionFactory, so the startup data loader and the search servlet can open Hibernate sessions
* more efficiently.
*
* @return Session
*/
public static synchronized Session openSession() {
if(sessionFactory == null) {
Configuration configuration = new Configuration();
configuration.configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
}
return sessionFactory.openSession();
}
/**
* Constructing a new Hibernate SessionFactory for every request would cause very poor performance. However,
* Java servlets must be thread-safe, so we can't use a SessionFactory as an instance variable. This method provides
* thread-safe access to a SessionFactory, so the startup data loader and the search servlet can open Hibernate sessions
* more efficiently.
*
* @return Session
*/
public static synchronized Session openSession() {
if(sessionFactory == null) {
Configuration configuration = new Configuration();
configuration.configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
}
return sessionFactory.openSession();
}
/**
* The @GET annotation causes this method to be invoked whenever an HTTP GET request is received for
* the registered URL.
*/
@GET
public App getAppData( @PathParam("appId") Long appId ) {
// Initialize Hibernate
Configuration configuration = new Configuration();
configuration.configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);
Session session = sessionFactory.openSession();
session.beginTransaction();
// Fetch an App for the given ID, using eager fetching. The conversion to JSON happens after the
// Hibernate Session is closed... so if lazy fetching were used, then the JSON converter would fail
// when trying to access associated objects.
Criteria criteria = session.createCriteria(App.class);
criteria.add( Restrictions.eq("id", appId) );
criteria.setFetchMode("supportedDevices", FetchMode.SELECT);
criteria.setFetchMode("customerReviews", FetchMode.SELECT);
App app = (App) criteria.uniqueResult();
// Cleanup Hibernate
session.getTransaction().commit();
session.clear();
session.close();
sessionFactory.close();
return app;
}
/**
* Constructing a new Hibernate SessionFactory for every request would cause very poor performance. However,
* Java servlets must be thread-safe, so we can't use a SessionFactory as an instance variable. This method provides
* thread-safe access to a SessionFactory, so the startup data loader and the search servlet can open Hibernate sessions
* more efficiently.
*
* @return Session
*/
public static synchronized Session openSession() {
if(sessionFactory == null) {
Configuration configuration = new Configuration();
configuration.configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
}
return sessionFactory.openSession();
}
private static SessionFactory buildSessionFactory() {
if (HibernateUtil.isActive()) {
final Configuration configuration = new Configuration();
configuration.configure("hibernate.cfg.xml");
final ServiceRegistryBuilder serviceRegistryBuilder = new ServiceRegistryBuilder()
.applySettings(configuration.getProperties());
final SessionFactory sessionFactory = configuration
.buildSessionFactory(serviceRegistryBuilder.buildServiceRegistry());
return sessionFactory;
}
return null;
}
public SessionFactory buildSessionFactory() {
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();
return cfg.buildSessionFactory(serviceRegistry);
}
/** {@inheritDoc} */
@Nullable @Override protected ServiceRegistryBuilder registryBuilder() {
ServiceRegistryBuilder builder = new ServiceRegistryBuilder();
DatasourceConnectionProviderImpl connProvider = new DatasourceConnectionProviderImpl();
BasicManagedDataSource dataSrc = new BasicManagedDataSource(); // JTA-aware data source.
dataSrc.setTransactionManager(jotm.getTransactionManager());
dataSrc.setDefaultAutoCommit(false);
JdbcDataSource h2DataSrc = new JdbcDataSource();
h2DataSrc.setURL(CONNECTION_URL);
dataSrc.setXaDataSourceInstance(h2DataSrc);
connProvider.setDataSource(dataSrc);
connProvider.configure(Collections.emptyMap());
builder.addService(ConnectionProvider.class, connProvider);
builder.addService(JtaPlatform.class, new TestJtaPlatform());
builder.addService(TransactionFactory.class, new JtaTransactionFactory());
return builder;
}
/**
* Starts Hibernate.
*
* @param accessType Cache access type.
* @param igniteInstanceName Ignite instance name.
* @return Session factory.
*/
private SessionFactory startHibernate(AccessType accessType, String igniteInstanceName) {
Configuration cfg = hibernateConfiguration(accessType, igniteInstanceName);
ServiceRegistryBuilder builder = registryBuilder();
builder.applySetting("hibernate.show_sql", false);
return cfg.buildSessionFactory(builder.buildServiceRegistry());
}
/**
* @param igniteInstanceName Name of the grid providing caches.
* @return Session factory.
*/
SessionFactory startHibernate(String igniteInstanceName) {
log.info("Start hibernate on node: " + igniteInstanceName);
Configuration cfg = hibernateConfiguration(igniteInstanceName);
ServiceRegistryBuilder builder = new ServiceRegistryBuilder();
builder.applySetting("hibernate.connection.url", CONNECTION_URL);
return cfg.buildSessionFactory(builder.buildServiceRegistry());
}