Advertisement
Guest User

Untitled

a guest
May 2nd, 2017
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.05 KB | None | 0 0
  1. import org.hibernate.SQLQuery;
  2. import org.hibernate.Session;
  3. import org.hibernate.SessionFactory;
  4. import org.hibernate.Transaction;
  5. import org.hibernate.cfg.Configuration;
  6.  
  7. import java.math.BigInteger;
  8. import java.util.Properties;
  9. import java.util.Random;
  10. import java.util.UUID;
  11. import java.util.concurrent.ExecutorService;
  12. import java.util.concurrent.Executors;
  13.  
  14. public class UUIDTest {
  15. static SessionFactory sessionFactory ;
  16. static Random random = new Random();
  17.  
  18. static {
  19. Properties properties = new Properties();
  20. properties.put("hibernate.dialect","org.hibernate.dialect.MySQLDialect");
  21. properties.put("hibernate.connection.driver_class", "com.mysql.jdbc.Driver");
  22. properties.put("hibernate.connection.url", "jdbc:mysql://localhost:3306/flux");
  23. properties.put("hibernate.connection.username", "root");
  24. properties.put("hibernate.connection.password", "");
  25. properties.put("hibernate.current_session_context_class", "managed");
  26. properties.put("connection.provider_class", "org.hibernate.c3p0.internal.C3P0ConnectionProvider");
  27. properties.put("hibernate.c3p0.min_size", 10);
  28. properties.put("hibernate.c3p0.max_size", 100);
  29.  
  30. Configuration configuration = new Configuration().addProperties(properties);
  31. sessionFactory = configuration.buildSessionFactory();
  32. }
  33.  
  34. public static void main(String[] args) {
  35. int out = Integer.parseInt(args[0]);
  36. int end = Integer.parseInt(args[1]);
  37. System.out.println("Starting test");
  38.  
  39. ExecutorService exSvc = Executors.newFixedThreadPool(100);
  40. for (int j = 0; j < out; j++) {
  41. for (int i = 0; i < end; i++) {
  42. final int a = j;
  43. final int b = i;
  44. exSvc.submit(() -> insert(a, b));
  45. }
  46. }
  47.  
  48. // sessionFactory.close();
  49. }
  50.  
  51. public static void insert(int j, int i) {
  52. System.out.println(j+"-"+i);
  53. Session session = sessionFactory.openSession();
  54. Transaction transaction = session.getTransaction();
  55. transaction.begin();
  56.  
  57. String smId = UUID.randomUUID().toString();
  58. SQLQuery query1 = session.createSQLQuery("insert into StateMachines (id, name, version) values (:id, :name, :version);");
  59. query1.setParameter("name", "sm_name-1");
  60. query1.setParameter("version", "1");
  61. query1.setParameter("id", smId);
  62. query1.executeUpdate();
  63.  
  64. SQLQuery query2 = session.createSQLQuery("insert into States (name, version, stateMachineId, status) values (:name, :version, :smId, :status);");
  65. query2.setParameter("name", "task-1");
  66. query2.setParameter("version", 1);
  67. query2.setParameter("smId", smId);
  68. query2.setParameter("status", "initialized");
  69. query2.executeUpdate();
  70.  
  71. Long task1 = ((BigInteger) session.createSQLQuery("SELECT LAST_INSERT_ID()").uniqueResult()).longValue();
  72.  
  73. SQLQuery query3 = session.createSQLQuery("insert into States (name, version, stateMachineId, status) values (:name, :version, :smId, :status);");
  74. query3.setParameter("name", "task-2");
  75. query3.setParameter("version", 1);
  76. query3.setParameter("smId", smId);
  77. query3.setParameter("status", "initialized");
  78. query3.executeUpdate();
  79.  
  80. Long task2 = ((BigInteger) session.createSQLQuery("SELECT LAST_INSERT_ID()").uniqueResult()).longValue();
  81.  
  82. SQLQuery query4 = session.createSQLQuery("insert into Events (name, type, stateMachineInstanceId, status) values (:name, :type, :smId, :status);");
  83. query4.setParameter("name", "event-1");
  84. query4.setParameter("type", "type-1");
  85. query4.setParameter("smId", smId);
  86. query4.setParameter("status", "pending");
  87. query4.executeUpdate();
  88.  
  89. Long event1 = ((BigInteger) session.createSQLQuery("SELECT LAST_INSERT_ID()").uniqueResult()).longValue();
  90.  
  91. SQLQuery query5 = session.createSQLQuery("insert into Events (name, type, stateMachineInstanceId, status) values (:name, :type, :smId, :status);");
  92. query5.setParameter("name", "event-2");
  93. query5.setParameter("type", "type-2");
  94. query5.setParameter("smId", smId);
  95. query5.setParameter("status", "pending");
  96. query5.executeUpdate();
  97.  
  98. Long event2 = ((BigInteger) session.createSQLQuery("SELECT LAST_INSERT_ID()").uniqueResult()).longValue();
  99.  
  100. SQLQuery query6 = session.createSQLQuery("insert into AuditRecords (stateMachineInstanceId, stateId, stateStatus) values (:smId, :sId, :status);");
  101. query6.setParameter("smId", smId);
  102. query6.setParameter("sId", random.nextInt(100));
  103. query6.setParameter("status", "test-status");
  104. query6.executeUpdate();
  105.  
  106. SQLQuery query7 = session.createSQLQuery("insert into AuditRecords (stateMachineInstanceId, stateId, stateStatus) values (:smId, :sId, :status);");
  107. query7.setParameter("smId", smId);
  108. query7.setParameter("sId", random.nextInt(100));
  109. query7.setParameter("status", "test-status");
  110. query7.executeUpdate();
  111.  
  112. transaction.commit();
  113. session.close();
  114.  
  115.  
  116. // do updates
  117. Session session1 = sessionFactory.openSession();
  118. Transaction transaction1 = session1.getTransaction();
  119. transaction1.begin();
  120.  
  121. SQLQuery query12 = session1.createSQLQuery("update Events set status=:status where id=:id");
  122. query12.setString("status", "triggered");
  123. query12.setLong("id", event1);
  124. query12.executeUpdate();
  125.  
  126. SQLQuery query13 = session1.createSQLQuery("update Events set status=:status where id=:id");
  127. query13.setString("status", "triggered");
  128. query13.setLong("id", event2);
  129. query13.executeUpdate();
  130.  
  131. SQLQuery query8 = session1.createSQLQuery("update States set status=:status where id=:id");
  132. query8.setString("status", "running");
  133. query8.setLong("id", task1);
  134. query8.executeUpdate();
  135.  
  136. SQLQuery query9 = session1.createSQLQuery("update States set status=:status where id=:id");
  137. query9.setString("status", "running");
  138. query9.setLong("id", task2);
  139. query9.executeUpdate();
  140.  
  141. SQLQuery query14 = session1.createSQLQuery("insert into AuditRecords (stateMachineInstanceId, stateId, stateStatus) values (:smId, :sId, :status);");
  142. query14.setParameter("smId", smId);
  143. query14.setParameter("sId", task1);
  144. query14.setParameter("status", "running");
  145. query14.executeUpdate();
  146.  
  147. SQLQuery query15 = session1.createSQLQuery("insert into AuditRecords (stateMachineInstanceId, stateId, stateStatus) values (:smId, :sId, :status);");
  148. query15.setParameter("smId", smId);
  149. query15.setParameter("sId", task2);
  150. query15.setParameter("status", "running");
  151. query15.executeUpdate();
  152.  
  153. SQLQuery query10 = session1.createSQLQuery("update States set status=:status where id=:id");
  154. query10.setString("status", "completed");
  155. query10.setLong("id", task1);
  156. query10.executeUpdate();
  157.  
  158. SQLQuery query16 = session1.createSQLQuery("insert into AuditRecords (stateMachineInstanceId, stateId, stateStatus) values (:smId, :sId, :status);");
  159. query16.setParameter("smId", smId);
  160. query16.setParameter("sId", task1);
  161. query16.setParameter("status", "completed");
  162. query16.executeUpdate();
  163.  
  164. SQLQuery query11 = session1.createSQLQuery("update States set status=:status where id=:id");
  165. query11.setString("status", "completed");
  166. query11.setLong("id", task2);
  167. query11.executeUpdate();
  168.  
  169. SQLQuery query17 = session1.createSQLQuery("insert into AuditRecords (stateMachineInstanceId, stateId, stateStatus) values (:smId, :sId, :status);");
  170. query17.setParameter("smId", smId);
  171. query17.setParameter("sId", task2);
  172. query17.setParameter("status", "completed");
  173. query17.executeUpdate();
  174.  
  175. transaction1.commit();
  176. session1.close();
  177.  
  178. }
  179. }
  180.  
  181. ====================================================================================================
  182. Tables:
  183. ----------------------------------------------------------------------------------------------------
  184. CREATE TABLE IF NOT EXISTS `StateMachines` (
  185. `id` VARCHAR(64) NOT NULL,
  186. `name` VARCHAR(1000) NOT NULL,
  187. `version` SMALLINT UNSIGNED NOT NULL,
  188. `description` VARCHAR(10) DEFAULT NULL,
  189. `createdAt` TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP(3),
  190. `updatedAt` TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
  191. PRIMARY KEY (`id`)
  192. )
  193. ENGINE=InnoDB
  194. ROW_FORMAT=DEFAULT
  195. DEFAULT CHARSET=utf8
  196. AUTO_INCREMENT=1;
  197. ----------------------------------------------------------------------------------------------------
  198. CREATE TABLE IF NOT EXISTS `States` (
  199. `id` BIGINT NOT NULL AUTO_INCREMENT,
  200. `name` VARCHAR(255) NOT NULL,
  201. `version` SMALLINT UNSIGNED NOT NULL,
  202. `description` VARCHAR(10) DEFAULT NULL,
  203. `dependencies` VARCHAR(1000) DEFAULT NULL,
  204. `stateMachineId` VARCHAR(64) DEFAULT NULL,
  205. `onEntryHook` varchar(500) DEFAULT NULL,
  206. `task` VARCHAR(1000) DEFAULT NULL,
  207. `onExitHook` varchar(500) DEFAULT NULL,
  208. `outputEvent` varchar(500) DEFAULT NULL,
  209. `retryCount` INT UNSIGNED DEFAULT 0,
  210. `timeout` INT UNSIGNED DEFAULT NULL,
  211. `status` varchar(50) DEFAULT NULL,
  212. `rollbackStatus` varchar(50) DEFAULT NULL,
  213. `attemptedNoOfRetries` INT UNSIGNED DEFAULT 0,
  214. `createdAt` TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP(3),
  215. `updatedAt` TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
  216. PRIMARY KEY (`id`),
  217. CONSTRAINT `FK_sm_states` FOREIGN KEY (`stateMachineId`) REFERENCES `StateMachines` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
  218. )
  219. ENGINE=InnoDB
  220. ROW_FORMAT=DEFAULT
  221. DEFAULT CHARSET=utf8
  222. AUTO_INCREMENT=1;
  223. ----------------------------------------------------------------------------------------------------
  224. CREATE TABLE IF NOT EXISTS `Events` (
  225. `id` BIGINT NOT NULL AUTO_INCREMENT,
  226. `name` VARCHAR(255) NOT NULL,
  227. `type` VARCHAR(100) NOT NULL,
  228. `status` VARCHAR(50) DEFAULT NULL,
  229. `stateMachineInstanceId` VARCHAR(64) NOT NULL,
  230. `eventData` BLOB,
  231. `eventSource` VARCHAR(100) DEFAULT NULL,
  232. `createdAt` TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP(3),
  233. `updatedAt` TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
  234. PRIMARY KEY (`id`),
  235. UNIQUE KEY (`stateMachineInstanceId`, `name`),
  236. CONSTRAINT `FK_sm_events` FOREIGN KEY (`stateMachineInstanceId`) REFERENCES `StateMachines` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
  237. )
  238. ENGINE=InnoDB
  239. ROW_FORMAT=DEFAULT
  240. DEFAULT CHARSET=utf8
  241. AUTO_INCREMENT=1;
  242. ----------------------------------------------------------------------------------------------------
  243. CREATE TABLE IF NOT EXISTS `AuditRecords` (
  244. `id` BIGINT NOT NULL AUTO_INCREMENT,
  245. `stateMachineInstanceId` VARCHAR(64) NOT NULL,
  246. `stateId` BIGINT NOT NULL,
  247. `retryAttempt` INT UNSIGNED DEFAULT NULL,
  248. `stateStatus` VARCHAR(50) DEFAULT NULL,
  249. `stateRollbackStatus` VARCHAR(50) DEFAULT NULL,
  250. `errors` VARCHAR(1000) DEFAULT NULL,
  251. `createdAt` TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  252. PRIMARY KEY (`id`),
  253. KEY `index_audit_on_SM_instance_id` (`stateMachineInstanceId`)
  254. )
  255. ENGINE=InnoDB
  256. ROW_FORMAT=DEFAULT
  257. DEFAULT CHARSET=utf8
  258. AUTO_INCREMENT=1;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement