1717
1818import com .amazonaws .services .dynamodbv2 .AmazonDynamoDB ;
1919import com .amazonaws .services .dynamodbv2 .datamodeling .DynamoDBMapperConfig ;
20+ import com .amazonaws .util .VersionInfoUtils ;
21+
22+ import org .slf4j .Logger ;
23+ import org .slf4j .LoggerFactory ;
2024import org .socialsignin .spring .data .dynamodb .core .DynamoDBOperations ;
2125import org .socialsignin .spring .data .dynamodb .core .DynamoDBTemplate ;
2226import org .socialsignin .spring .data .dynamodb .repository .support .DynamoDBRepositoryFactory ;
2327import org .springframework .data .repository .cdi .CdiRepositoryBean ;
2428import org .springframework .util .Assert ;
29+ import org .springframework .data .util .Version ;
2530
2631import javax .enterprise .context .spi .CreationalContext ;
2732import javax .enterprise .inject .spi .Bean ;
2833import javax .enterprise .inject .spi .BeanManager ;
2934import java .lang .annotation .Annotation ;
3035import java .util .Set ;
36+ import java .util .StringTokenizer ;
3137
3238/**
3339 * A bean which represents a DynamoDB repository.
3743 * The type of the repository.
3844 */
3945class DynamoDBRepositoryBean <T > extends CdiRepositoryBean <T > {
46+ private static final Logger LOGGER = LoggerFactory .getLogger (DynamoDBRepositoryBean .class );
47+
48+ static {
49+ String awsSdkVersion = VersionInfoUtils .getVersion ();
50+ String springDataVersion = Version .class .getPackage ().getImplementationVersion ();
51+
52+ String thisSpecVersion = DynamoDBRepositoryBean .class .getPackage ().getSpecificationVersion ();
53+ String thisImplVersion = DynamoDBRepositoryBean .class .getPackage ().getImplementationVersion ();
54+
55+ LOGGER .info ("Spring Data DynamoDB Version: {} ({})" , thisImplVersion , thisSpecVersion );
56+ LOGGER .info ("Spring Data Version: {}" , springDataVersion );
57+ LOGGER .info ("AWS SDK Version: {}" , awsSdkVersion );
58+ LOGGER .info ("Java Version: {} - {} {}" , System .getProperty ("java.version" ),
59+ System .getProperty ("java.vm.name" ), System .getProperty ("java.vm.version" ));
60+ LOGGER .info ("Platform Details: {} {}" , System .getProperty ("os.name" ),
61+ System .getProperty ("os.version" ));
62+
63+ if (!isCompatible (springDataVersion , thisSpecVersion )) {
64+ LOGGER .warn ("This Spring Data DynamoDB implementation might not be compatible with the available Spring Data classes on the classpath!"
65+ + System .getProperty ("line.separator" ) + "NoDefClassFoundExceptions or similar might occur!" );
66+ }
67+ }
68+
69+ protected static boolean isCompatible (String spec , String impl ) {
70+ if (spec == null && impl == null ) {
71+ return false ;
72+ } else if (spec == null ) {
73+ spec = "" ;
74+ } else if (impl == null ) {
75+ impl = "" ;
76+ }
77+ StringTokenizer specTokenizer = new StringTokenizer (spec , "." );
78+ StringTokenizer implTokenizer = new StringTokenizer (impl , "." );
79+
80+ String specMajor = specTokenizer .hasMoreTokens () ? specTokenizer .nextToken () : "0" ;
81+ String specMinor = specTokenizer .hasMoreTokens () ? specTokenizer .nextToken () : "0" ;
82+
83+ String implMajor = implTokenizer .hasMoreTokens () ? implTokenizer .nextToken () : "0" ;
84+ String implMinor = implTokenizer .hasMoreTokens () ? implTokenizer .nextToken () : "0" ;
85+
86+ return specMajor .equals (implMajor ) && specMinor .equals (implMinor );
87+ }
4088
4189 private final Bean <AmazonDynamoDB > amazonDynamoDBBean ;
4290
@@ -49,7 +97,9 @@ class DynamoDBRepositoryBean<T> extends CdiRepositoryBean<T> {
4997 *
5098 * @param beanManager
5199 * must not be {@literal null}.
52- * @param dynamoDBMapperBean
100+ * @param amazonDynamoDBBean
101+ * must not be {@literal null}.
102+ * @param dynamoDBOperationsBean
53103 * must not be {@literal null}.
54104 * @param qualifiers
55105 * must not be {@literal null}.
0 commit comments