Skip to content

Commit 6e7f61c

Browse files
committed
WIP
more WIP Also did some auto-boot and made auditing easier
1 parent 5fb84f5 commit 6e7f61c

39 files changed

+1225
-796
lines changed

pom.xml

Lines changed: 11 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,11 @@
103103
<artifactId>DynamoDBLocal</artifactId>
104104
<version>[1.11,2.0)</version>
105105
</dependency>
106+
<dependency>
107+
<groupId>org.apache.logging.log4j</groupId>
108+
<artifactId>log4j-to-slf4j</artifactId>
109+
<version>2.8.2</version>
110+
</dependency>
106111

107112
<dependency>
108113
<groupId>uk.org.lidalia</groupId>
@@ -177,7 +182,12 @@
177182
<groupId>com.amazonaws</groupId>
178183
<artifactId>DynamoDBLocal</artifactId>
179184
<scope>test</scope>
180-
</dependency>
185+
</dependency>
186+
<dependency>
187+
<groupId>org.apache.logging.log4j</groupId>
188+
<artifactId>log4j-to-slf4j</artifactId>
189+
<scope>test</scope>
190+
</dependency>
181191
<dependency>
182192
<groupId>junit</groupId>
183193
<artifactId>junit</artifactId>
@@ -433,26 +443,6 @@
433443
<groupId>org.apache.maven.plugins</groupId>
434444
<artifactId>maven-dependency-plugin</artifactId>
435445
<executions>
436-
<execution>
437-
<!-- Prepare standalone DynamoDB instance (Integration testing) -->
438-
<id>unpack-dynamodb-local</id>
439-
<goals>
440-
<goal>unpack</goal>
441-
</goals>
442-
<phase>pre-integration-test</phase>
443-
<configuration>
444-
<artifactItems>
445-
<artifactItem>
446-
<groupId>com.jcabi</groupId>
447-
<artifactId>DynamoDBLocal</artifactId>
448-
<version>2015-07-16</version>
449-
<type>zip</type>
450-
<outputDirectory>${project.build.directory}/dynamodb-dist</outputDirectory>
451-
<overWrite>false</overWrite>
452-
</artifactItem>
453-
</artifactItems>
454-
</configuration>
455-
</execution>
456446
<execution>
457447
<!-- Prepare SQLite for in-memory DynamoDB instance (Unit testing) -->
458448
<id>copy</id>
@@ -475,60 +465,6 @@
475465
</execution>
476466
</executions>
477467
</plugin>
478-
<plugin>
479-
<groupId>org.codehaus.mojo</groupId>
480-
<artifactId>build-helper-maven-plugin</artifactId>
481-
<executions>
482-
<execution>
483-
<id>reserver-dynamodb-port</id>
484-
<goals>
485-
<goal>reserve-network-port</goal>
486-
</goals>
487-
<phase>pre-integration-test</phase>
488-
<configuration>
489-
<portNames>
490-
<portName>dynamodblocal.port</portName>
491-
</portNames>
492-
</configuration>
493-
</execution>
494-
</executions>
495-
</plugin>
496-
<plugin>
497-
<groupId>com.jcabi</groupId>
498-
<artifactId>jcabi-dynamodb-maven-plugin</artifactId>
499-
<version>0.9.1</version>
500-
<configuration>
501-
<tables>
502-
<table>src/test/resources/user_table.json</table>
503-
<table>src/test/resources/playlist_table.json</table>
504-
<table>src/test/resources/feeduser_table.json</table>
505-
<table>src/test/resources/customerhistory_table.json</table>
506-
<table>src/test/resources/installation_table.json</table>
507-
<table>src/test/resources/auditable_user_table.json</table>
508-
</tables>
509-
<port>${dynamodblocal.port}</port>
510-
<dist>${project.build.directory}/dynamodb-dist</dist>
511-
<arguments>
512-
<argument>-inMemory</argument>
513-
</arguments>
514-
</configuration>
515-
<executions>
516-
<execution>
517-
<id>pre-integration-test</id>
518-
<goals>
519-
<goal>start</goal>
520-
<goal>create-tables</goal>
521-
</goals>
522-
</execution>
523-
<execution>
524-
<id>post-integration-test</id>
525-
<goals>
526-
<goal>stop</goal>
527-
</goals>
528-
<phase>post-integration-test</phase>
529-
</execution>
530-
</executions>
531-
</plugin>
532468
<plugin>
533469
<groupId>org.apache.maven.plugins</groupId>
534470
<artifactId>maven-surefire-plugin</artifactId>

src/main/java/org/socialsignin/spring/data/dynamodb/core/DynamoDBTemplate.java

Lines changed: 10 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import org.socialsignin.spring.data.dynamodb.mapping.event.BeforeSaveEvent;
4040
import org.socialsignin.spring.data.dynamodb.mapping.event.DynamoDBMappingEvent;
4141
import org.springframework.beans.BeansException;
42+
import org.springframework.beans.factory.annotation.Autowired;
4243
import org.springframework.context.ApplicationContext;
4344
import org.springframework.context.ApplicationContextAware;
4445
import org.springframework.context.ApplicationEventPublisher;
@@ -57,42 +58,6 @@ public class DynamoDBTemplate implements DynamoDBOperations, ApplicationContextA
5758
private final DynamoDBMapperConfig dynamoDBMapperConfig;
5859
private ApplicationEventPublisher eventPublisher;
5960

60-
/**
61-
* Convenient constructor to use the default
62-
* {@link DynamoDBMapper#DynamoDBMapper(AmazonDynamoDB)}
63-
*
64-
* @param amazonDynamoDB
65-
* The AWS SDK instance to talk to DynamoDB
66-
* @param dynamoDBMapperConfig
67-
* The config to use
68-
*/
69-
public DynamoDBTemplate(AmazonDynamoDB amazonDynamoDB, DynamoDBMapperConfig dynamoDBMapperConfig) {
70-
this(amazonDynamoDB, dynamoDBMapperConfig, null);
71-
}
72-
73-
/**
74-
* Convenient constructor to use the {@link DynamoDBMapperConfig#DEFAULT}
75-
*
76-
* @param amazonDynamoDB
77-
* The AWS SDK instance to talk to DynamoDB
78-
* @param dynamoDBMapper
79-
* The Mapper to use
80-
*/
81-
public DynamoDBTemplate(AmazonDynamoDB amazonDynamoDB, DynamoDBMapper dynamoDBMapper) {
82-
this(amazonDynamoDB, null, dynamoDBMapper);
83-
}
84-
85-
/**
86-
* Convenient construcotr to thse the {@link DynamoDBMapperConfig#DEFAULT} and
87-
* default {@link DynamoDBMapper#DynamoDBMapper(AmazonDynamoDB)}
88-
*
89-
* @param amazonDynamoDB
90-
* The AWS SDK instance to talk to DynamoDB
91-
*/
92-
public DynamoDBTemplate(AmazonDynamoDB amazonDynamoDB) {
93-
this(amazonDynamoDB, null, null);
94-
}
95-
9661
/**
9762
* Initializes a new {@code DynamoDBTemplate}. The following combinations are
9863
* valid:
@@ -106,49 +71,18 @@ public DynamoDBTemplate(AmazonDynamoDB amazonDynamoDB) {
10671
* can be {@code null} -
10772
* {@link DynamoDBMapper#DynamoDBMapper(AmazonDynamoDB, DynamoDBMapperConfig)}
10873
* is used if {@code null} is passed in
74+
* @param dynamoDBMapperConfig
10975
*/
110-
public DynamoDBTemplate(AmazonDynamoDB amazonDynamoDB, DynamoDBMapperConfig dynamoDBMapperConfig,
111-
DynamoDBMapper dynamoDBMapper) {
76+
@Autowired
77+
public DynamoDBTemplate(AmazonDynamoDB amazonDynamoDB, DynamoDBMapper dynamoDBMapper,
78+
DynamoDBMapperConfig dynamoDBMapperConfig) {
11279
Assert.notNull(amazonDynamoDB, "amazonDynamoDB must not be null!");
113-
this.amazonDynamoDB = amazonDynamoDB;
80+
Assert.notNull(dynamoDBMapper, "dynamoDBMapper must not be null!");
81+
Assert.notNull(dynamoDBMapperConfig, "dynamoDBMapperConfig must not be null!");
11482

115-
if (dynamoDBMapperConfig == null) {
116-
this.dynamoDBMapperConfig = DynamoDBMapperConfig.DEFAULT;
117-
} else {
118-
119-
// #146, #81 #157
120-
// Trying to fix half-initialized DynamoDBMapperConfigs here.
121-
// The old documentation advised to start with an empty builder. Therefore we
122-
// try here to set required fields to their defaults -
123-
// As the documentation at
124-
// https://github.com/derjust/spring-data-dynamodb/wiki/Alter-table-name-during-runtime
125-
// (same as https://git.io/DynamoDBMapperConfig)
126-
// now does: Start with #DEFAULT and add what's required
127-
DynamoDBMapperConfig.Builder emptyBuilder = DynamoDBMapperConfig.builder(); // empty (!) builder
128-
129-
if (dynamoDBMapperConfig.getConversionSchema() == null) {
130-
LOGGER.warn(
131-
"No ConversionSchema set in the provided dynamoDBMapperConfig! Merging with DynamoDBMapperConfig.DEFAULT - Please see https://git.io/DynamoDBMapperConfig");
132-
// DynamoDBMapperConfig#DEFAULT comes with a ConversionSchema
133-
emptyBuilder.withConversionSchema(DynamoDBMapperConfig.DEFAULT.getConversionSchema());
134-
}
135-
136-
if (dynamoDBMapperConfig.getTypeConverterFactory() == null) {
137-
LOGGER.warn(
138-
"No TypeConverterFactory set in the provided dynamoDBMapperConfig! Merging with DynamoDBMapperConfig.DEFAULT - Please see https://git.io/DynamoDBMapperConfig");
139-
// DynamoDBMapperConfig#DEFAULT comes with a TypeConverterFactory
140-
emptyBuilder.withTypeConverterFactory(DynamoDBMapperConfig.DEFAULT.getTypeConverterFactory());
141-
}
142-
143-
// Deprecated but the only way how DynamoDBMapperConfig#merge is exposed
144-
this.dynamoDBMapperConfig = new DynamoDBMapperConfig(dynamoDBMapperConfig, emptyBuilder.build());
145-
}
146-
147-
if (dynamoDBMapper == null) {
148-
this.dynamoDBMapper = new DynamoDBMapper(amazonDynamoDB, dynamoDBMapperConfig);
149-
} else {
150-
this.dynamoDBMapper = dynamoDBMapper;
151-
}
83+
this.amazonDynamoDB = amazonDynamoDB;
84+
this.dynamoDBMapper = dynamoDBMapper;
85+
this.dynamoDBMapperConfig = dynamoDBMapperConfig;
15286
}
15387

15488
@Override

src/main/java/org/socialsignin/spring/data/dynamodb/repository/cdi/DynamoDBRepositoryBean.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package org.socialsignin.spring.data.dynamodb.repository.cdi;
1717

1818
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
19+
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper;
1920
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperConfig;
2021
import org.socialsignin.spring.data.dynamodb.core.DynamoDBOperations;
2122
import org.socialsignin.spring.data.dynamodb.core.DynamoDBTemplate;
@@ -100,8 +101,13 @@ protected T create(CreationalContext<T> creationalContext, Class<T> repositoryTy
100101
? null
101102
: getDependencyInstance(dynamoDBOperationsBean, DynamoDBOperations.class);
102103

104+
if (dynamoDBMapperConfig == null) {
105+
dynamoDBMapperConfig = DynamoDBMapperConfig.DEFAULT;
106+
}
107+
DynamoDBMapper dynamoDBMapper = new DynamoDBMapper(amazonDynamoDB, dynamoDBMapperConfig);
108+
103109
if (dynamoDBOperations == null) {
104-
dynamoDBOperations = new DynamoDBTemplate(amazonDynamoDB, dynamoDBMapperConfig);
110+
dynamoDBOperations = new DynamoDBTemplate(amazonDynamoDB, dynamoDBMapper, dynamoDBMapperConfig);
105111
}
106112

107113
DynamoDBRepositoryFactory factory = new DynamoDBRepositoryFactory(dynamoDBOperations);
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
/**
2+
* Copyright © 2018 spring-data-dynamodb (https://github.com/derjust/spring-data-dynamodb)
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package org.socialsignin.spring.data.dynamodb.repository.config;
17+
18+
import org.slf4j.Logger;
19+
import org.slf4j.LoggerFactory;
20+
import org.springframework.beans.BeansException;
21+
import org.springframework.beans.factory.FactoryBean;
22+
import org.springframework.beans.factory.config.BeanPostProcessor;
23+
import org.springframework.lang.Nullable;
24+
25+
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperConfig;
26+
27+
public class DynamoDBMapperConfigFactory implements FactoryBean<DynamoDBMapperConfig>, BeanPostProcessor {
28+
private static final Logger LOGGER = LoggerFactory.getLogger(DynamoDBMapperConfigFactory.class);
29+
@Override
30+
public DynamoDBMapperConfig getObject() throws Exception {
31+
return DynamoDBMapperConfig.DEFAULT;
32+
}
33+
34+
@Override
35+
public Class<?> getObjectType() {
36+
return DynamoDBMapperConfig.class;
37+
}
38+
39+
@Nullable
40+
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
41+
if (bean instanceof DynamoDBMapperConfig) {
42+
DynamoDBMapperConfig dynamoDBMapperConfig = (DynamoDBMapperConfig) bean;
43+
if (dynamoDBMapperConfig == DynamoDBMapperConfig.DEFAULT) {
44+
return bean;
45+
}
46+
// #146, #81 #157
47+
// Trying to fix half-initialized DynamoDBMapperConfigs here.
48+
// The old documentation advised to start with an empty builder. Therefore we
49+
// try here to set required fields to their defaults -
50+
// As the documentation at
51+
// https://github.com/derjust/spring-data-dynamodb/wiki/Alter-table-name-during-runtime
52+
// (same as https://git.io/DynamoDBMapperConfig)
53+
// now does: Start with #DEFAULT and add what's required
54+
DynamoDBMapperConfig.Builder emptyBuilder = DynamoDBMapperConfig.builder(); // empty (!) builder
55+
56+
if (dynamoDBMapperConfig.getConversionSchema() == null) {
57+
LOGGER.warn(
58+
"No ConversionSchema set in the provided dynamoDBMapperConfig! Merging with DynamoDBMapperConfig.DEFAULT - Please see https://git.io/DynamoDBMapperConfig");
59+
// DynamoDBMapperConfig#DEFAULT comes with a ConversionSchema
60+
emptyBuilder.withConversionSchema(DynamoDBMapperConfig.DEFAULT.getConversionSchema());
61+
}
62+
63+
if (dynamoDBMapperConfig.getTypeConverterFactory() == null) {
64+
LOGGER.warn(
65+
"No TypeConverterFactory set in the provided dynamoDBMapperConfig! Merging with DynamoDBMapperConfig.DEFAULT - Please see https://git.io/DynamoDBMapperConfig");
66+
// DynamoDBMapperConfig#DEFAULT comes with a TypeConverterFactory
67+
emptyBuilder.withTypeConverterFactory(DynamoDBMapperConfig.DEFAULT.getTypeConverterFactory());
68+
}
69+
70+
// Deprecated but the only way how DynamoDBMapperConfig#merge is exposed
71+
return new DynamoDBMapperConfig(dynamoDBMapperConfig, emptyBuilder.build());
72+
73+
} else {
74+
return bean;
75+
}
76+
}
77+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/**
2+
* Copyright © 2018 spring-data-dynamodb (https://github.com/derjust/spring-data-dynamodb)
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package org.socialsignin.spring.data.dynamodb.repository.config;
17+
18+
import org.springframework.beans.factory.FactoryBean;
19+
import org.springframework.beans.factory.annotation.Autowired;
20+
21+
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
22+
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper;
23+
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperConfig;
24+
25+
public class DynamoDBMapperFactory implements FactoryBean<DynamoDBMapper> {
26+
27+
private final AmazonDynamoDB amazonDynamoDB;
28+
private final DynamoDBMapperConfig dynamoDBMapperConfig;
29+
30+
@Autowired
31+
public DynamoDBMapperFactory(AmazonDynamoDB amazonDynamoDB, DynamoDBMapperConfig dynamoDBMapperConfig) {
32+
this.amazonDynamoDB = amazonDynamoDB;
33+
this.dynamoDBMapperConfig = dynamoDBMapperConfig;
34+
}
35+
36+
@Override
37+
public DynamoDBMapper getObject() throws Exception {
38+
return new DynamoDBMapper(amazonDynamoDB, dynamoDBMapperConfig);
39+
}
40+
41+
@Override
42+
public Class<?> getObjectType() {
43+
return DynamoDBMapper.class;
44+
}
45+
46+
}

0 commit comments

Comments
 (0)