Skip to content

Commit cb9e6e6

Browse files
committed
#80 replace dbname by database itself
1 parent 73b0bf7 commit cb9e6e6

File tree

5 files changed

+30
-33
lines changed

5 files changed

+30
-33
lines changed

src/main/java/com/arangodb/springframework/core/ArangoOperations.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
import com.arangodb.ArangoCursor;
2424
import com.arangodb.ArangoDB;
25+
import com.arangodb.ArangoDatabase;
2526
import com.arangodb.entity.*;
2627
import com.arangodb.model.*;
2728
import com.arangodb.springframework.core.convert.ArangoConverter;
@@ -54,7 +55,13 @@ public interface ArangoOperations {
5455
*/
5556
ArangoDBVersion getVersion() throws DataAccessException;
5657

57-
DbName getDatabaseName();
58+
/**
59+
* Returns the underlying database. The database will be created if it does not exist.
60+
*
61+
* @return the database object
62+
* @throws DataAccessException
63+
*/
64+
ArangoDatabase db() throws DataAccessException;
5865

5966
/**
6067
* Performs a database query using the given {@code query} and {@code bindVars}, then returns a new

src/main/java/com/arangodb/springframework/core/template/ArangoTemplate.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -110,14 +110,20 @@ public ArangoTemplate(final ArangoDB arango, final String database, final Arango
110110
version = null;
111111
}
112112

113-
ArangoDatabase db() {
114-
final String key = getDatabaseName().get();
113+
@Override
114+
public ArangoDatabase db() throws DataAccessException {
115+
final String key = databaseExpression != null ? databaseExpression.getValue(context, String.class)
116+
: databaseName;
115117
return databaseCache.computeIfAbsent(key, name -> {
116118
final ArangoDatabase db = arango.db(name);
119+
try {
117120
if (!db.exists()) {
118121
db.create();
119122
}
120123
return db;
124+
} catch (ArangoDBException error) {
125+
throw DataAccessUtils.translateIfNecessary(error, exceptionTranslator);
126+
}
121127
});
122128
}
123129

@@ -277,12 +283,6 @@ public ArangoDBVersion getVersion() throws DataAccessException {
277283
}
278284
}
279285

280-
@Override
281-
public DbName getDatabaseName() {
282-
return DbName.of(databaseExpression != null ? databaseExpression.getValue(context, String.class)
283-
: databaseName);
284-
}
285-
286286
@Override
287287
public <T> ArangoCursor<T> query(final String query, final Map<String, Object> bindVars,
288288
final AqlQueryOptions options, final Class<T> entityClass) throws DataAccessException {

src/main/java/com/arangodb/springframework/transaction/ArangoTransactionManager.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636

3737
/**
3838
* Transaction manager using ArangoDB stream transactions on the
39-
* {@linkplain ArangoOperations#getDatabaseName() current database} of the
39+
* {@linkplain ArangoOperations#db() current database} of the
4040
* template. A {@linkplain ArangoTransactionObject transaction object} using
4141
* a shared {@linkplain ArangoTransactionHolder holder} is used for the
4242
* {@link DefaultTransactionStatus}. Neither
@@ -79,10 +79,9 @@ public void afterPropertiesSet() {
7979
*/
8080
@Override
8181
protected ArangoTransactionObject doGetTransaction() {
82-
DbName database = operations.getDatabaseName();
83-
ArangoTransactionHolder holder = (ArangoTransactionHolder) TransactionSynchronizationManager.getResource(database);
82+
ArangoTransactionHolder holder = (ArangoTransactionHolder) TransactionSynchronizationManager.getResource(this);
8483
try {
85-
return new ArangoTransactionObject(operations.driver().db(database), getDefaultTimeout(), holder);
84+
return new ArangoTransactionObject(operations.db(), getDefaultTimeout(), holder);
8685
} catch (ArangoDBException error) {
8786
throw new TransactionSystemException("Cannot create transaction object", error);
8887
}
@@ -173,7 +172,7 @@ protected void doRollback(DefaultTransactionStatus status) throws TransactionExc
173172
@Override
174173
protected boolean isExistingTransaction(Object transaction) throws TransactionException {
175174
ArangoTransactionHolder holder = ((ArangoTransactionObject) transaction).getHolder();
176-
return holder == TransactionSynchronizationManager.getResource(operations.getDatabaseName());
175+
return holder == TransactionSynchronizationManager.getResource(this);
177176
}
178177

179178
/**
@@ -210,12 +209,12 @@ protected void prepareSynchronization(DefaultTransactionStatus status, Transacti
210209
super.prepareSynchronization(status, definition);
211210
if (status.isNewSynchronization()) {
212211
ArangoTransactionHolder holder = ((ArangoTransactionObject) status.getTransaction()).getHolder();
213-
TransactionSynchronizationManager.bindResource(operations.getDatabaseName(), holder);
212+
TransactionSynchronizationManager.bindResource(this, holder);
214213
}
215214
}
216215

217216
private void afterCompletion() {
218217
bridge.clearCurrentTransaction();
219-
TransactionSynchronizationManager.unbindResource(operations.getDatabaseName());
218+
TransactionSynchronizationManager.unbindResource(this);
220219
}
221220
}

src/test/java/com/arangodb/springframework/core/template/ArangoTemplateTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public void template() {
6262
assertThat(version.getLicense(), is(notNullValue()));
6363
assertThat(version.getServer(), is(notNullValue()));
6464
assertThat(version.getVersion(), is(notNullValue()));
65-
assertThat(template.getDatabaseName(), is(notNullValue()));
65+
assertThat(template.db(), is(notNullValue()));
6666
}
6767

6868
@Test

src/test/java/com/arangodb/springframework/transaction/ArangoTransactionManagerTest.java

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -43,17 +43,13 @@
4343
@RunWith(MockitoJUnitRunner.class)
4444
public class ArangoTransactionManagerTest {
4545

46-
private static final DbName DATABASE_NAME = DbName.of("test");
47-
4846
@Mock
4947
private ArangoOperations operations;
5048
@Mock
5149
private QueryTransactionBridge bridge;
5250
@InjectMocks
5351
private ArangoTransactionManager underTest;
5452
@Mock
55-
private ArangoDB driver;
56-
@Mock
5753
private ArangoDatabase database;
5854
@Mock
5955
private StreamTransactionEntity streamTransaction;
@@ -64,27 +60,22 @@ public class ArangoTransactionManagerTest {
6460

6561
@Before
6662
public void setupMocks() {
67-
when(operations.getDatabaseName())
68-
.thenReturn(DATABASE_NAME);
69-
when(operations.driver())
70-
.thenReturn(driver);
71-
when(driver.db(any(DbName.class)))
63+
when(operations.db())
7264
.thenReturn(database);
7365
}
7466

7567
@After
7668
public void cleanupSync() {
77-
TransactionSynchronizationManager.unbindResourceIfPossible(DATABASE_NAME);
69+
TransactionSynchronizationManager.unbindResourceIfPossible(underTest);
7870
TransactionSynchronizationManager.clear();
7971
}
8072

8173
@Test
8274
public void getTransactionReturnsNewTransactionWithoutStreamTransaction() {
8375
TransactionStatus status = underTest.getTransaction(new DefaultTransactionAttribute());
8476
assertThat(status.isNewTransaction(), is(true));
85-
verify(driver).db(DATABASE_NAME);
8677
verify(bridge).setCurrentTransaction(any());
87-
ArangoTransactionHolder resource = (ArangoTransactionHolder) TransactionSynchronizationManager.getResource(DATABASE_NAME);
78+
ArangoTransactionHolder resource = (ArangoTransactionHolder) TransactionSynchronizationManager.getResource(underTest);
8879
assertThat(resource.getStreamTransactionId(), nullValue());
8980
assertThat(resource.getCollectionNames(), empty());
9081
assertThat(resource.isRollbackOnly(), is(false));
@@ -113,7 +104,7 @@ public void innerRollbackCausesUnexpectedRollbackOnOuterCommit() {
113104
try {
114105
underTest.commit(outer);
115106
} finally {
116-
assertThat(TransactionSynchronizationManager.getResource(DATABASE_NAME), nullValue());
107+
assertThat(TransactionSynchronizationManager.getResource(underTest), nullValue());
117108
}
118109
}
119110

@@ -159,7 +150,7 @@ public void nestedGetTransactionReturnsExistingTransactionWithFormerCollections(
159150
underTest.commit(inner2);
160151
underTest.commit(outer);
161152
verify(database).commitStreamTransaction("123");
162-
assertThat(TransactionSynchronizationManager.getResource(DATABASE_NAME), nullValue());
153+
assertThat(TransactionSynchronizationManager.getResource(underTest), nullValue());
163154
}
164155

165156
@Test
@@ -171,7 +162,7 @@ public void getTransactionForPropagationSupportsWithoutExistingCreatesDummyTrans
171162
assertThat(empty.isNewTransaction(), is(false));
172163
underTest.commit(empty);
173164
verifyNoInteractions(database);
174-
assertThat(TransactionSynchronizationManager.getResource(DATABASE_NAME), nullValue());
165+
assertThat(TransactionSynchronizationManager.getResource(underTest), nullValue());
175166
}
176167

177168
@Test
@@ -186,7 +177,7 @@ public void getTransactionForPropagationSupportsWithExistingCreatesInner() {
186177
assertThat(inner.isNewTransaction(), is(false));
187178
underTest.commit(inner);
188179
ArangoTransactionObject transactionObject = getTransactionObject(inner);
189-
assertThat(TransactionSynchronizationManager.getResource(DATABASE_NAME), is(transactionObject.getHolder()));
180+
assertThat(TransactionSynchronizationManager.getResource(underTest), is(transactionObject.getHolder()));
190181
verifyNoInteractions(database);
191182
}
192183

0 commit comments

Comments
 (0)