Page MenuHomec4science

HibernateFabric.java
No OneTemporary

File Metadata

Created
Tue, Jun 11, 15:02

HibernateFabric.java

/*
Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
The MySQL Connector/J is licensed under the terms of the GPLv2
<http://www.gnu.org/licenses/old-licenses/gpl-2.0.html>, like most MySQL Connectors.
There are special exceptions to the terms and conditions of the GPLv2 as it is applied to
this software, see the FOSS License Exception
<http://www.mysql.com/about/legal/licensing/foss-exception.html>.
This program is free software; you can redistribute it and/or modify it under the terms
of the GNU General Public License as published by the Free Software Foundation; version 2
of the License.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this
program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth
Floor, Boston, MA 02110-1301 USA
*/
package demo.fabric;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistryBuilder;
import com.mysql.fabric.hibernate.FabricMultiTenantConnectionProvider;
/**
* Example using Hibernate 4 Multi-tenancy in DATABASE mode with Fabric.
*/
public class HibernateFabric {
public static void main(String args[]) throws Exception {
String hostname = System.getProperty("com.mysql.fabric.testsuite.hostname");
String port = System.getProperty("com.mysql.fabric.testsuite.port");
String user = System.getProperty("com.mysql.fabric.testsuite.username");
String password = System.getProperty("com.mysql.fabric.testsuite.password");
String database = System.getProperty("com.mysql.fabric.testsuite.database");
String fabricUsername = System.getProperty("com.mysql.fabric.testsuite.fabricUsername");
String fabricPassword = System.getProperty("com.mysql.fabric.testsuite.fabricPassword");
// Using JDBC Fabric connection to create database and table
Class.forName("com.mysql.fabric.jdbc.FabricMySQLDriver");
Connection con = DriverManager.getConnection("jdbc:mysql:fabric://" + hostname + ":" + Integer.valueOf(port)
+ "/mysql?fabricServerGroup=fabric_test1_global&fabricUsername=" + fabricUsername + "&fabricPassword=" + fabricPassword, user, password);
Statement stmt = con.createStatement();
stmt.executeUpdate("create database if not exists employees");
con.close();
con = DriverManager.getConnection("jdbc:mysql:fabric://" + hostname + ":" + Integer.valueOf(port) + "/" + database
+ "?fabricServerGroup=fabric_test1_global&fabricUsername=" + fabricUsername + "&fabricPassword=" + fabricPassword, user, password);
stmt = con.createStatement();
stmt.executeUpdate("create database if not exists employees");
stmt.executeUpdate("drop table if exists employees.employees");
stmt.executeUpdate("create table employees.employees (emp_no INT PRIMARY KEY, first_name CHAR(40), last_name CHAR(40))");
stmt.close();
// we have to wait for replication ....
Thread.sleep(2000);
// Using Hibernate
SessionFactory sf = createSessionFactory("http://" + hostname + ":" + port, user, password, fabricUsername, fabricPassword);
// add some employees
for (int i = 1; i < 11; ++i) {
int j = i;
// put a few in the other shard
if ((j % 2) == 0) {
j += 10000;
}
Session session = sf.withOptions().tenantIdentifier("" + j) // choose a db server
.openSession();
// vanilla hibernate code
session.beginTransaction();
Employee e = new Employee();
e.setId(j);
e.setFirstName("First name of employee " + j);
e.setLastName("Smith" + j);
session.save(e);
session.getTransaction().commit();
session.close();
}
// clean up
con.createStatement().executeUpdate("drop table employees.employees");
con.close();
}
/**
* 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());
}
}

Event Timeline