Skip to content

Commit 2ccb10b

Browse files
committed
Issue #122: Added warning logging in case of an incompatible Spring-Data version is detected on the classpath
1 parent 1143090 commit 2ccb10b

File tree

2 files changed

+49
-1
lines changed

2 files changed

+49
-1
lines changed

ISSUE_TEMPLATE.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,6 @@
1818
- Java Version:
1919
- Platform Details:
2020

21-
All those information are logged by `org.socialsignin.spring.data.dynamodb.repository.cdi.DynamoDBRepositoryBean` on `INFO` level on startup.
21+
All those information are logged by `org.socialsignin.spring.data.dynamodb.repository.support.DynamoDBRepositoryFactory` on `INFO` level on startup.
2222
Or use `java -version` and `mvn dependency:tree | grep -E 'spring|aws'` to provide those version numbers.
2323

src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBRepositoryFactory.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
*/
1616
package org.socialsignin.spring.data.dynamodb.repository.support;
1717

18+
import com.amazonaws.util.VersionInfoUtils;
19+
import org.slf4j.Logger;
20+
import org.slf4j.LoggerFactory;
1821
import org.socialsignin.spring.data.dynamodb.core.DynamoDBOperations;
1922
import org.socialsignin.spring.data.dynamodb.repository.DynamoDBCrudRepository;
2023
import org.socialsignin.spring.data.dynamodb.repository.query.DynamoDBQueryLookupStrategy;
@@ -25,16 +28,61 @@
2528
import org.springframework.data.repository.query.EvaluationContextProvider;
2629
import org.springframework.data.repository.query.QueryLookupStrategy;
2730
import org.springframework.data.repository.query.QueryLookupStrategy.Key;
31+
import org.springframework.data.util.Version;
2832

2933
import java.io.Serializable;
3034
import java.util.Optional;
35+
import java.util.StringTokenizer;
3136

3237
import static org.springframework.data.querydsl.QuerydslUtils.QUERY_DSL_PRESENT;
3338

3439
/**
3540
* @author Michael Lavelle
3641
*/
3742
public class DynamoDBRepositoryFactory extends RepositoryFactorySupport {
43+
private static final Logger LOGGER = LoggerFactory.getLogger(DynamoDBRepositoryFactory.class);
44+
45+
static {
46+
String awsSdkVersion = VersionInfoUtils.getVersion();
47+
String springDataVersion = Version.class.getPackage().getImplementationVersion();
48+
49+
String thisSpecVersion = DynamoDBRepositoryFactory.class.getPackage().getSpecificationVersion();
50+
String thisImplVersion = DynamoDBRepositoryFactory.class.getPackage().getImplementationVersion();
51+
52+
LOGGER.info("Spring Data DynamoDB Version: {} ({})", thisImplVersion, thisSpecVersion);
53+
LOGGER.info("Spring Data Version: {}", springDataVersion);
54+
LOGGER.info("AWS SDK Version: {}", awsSdkVersion);
55+
LOGGER.info("Java Version: {} - {} {}", System.getProperty("java.version"),
56+
System.getProperty("java.vm.name"), System.getProperty("java.vm.version"));
57+
LOGGER.info("Platform Details: {} {}", System.getProperty("os.name"),
58+
System.getProperty("os.version"));
59+
60+
if (!isCompatible(springDataVersion, thisSpecVersion)) {
61+
LOGGER.warn("This Spring Data DynamoDB implementation might not be compatible with the available Spring Data classes on the classpath!"
62+
+ System.getProperty("line.separator") + "NoDefClassFoundExceptions or similar might occur!");
63+
}
64+
}
65+
66+
protected static boolean isCompatible(String spec, String impl) {
67+
if (spec == null && impl == null) {
68+
return false;
69+
} else if (spec == null) {
70+
spec = "";
71+
} else if (impl == null) {
72+
impl = "";
73+
}
74+
StringTokenizer specTokenizer = new StringTokenizer(spec, ".");
75+
StringTokenizer implTokenizer = new StringTokenizer(impl, ".");
76+
77+
String specMajor = specTokenizer.hasMoreTokens() ? specTokenizer.nextToken() : "0";
78+
String specMinor = specTokenizer.hasMoreTokens() ? specTokenizer.nextToken() : "0";
79+
80+
String implMajor = implTokenizer.hasMoreTokens() ? implTokenizer.nextToken() : "0";
81+
String implMinor = implTokenizer.hasMoreTokens() ? implTokenizer.nextToken() : "0";
82+
83+
return specMajor.equals(implMajor) && specMinor.equals(implMinor);
84+
}
85+
3886

3987
private final DynamoDBOperations dynamoDBOperations;
4088

0 commit comments

Comments
 (0)