Skip to content

Commit b9b48d3

Browse files
committed
#250 replace dbname by database itself
1 parent 7f3c7f5 commit b9b48d3

File tree

5 files changed

+34
-37
lines changed

5 files changed

+34
-37
lines changed

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
import com.arangodb.ArangoCursor;
2424
import com.arangodb.ArangoDB;
25-
import com.arangodb.DbName;
25+
import com.arangodb.ArangoDatabase;
2626
import com.arangodb.entity.ArangoDBVersion;
2727
import com.arangodb.entity.DocumentEntity;
2828
import com.arangodb.entity.MultiDocumentEntity;
@@ -58,7 +58,13 @@ public interface ArangoOperations {
5858
*/
5959
ArangoDBVersion getVersion() throws DataAccessException;
6060

61-
DbName getDatabaseName();
61+
/**
62+
* Returns the underlying database. The database will be created if it does not exist.
63+
*
64+
* @return the database object
65+
* @throws DataAccessException
66+
*/
67+
ArangoDatabase db() throws DataAccessException;
6268

6369
/**
6470
* 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: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
import org.springframework.context.expression.BeanFactoryAccessor;
5858
import org.springframework.context.expression.BeanFactoryResolver;
5959
import org.springframework.dao.DataAccessException;
60+
import org.springframework.dao.support.DataAccessUtils;
6061
import org.springframework.dao.support.PersistenceExceptionTranslator;
6162
import org.springframework.data.domain.Persistable;
6263
import org.springframework.data.mapping.PersistentPropertyAccessor;
@@ -133,14 +134,20 @@ public ArangoTemplate(final ArangoDB arango, final String database, final Arango
133134
version = null;
134135
}
135136

136-
ArangoDatabase db() {
137-
final String key = getDatabaseName().get();
137+
@Override
138+
public ArangoDatabase db() throws DataAccessException {
139+
final String key = databaseExpression != null ? databaseExpression.getValue(context, String.class)
140+
: databaseName;
138141
return databaseCache.computeIfAbsent(key, name -> {
139142
final ArangoDatabase db = arango.db(name);
140-
if (!db.exists()) {
141-
db.create();
143+
try {
144+
if (!db.exists()) {
145+
db.create();
146+
}
147+
return db;
148+
} catch (ArangoDBException error) {
149+
throw DataAccessUtils.translateIfNecessary(error, exceptionTranslator);
142150
}
143-
return db;
144151
});
145152
}
146153

@@ -324,12 +331,6 @@ public ArangoDBVersion getVersion() throws DataAccessException {
324331
}
325332
}
326333

327-
@Override
328-
public DbName getDatabaseName() {
329-
return DbName.of(databaseExpression != null ? databaseExpression.getValue(context, String.class)
330-
: databaseName);
331-
}
332-
333334
@Override
334335
public <T> ArangoCursor<T> query(final String query, final Map<String, Object> bindVars,
335336
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
@@ -71,7 +71,7 @@ public void template() {
7171
assertThat(version.getLicense(), is(notNullValue()));
7272
assertThat(version.getServer(), is(notNullValue()));
7373
assertThat(version.getVersion(), is(notNullValue()));
74-
assertThat(template.getDatabaseName(), is(notNullValue()));
74+
assertThat(template.db(), is(notNullValue()));
7575
}
7676

7777
@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)