List of usage examples for org.hibernate.jdbc AbstractReturningWork AbstractReturningWork
AbstractReturningWork
From source file:com.literatejava.hibernate.allocator.LinearBlockAllocator.java
License:Open Source License
protected long allocateBlock(final SessionImplementor session) { AbstractReturningWork<Long> work = new AbstractReturningWork<Long>() { @Override//from w ww.j a v a 2s. c o m public Long execute(Connection conn) throws SQLException { final SqlStatementLogger statementLogger = session.getFactory().getServiceRegistry() .getService(JdbcServices.class).getSqlStatementLogger(); long result; int rows; do { // The loop ensures atomicity of the // select + update even for no transaction // or read committed isolation level statementLogger.logStatement(query, FormatStyle.BASIC.getFormatter()); PreparedStatement qps = conn.prepareStatement(query); try { qps.setString(1, sequenceName); ResultSet rs = qps.executeQuery(); if (!rs.next()) { String err = "could not read a hi value - you need to populate the table: " + tableName + ", " + sequenceName; log.error(err); throw new IdentifierGenerationException(err); } result = rs.getLong(1); rs.close(); } catch (SQLException sqle) { log.error("could not read a hi value", sqle); throw sqle; } finally { qps.close(); } statementLogger.logStatement(update, FormatStyle.BASIC.getFormatter()); PreparedStatement ups = conn.prepareStatement(update); try { ups.setLong(1, result + blockSize); ups.setString(2, sequenceName); ups.setLong(3, result); rows = ups.executeUpdate(); } catch (SQLException sqle) { log.error("could not update hi value in: " + tableName, sqle); throw sqle; } finally { ups.close(); } } while (rows == 0); // success; // -- allocated a Block. // statisticsTableAccessCount++; return new Long(result); } }; // perform in an isolated Transaction. long allocated = session.getTransactionCoordinator().getTransaction().createIsolationDelegate() .delegateWork(work, true); return allocated; }
From source file:de.innovationgate.webgate.api.mysql.GaleraClusterTableGenerator.java
License:Open Source License
@Override public synchronized Serializable generate(final SessionImplementor session, Object obj) { final SqlStatementLogger statementLogger = session.getFactory().getServiceRegistry() .getService(JdbcServices.class).getSqlStatementLogger(); return optimizer.generate(new AccessCallback() { @Override/* w w w . j av a 2 s .co m*/ public IntegralDataTypeHolder getNextValue() { return session.getTransactionCoordinator().getTransaction().createIsolationDelegate() .delegateWork(new AbstractReturningWork<IntegralDataTypeHolder>() { @Override public IntegralDataTypeHolder execute(Connection connection) throws SQLException { IntegralDataTypeHolder value = IdentifierGeneratorHelper .getIntegralDataTypeHolder(identifierType.getReturnedClass()); int rows = 0; do { statementLogger.logStatement(selectQuery, FormatStyle.BASIC.getFormatter()); PreparedStatement selectPS = connection.prepareStatement(selectQuery); try { selectPS.setString(1, segmentValue); ResultSet selectRS = selectPS.executeQuery(); if (!selectRS.next()) { value.initialize(initialValue); PreparedStatement insertPS = null; try { statementLogger.logStatement(insertQuery, FormatStyle.BASIC.getFormatter()); insertPS = connection.prepareStatement(insertQuery); insertPS.setString(1, segmentValue); value.bind(insertPS, 2); insertPS.execute(); } finally { if (insertPS != null) { insertPS.close(); } } } else { value.initialize(selectRS, 1); } selectRS.close(); } catch (SQLException e) { LOG.unableToReadOrInitHiValue(e); throw e; } finally { selectPS.close(); } statementLogger.logStatement(updateQuery, FormatStyle.BASIC.getFormatter()); PreparedStatement updatePS = connection.prepareStatement(updateQuery); try { final IntegralDataTypeHolder updateValue = value.copy(); if (optimizer.applyIncrementSizeToSourceValues()) { updateValue.add(incrementSize); } else { updateValue.increment(); } updateValue.bind(updatePS, 1); value.bind(updatePS, 2); updatePS.setString(3, segmentValue); rows = updatePS.executeUpdate(); } catch (SQLException e) { // Another cluster node concurrently fetched and changed the ID. Just retry. if (e.getErrorCode() == 1213) { } else { LOG.unableToUpdateQueryHiValue(tableName, e); throw e; } } finally { updatePS.close(); } } while (rows == 0); accessCount++; return value; } }, true); } }); }
From source file:net.e6tech.elements.persist.hibernate.ModifiedTableGenerator.java
License:Apache License
@Override public Serializable generate(final SharedSessionContractImplementor session, final Object obj) { final SqlStatementLogger statementLogger = session.getFactory().getServiceRegistry() .getService(JdbcServices.class).getSqlStatementLogger(); final SessionEventListenerManager statsCollector = session.getEventListenerManager(); return optimizer.generate(new AccessCallback() { @Override/*from w ww .jav a 2s . c om*/ public IntegralDataTypeHolder getNextValue() { return session.getTransactionCoordinator().createIsolationDelegate() .delegateWork(new AbstractReturningWork<IntegralDataTypeHolder>() { @Override public IntegralDataTypeHolder execute(Connection connection) throws SQLException { final IntegralDataTypeHolder value = makeValue(); int rows; do { final PreparedStatement selectPS = prepareStatement(connection, selectQuery, statementLogger, statsCollector); try { selectPS.setString(1, segmentValue); final ResultSet selectRS = executeQuery(selectPS, statsCollector); if (!selectRS.next()) { value.initialize(initialValue); final PreparedStatement insertPS = prepareStatement(connection, insertQuery, statementLogger, statsCollector); try { LOG.tracef("binding parameter [%s] - [%s]", 1, segmentValue); insertPS.setString(1, segmentValue); value.bind(insertPS, 2); executeUpdate(insertPS, statsCollector); } finally { insertPS.close(); } } else { value.initialize(selectRS, 1); } selectRS.close(); } catch (SQLException e) { LOG.unableToReadOrInitHiValue(e); throw e; } finally { selectPS.close(); } final PreparedStatement updatePS = prepareStatement(connection, updateQuery, statementLogger, statsCollector); try { final IntegralDataTypeHolder updateValue = value.copy(); if (optimizer.applyIncrementSizeToSourceValues()) { updateValue.add(incrementSize); } else { updateValue.increment(); } updateValue.bind(updatePS, 1); value.bind(updatePS, 2); updatePS.setString(3, segmentValue); rows = executeUpdate(updatePS, statsCollector); } catch (SQLException e) { LOG.unableToUpdateQueryHiValue(renderedTableName, e); throw e; } finally { updatePS.close(); } } while (rows == 0); accessCount++; return value; } }, true); } @Override public String getTenantIdentifier() { return session.getTenantIdentifier(); } }); }
From source file:org.openremote.manager.asset.AssetStorageService.java
License:Open Source License
protected List<Asset> findAll(EntityManager em, BaseAssetQuery query) { // Use a default projection if it's missing if (query.select == null) query.select = new Select(); if (query.select.include == null) query.select.include = ALL_EXCEPT_PATH_AND_ATTRIBUTES; if (query.select.access == null) query.select.access = PRIVATE_READ; // Default to order by creation date if the query may return multiple results if (query.orderBy == null && query.ids == null) query.orderBy = new OrderBy(OrderBy.Property.CREATED_ON); PreparedAssetQuery querySql = buildQuery(query); return em.unwrap(Session.class).doReturningWork(new AbstractReturningWork<List<Asset>>() { @Override/*www. ja va2s . c o m*/ public List<Asset> execute(Connection connection) throws SQLException { LOG.fine("Executing: " + querySql.querySql); try (PreparedStatement st = connection.prepareStatement(querySql.querySql)) { querySql.apply(st); try (ResultSet rs = st.executeQuery()) { List<Asset> result = new ArrayList<>(); if (query.calendarEventActive != null) { while (rs.next()) { Asset asset = mapResultTuple(query, rs); if (calendarEventPredicateMatches(query.calendarEventActive, asset)) { result.add(asset); } } } else { while (rs.next()) { result.add(mapResultTuple(query, rs)); } } return result; } } } }); }
From source file:org.openremote.manager.server.asset.AssetStorageService.java
License:Open Source License
protected List<ServerAsset> findAll(EntityManager em, AssetQuery query) { StringBuilder sb = new StringBuilder(); sb.append(buildSelectString(query, false)); sb.append(buildFromString(query));//from w w w. java 2 s . com Pair<String, List<ParameterBinder>> whereClause = buildWhereClause(query); sb.append(whereClause.key); sb.append(buildOrderByString(query)); return em.unwrap(Session.class).doReturningWork(new AbstractReturningWork<List<ServerAsset>>() { @Override public List<ServerAsset> execute(Connection connection) throws SQLException { PreparedStatement st = connection.prepareStatement(sb.toString()); for (ParameterBinder binder : whereClause.value) { binder.accept(st); } try (ResultSet rs = st.executeQuery()) { List<ServerAsset> result = new ArrayList<>(); while (rs.next()) { result.add(mapResultTuple(query, rs)); } return result; } } }); }
From source file:org.openremote.manager.server.asset.AssetStorageService.java
License:Open Source License
protected List<String> findAllIdentifiersOnly(EntityManager em, AssetQuery query) { StringBuilder sb = new StringBuilder(); sb.append(buildSelectString(query, true)); sb.append(buildFromString(query));/* w ww .ja va 2 s . co m*/ Pair<String, List<ParameterBinder>> whereClause = buildWhereClause(query); sb.append(whereClause.key); sb.append(buildOrderByString(query)); return em.unwrap(Session.class).doReturningWork(new AbstractReturningWork<List<String>>() { @Override public List<String> execute(Connection connection) throws SQLException { PreparedStatement st = connection.prepareStatement(sb.toString()); for (ParameterBinder binder : whereClause.value) { binder.accept(st); } try (ResultSet rs = st.executeQuery()) { List<String> result = new ArrayList<>(); while (rs.next()) { result.add(rs.getString("ID")); } return result; } } }); }