/** * Invoke JDBC method. * * @param target target object */ @SneakyThrows public void invoke(final Object target) { method.invoke(target, arguments); } }
/** * Invoke method. * * @param target target object */ @SneakyThrows void invoke(final Object target) { method.invoke(target, arguments); } }
/** * Invoke method. * * @param target target object */ @SneakyThrows void invoke(final Object target) { method.invoke(target, arguments); } }
@SneakyThrows private static Constructor<JdbcXAConnection> getH2JdbcXAConstructor() { Constructor<JdbcXAConnection> result = JdbcXAConnection.class.getDeclaredConstructor(JdbcDataSourceFactory.class, Integer.TYPE, JdbcConnection.class); result.setAccessible(true); return result; }
@SneakyThrows private static Method getNextIdMethod() { Method result = TraceObject.class.getDeclaredMethod("getNextId", Integer.TYPE); result.setAccessible(true); return result; }
@SneakyThrows private Object newClassInstance(final String className) { return Strings.isNullOrEmpty(className) ? null : Class.forName(className).newInstance(); } }
@SneakyThrows @Override public XAConnection wrap(final XADataSource xaDataSource, final Connection connection) { Connection physicalConnection = connection.unwrap(JdbcConnection.class); return CONSTRUCTOR.newInstance(FACTORY, NEXT_ID.invoke(null, XA_DATA_SOURCE), physicalConnection); } }
@SneakyThrows @Override public XAConnection wrap(final XADataSource xaDataSource, final Connection connection) { Connection physicalConnection = (Connection) connection.unwrap(Class.forName("com.mysql.jdbc.Connection")); Method method = xaDataSource.getClass().getDeclaredMethod("wrapConnection", Connection.class); method.setAccessible(true); return (XAConnection) method.invoke(xaDataSource, physicalConnection); } }
@Override @SneakyThrows public ExtractorRuleDefinitionEntity load(final String extractorRuleDefinitionFile) { InputStream inputStream = ExtractorRuleDefinitionEntityLoader.class.getClassLoader().getResourceAsStream(extractorRuleDefinitionFile); Preconditions.checkNotNull(inputStream, "Cannot load extractor rule definition file :%s, ", extractorRuleDefinitionFile); return (ExtractorRuleDefinitionEntity) JAXBContext.newInstance(ExtractorRuleDefinitionEntity.class).createUnmarshaller().unmarshal(inputStream); } }
@SneakyThrows protected InputStream getInputStream(final Object value) { ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream); objectOutputStream.writeObject(value); objectOutputStream.flush(); objectOutputStream.close(); return new ByteArrayInputStream(byteArrayOutputStream.toByteArray()); }
@Override @SneakyThrows public FillerRuleDefinitionEntity load(final String fillerRuleDefinitionFile) { InputStream inputStream = FillerRuleDefinitionEntityLoader.class.getClassLoader().getResourceAsStream(fillerRuleDefinitionFile); Preconditions.checkNotNull(inputStream, "Cannot load SQL filler rule definition file :%s, ", fillerRuleDefinitionFile); return (FillerRuleDefinitionEntity) JAXBContext.newInstance(FillerRuleDefinitionEntity.class).createUnmarshaller().unmarshal(inputStream); } }
@Override @SneakyThrows public SQLStatementRuleDefinitionEntity load(final String sqlStatementRuleDefinitionFile) { InputStream inputStream = SQLStatementRuleDefinitionEntityLoader.class.getClassLoader().getResourceAsStream(sqlStatementRuleDefinitionFile); Preconditions.checkNotNull(inputStream, "Cannot load SQL statement rule definition file :%s, ", sqlStatementRuleDefinitionFile); return (SQLStatementRuleDefinitionEntity) JAXBContext.newInstance(SQLStatementRuleDefinitionEntity.class).createUnmarshaller().unmarshal(inputStream); } }
@SneakyThrows private InputStream getInputStream(final Object value) { ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream); objectOutputStream.writeObject(value); objectOutputStream.flush(); objectOutputStream.close(); return new ByteArrayInputStream(byteArrayOutputStream.toByteArray()); }
@SneakyThrows @Override public XAConnection wrap(final XADataSource xaDataSource, final Connection connection) { BaseConnection physicalConnection = (BaseConnection) connection.unwrap(Class.forName("org.postgresql.core.BaseConnection")); return new PGXAConnection(physicalConnection); } }
@SneakyThrows @Override public void begin() { xaTransactionManager.getTransactionManager().begin(); }
@Override @SneakyThrows public final Connection getConnection(final String username, final String password) { return getConnection(); }
@SneakyThrows @Override public void commit() { xaTransactionManager.getTransactionManager().commit(); }
/** * record method invocation. * * @param targetClass target class * @param methodName method name * @param argumentTypes argument types * @param arguments arguments */ @SneakyThrows public final void recordMethodInvocation(final Class<?> targetClass, final String methodName, final Class<?>[] argumentTypes, final Object[] arguments) { jdbcMethodInvocations.add(new JdbcMethodInvocation(targetClass.getMethod(methodName, argumentTypes), arguments)); }
@SneakyThrows private boolean waitTolerateTimeDifferenceIfNeed(final long currentMilliseconds) { if (lastMilliseconds <= currentMilliseconds) { return false; } long timeDifferenceMilliseconds = lastMilliseconds - currentMilliseconds; Preconditions.checkState(timeDifferenceMilliseconds < getMaxTolerateTimeDifferenceMilliseconds(), "Clock is moving backwards, last time is %d milliseconds, current time is %d milliseconds", lastMilliseconds, currentMilliseconds); Thread.sleep(timeDifferenceMilliseconds); return true; }
@SneakyThrows private static Map<String, Object> findAllGetterProperties(final Object target) { Map<String, Object> result = new LinkedHashMap<>(); for (Method each : findAllGetterMethods(target.getClass())) { String propertyName = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_CAMEL, each.getName().substring(GETTER_PREFIX.length())); if (GENERAL_CLASS_TYPE.contains(each.getReturnType()) && !SKIPPED_PROPERTY_NAMES.contains(propertyName)) { result.put(propertyName, each.invoke(target)); } } return result; }