@NotNull @Override public BaseFacade openFacade(@NotNull final String connectionString, @Nullable final Properties connectionProperties, final int connectionsLimit, final boolean connect) { boolean ok = false; final IntegralIntermediateFacade intermediateFacade = myIntermediateProvider.openFacade(connectionString, connectionProperties, connectionsLimit); try { final BaseFacade facade = new BaseFacade(intermediateFacade); if (connect) { facade.connect(); } ok = true; return facade; } finally { if (!ok) { intermediateFacade.disconnect(); } } }
@Override public <R> R inTransaction(final InTransaction<R> operation) { return inSession(new InSession<R>() { @Override public R run(@NotNull final DBSession session) { return session.inTransaction(operation); } }); }
@Override public <R> R inSession(final InSession<R> operation) { if (operation == null) throw new IllegalArgumentException("The operation is null"); if (!isConnected()) throw new DBIsNotConnected("Facade is not connected."); final R result; final IntegralIntermediateSession interSession = instantiateIntermediateSession(); try { final BaseSession session = new BaseSession(interSession); result = operation.run(session); session.closeRunners(); } finally { interSession.close(); } return result; }
@Test public void connect_directly() { final BaseRdbmsProvider provider = new BaseRdbmsProvider(ourUnknownDatabaseProvider); final BaseFacade facade = provider.openFacade(H2_CONNECTION_STRING, null, 1, true); assertThat(facade.isConnected()).isTrue(); facade.disconnect(); assertThat(facade.isConnected()).isFalse(); }
@NotNull protected BaseFacade prepareBaseFacade(@NotNull final JdbcIntermediateFacade jdbcFacade) { return new BaseFacade(jdbcFacade); /* AdaptIntermediateFacade intermediateFacade = new AdaptIntermediateFacade(jdbcFacade); return new BaseFacade(intermediateFacade); */ }
private <X> X query(final SqlQuery<X> query) { return myFacade.inTransaction(new InTransaction<X>() { @Override public X run(@NotNull final DBTransaction tran) { return tran.query(query).run(); } }); }
@Before public void connect() { myJdbcFacade = ourUnknownDatabaseProvider.openFacade(H2_CONNECTION_STRING, null, 1); myFacade = prepareBaseFacade(myJdbcFacade); myFacade.connect(); }
@Test public void leaseSession_basic() { final DBLeasedSession session = myFacade.leaseSession(); assertThat(session.isClosed()).isFalse(); session.ping(); session.close(); assertThat(session.isClosed()).isTrue(); }
@Override public synchronized DBLeasedSession leaseSession() { final IntegralIntermediateSession interSession = instantiateIntermediateSession(); final BaseSession baseSession = new BaseSession(interSession); return new DBLeasedSessionWrapper(baseSession); }
@After public void disconnect() { myFacade.disconnect(); }
@Test public void get_intermediate_service() { IntegralIntermediateFacade intermediateSession = myFacade.getSpecificService( IntegralIntermediateFacade.class, ImplementationAccessibleService.Names.INTERMEDIATE_SERVICE); assertThat(intermediateSession).isInstanceOf(JdbcIntermediateFacade.class); }
@Test public void connect_remotely() { final BaseRdbmsProvider provider = new BaseRdbmsProvider(ourUnknownDatabaseProvider); final BaseFacade facade = provider.openFacade(H2_CONNECTION_STRING, null, 1, true); assertThat(facade.isConnected()).isTrue(); facade.disconnect(); assertThat(facade.isConnected()).isFalse(); }
@NotNull protected BaseFacade prepareBaseFacade(@NotNull final JdbcIntermediateFacade jdbcFacade) { AdaptIntermediateFacade intermediateFacade = new AdaptIntermediateFacade(jdbcFacade); return new BaseFacade(intermediateFacade); }
@Test public void char_single_2() { myFacade.inTransaction(new InTransactionNoResult() { @Override public void run(@NotNull final DBTransaction tran) { Character c = tran.query("select 'MN'", singleOf(Character.class)).run(); assertThat(c).isEqualTo('M'); } }); }
@Test public void isInTransaction_begin_commit() { final DBLeasedSession session = myFacade.leaseSession(); try { assertThat(session.isInTransaction()).isFalse(); session.beginTransaction(); assertThat(session.isInTransaction()).isTrue(); session.commit(); assertThat(session.isInTransaction()).isFalse(); } finally { session.close(); } }
@Override public void inTransaction(final InTransactionNoResult operation) { inSession(new InSessionNoResult() { @Override public void run(@NotNull final DBSession session) { session.inTransaction(operation); } }); }
@NotNull @Override public synchronized DBFacade openFacade(@NotNull final String connectionString, @Nullable final Properties connectionProperties, final int connectionsLimit, final boolean connect) { if (myIntermediateProvider != null) { boolean ok = false; final IntegralIntermediateFacade intermediateFacade = myIntermediateProvider.openFacade(connectionString, connectionProperties, connectionsLimit); try { final BaseFacade facade = new BaseFacade(intermediateFacade); if (connect) { facade.connect(); } ok = true; return facade; } finally { if (!ok) { intermediateFacade.disconnect(); } } } else { throw new IllegalStateException("The federated provider is not initialized yet"); } } }
@Override public void inSession(final InSessionNoResult operation) { if (operation == null) return; if (!isConnected()) throw new DBIsNotConnected("Facade is not connected."); final IntegralIntermediateSession interSession = instantiateIntermediateSession(); try { final BaseSession session = new BaseSession(interSession); operation.run(session); session.closeRunners(); } finally { interSession.close(); } }
@Test public void char_single_1() { myFacade.inTransaction(new InTransactionNoResult() { @Override public void run(@NotNull final DBTransaction tran) { char c = tran.query("select 'M'", singleOf(Character.class)).run(); assertThat(c).isEqualTo('M'); } }); }
@Test public void isInTransaction_begin_rollback() { final DBLeasedSession session = myFacade.leaseSession(); try { assertThat(session.isInTransaction()).isFalse(); session.beginTransaction(); assertThat(session.isInTransaction()).isTrue(); session.rollback(); assertThat(session.isInTransaction()).isFalse(); } finally { session.close(); } }