/* * Copyright 2015 JBoss Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package io.apiman.gateway.engine.impl; import io.apiman.gateway.engine.async.AsyncResultImpl; import io.apiman.gateway.engine.async.IAsyncResultHandler; import io.apiman.gateway.engine.components.jdbc.IJdbcConnection; import io.apiman.gateway.engine.components.jdbc.IJdbcResultSet; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; /** * A simple/default implementation of the {@link IJdbcConnection} interface. This * provides an implementation useful when running in a synchronous environment. It * should not be used when the Gateway is running on an async platform such as vert.x. * * @author eric.wittmann@redhat.com */ public class DefaultJdbcConnection implements IJdbcConnection { private Connection connection; /** * Constructor. * @param connection */ public DefaultJdbcConnection(Connection connection) { this.connection = connection; } /** * @see java.lang.AutoCloseable#close() */ @Override public void close() throws Exception { connection.close(); } /** * @see io.apiman.gateway.engine.components.jdbc.IJdbcConnection#isClosed() */ @Override public boolean isClosed() throws Exception { return connection.isClosed(); } /** * @see io.apiman.gateway.engine.components.jdbc.IJdbcConnection#query(io.apiman.gateway.engine.async.IAsyncResultHandler, java.lang.String, java.lang.Object[]) */ @Override public void query(IAsyncResultHandler<IJdbcResultSet> handler, String sql, Object... params) { try(PreparedStatement statement = connection.prepareStatement(sql)) { int idx = 1; for (Object param : params) { statement.setObject(idx++, param); } ResultSet resultSet = statement.executeQuery(); IJdbcResultSet rval = new DefaultJdbcResultSet(resultSet); handler.handle(AsyncResultImpl.create(rval)); } catch (Exception e) { handler.handle(AsyncResultImpl.create(e, IJdbcResultSet.class)); } } /** * @see io.apiman.gateway.engine.components.jdbc.IJdbcConnection#execute(io.apiman.gateway.engine.async.IAsyncResultHandler, java.lang.String, java.lang.Object[]) */ @Override public void execute(IAsyncResultHandler<Void> handler, String sql, Object... params) { try(PreparedStatement statement = connection.prepareStatement(sql)) { int idx = 1; for (Object param : params) { statement.setObject(idx++, param); } statement.execute(); handler.handle(AsyncResultImpl.create((Void) null, Void.class)); } catch (Exception e) { handler.handle(AsyncResultImpl.create(e, Void.class)); } } /** * @see io.apiman.gateway.engine.components.jdbc.IJdbcConnection#setAutoCommit(boolean, io.apiman.gateway.engine.async.IAsyncResultHandler) */ @Override public void setAutoCommit(boolean autoCommit, IAsyncResultHandler<Void> handler) { try { connection.setAutoCommit(autoCommit); handler.handle(AsyncResultImpl.create((Void) null, Void.class)); } catch (SQLException e) { handler.handle(AsyncResultImpl.create(e, Void.class)); } } /** * @see io.apiman.gateway.engine.components.jdbc.IJdbcConnection#commit(io.apiman.gateway.engine.async.IAsyncResultHandler) */ @Override public void commit(IAsyncResultHandler<Void> handler) { try { connection.commit(); handler.handle(AsyncResultImpl.create((Void) null, Void.class)); } catch (SQLException e) { handler.handle(AsyncResultImpl.create(e, Void.class)); } } /** * @see io.apiman.gateway.engine.components.jdbc.IJdbcConnection#rollback(io.apiman.gateway.engine.async.IAsyncResultHandler) */ @Override public void rollback(IAsyncResultHandler<Void> handler) { try { connection.rollback(); handler.handle(AsyncResultImpl.create((Void) null, Void.class)); } catch (SQLException e) { handler.handle(AsyncResultImpl.create(e, Void.class)); } } /** * @see io.apiman.gateway.engine.components.jdbc.IJdbcConnection#close(io.apiman.gateway.engine.async.IAsyncResultHandler) */ @Override public void close(IAsyncResultHandler<Void> handler) { try { connection.close(); handler.handle(AsyncResultImpl.create((Void) null, Void.class)); } catch (SQLException e) { handler.handle(AsyncResultImpl.create(e, Void.class)); } } }