diff --git a/README.md b/README.md index bb2fa74..8e557e0 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,6 @@ A Spring Data version based on [spring-data-jdbc-repository](https://github.com/ ## Improvements I have in mind - [Exposed issue #24](https://github.com/JetBrains/Exposed/issues/24): see if Exposed could support natively data classes + repository patten. - - [Exposed issue #25](https://github.com/JetBrains/Exposed/issues/25): allow to support SQL transaction with `@Transactional`. - [Spring HATEOAS issue #401](https://github.com/spring-projects/spring-hateoas/issues/401): add HATEOAS support, but without having to extend `ResourceSupport` or wrapping it into a `Resource` container . - [Kotlin issue KT-11235](https://youtrack.jetbrains.com/issue/KT-11235): avoid mandatory usage of `arrayOf` in annotation array attribute diff --git a/build.gradle b/build.gradle index 20184d4..05884ca 100644 --- a/build.gradle +++ b/build.gradle @@ -2,6 +2,7 @@ buildscript { ext { springBootVersion = '1.4.0.M2' kotlinVersion = '1.0.2-eap-74' + exposedVersion = '0.5.0' } repositories { mavenCentral() @@ -27,8 +28,7 @@ repositories { maven { url 'https://dl.bintray.com/kotlin/kotlin-eap/' } maven { url 'https://dl.bintray.com/kotlin/exposed' } // exposed maven { url 'https://dl.bintray.com/sdeleuze/maven/' } // postgis-geojson - mavenLocal() -} + } jar { baseName = 'geospatial-messenger' @@ -58,11 +58,8 @@ dependencies { compile("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}") compile("com.fasterxml.jackson.module:jackson-module-kotlin:${project.ext['jackson.version']}") - compile('org.jetbrains.exposed:exposed:0.5.0-SNAPSHOT') { - exclude module: 'h2' - exclude module: 'joda-time' - } - compile('org.jetbrains.exposed:spring-transaction:0.5.0-SNAPSHOT') + compile("org.jetbrains.exposed:exposed:${exposedVersion}") + compile("org.jetbrains.exposed:spring-transaction:${exposedVersion}") compile('org.postgresql:postgresql:9.4.1208') compile('net.postgis:postgis-jdbc:2.2.0') compile('com.github.mayconbordin:postgis-geojson:1.1') // https://github.com/sdeleuze/postgis-geojson diff --git a/src/main/kotlin/io/spring/messenger/Application.kt b/src/main/kotlin/io/spring/messenger/Application.kt index 5e4bfc0..9989423 100644 --- a/src/main/kotlin/io/spring/messenger/Application.kt +++ b/src/main/kotlin/io/spring/messenger/Application.kt @@ -20,15 +20,18 @@ import javax.sql.DataSource @EnableTransactionManagement open class Application { - @Bean open fun objectMapper(): ObjectMapper { + @Bean + open fun objectMapper(): ObjectMapper { val mapper:ObjectMapper = Jackson2ObjectMapperBuilder().modulesToInstall(PostGISModule()).build() mapper.setSerializationInclusion(Include.NON_NULL) return mapper } - @Bean open fun transactionManager(dataSource: DataSource) = SpringTransactionManager(dataSource) + @Bean + open fun transactionManager(dataSource: DataSource) = SpringTransactionManager(dataSource) - @Bean open fun init(ur: UserRepository, mr: MessageRepository) = CommandLineRunner { + @Bean + open fun init(ur: UserRepository, mr: MessageRepository) = CommandLineRunner { ur.createTable() mr.createTable() mr.deleteAll() diff --git a/src/main/kotlin/io/spring/messenger/repository/MessageRepository.kt b/src/main/kotlin/io/spring/messenger/repository/MessageRepository.kt index 43bf1e5..bbbf826 100644 --- a/src/main/kotlin/io/spring/messenger/repository/MessageRepository.kt +++ b/src/main/kotlin/io/spring/messenger/repository/MessageRepository.kt @@ -10,7 +10,7 @@ import org.springframework.stereotype.Repository import org.springframework.transaction.annotation.Transactional @Repository -@Transactional +@Transactional // Should be at @Service level in real applications open class MessageRepository() { open fun createTable() = SchemaUtils.create(Messages) diff --git a/src/main/kotlin/io/spring/messenger/repository/UserRepository.kt b/src/main/kotlin/io/spring/messenger/repository/UserRepository.kt index 9d1a2f4..a7b4d06 100644 --- a/src/main/kotlin/io/spring/messenger/repository/UserRepository.kt +++ b/src/main/kotlin/io/spring/messenger/repository/UserRepository.kt @@ -11,7 +11,7 @@ import org.springframework.stereotype.Repository import org.springframework.transaction.annotation.Transactional @Repository -@Transactional +@Transactional // Should be at @Service level in real applications open class UserRepository() { open fun createTable() = SchemaUtils.create(Users) diff --git a/src/test/kotlin/io/spring/messenger/ApplicationTests.kt b/src/test/kotlin/io/spring/messenger/ApplicationTests.kt index de2b11a..1fcb7cc 100644 --- a/src/test/kotlin/io/spring/messenger/ApplicationTests.kt +++ b/src/test/kotlin/io/spring/messenger/ApplicationTests.kt @@ -2,13 +2,11 @@ package io.spring.messenger import org.junit.Test import org.junit.runner.RunWith -import org.springframework.test.context.web.WebAppConfiguration; -import org.springframework.boot.test.SpringApplicationConfiguration -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner +import org.springframework.boot.test.context.SpringBootTest +import org.springframework.test.context.junit4.SpringRunner -@RunWith(SpringJUnit4ClassRunner::class) -@SpringApplicationConfiguration(classes = arrayOf(Application::class)) -@WebAppConfiguration +@RunWith(SpringRunner::class) +@SpringBootTest class ApplicationTests { @Test diff --git a/src/test/kotlin/io/spring/messenger/MessageControllerTests.kt b/src/test/kotlin/io/spring/messenger/MessageControllerTests.kt index 04e415b..1a7ed3f 100644 --- a/src/test/kotlin/io/spring/messenger/MessageControllerTests.kt +++ b/src/test/kotlin/io/spring/messenger/MessageControllerTests.kt @@ -13,12 +13,10 @@ import org.postgis.Point import org.springframework.test.web.servlet.result.MockMvcResultMatchers.status import org.springframework.beans.factory.annotation.Autowired -import org.springframework.boot.test.SpringApplicationConfiguration +import org.springframework.boot.test.context.SpringBootTest import org.springframework.http.MediaType.APPLICATION_JSON_UTF8 import org.springframework.restdocs.RestDocumentation import org.springframework.restdocs.mockmvc.RestDocumentationResultHandler -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner -import org.springframework.test.context.web.WebAppConfiguration import org.springframework.test.web.servlet.MockMvc import org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppContextSetup import org.springframework.web.context.WebApplicationContext @@ -30,9 +28,10 @@ import org.springframework.test.web.servlet.setup.DefaultMockMvcBuilder import org.springframework.restdocs.payload.PayloadDocumentation.* import org.springframework.restdocs.request.RequestDocumentation.* import org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.* +import org.springframework.test.context.junit4.SpringRunner -@RunWith(SpringJUnit4ClassRunner::class) @WebAppConfiguration -@SpringApplicationConfiguration(classes = arrayOf(Application::class)) +@RunWith(SpringRunner::class) +@SpringBootTest class MessageControllerTests { @Rule @JvmField val restDoc = RestDocumentation("build/generated-snippets") diff --git a/src/test/kotlin/io/spring/messenger/UserControllerTests.kt b/src/test/kotlin/io/spring/messenger/UserControllerTests.kt index c362263..f4f46c5 100644 --- a/src/test/kotlin/io/spring/messenger/UserControllerTests.kt +++ b/src/test/kotlin/io/spring/messenger/UserControllerTests.kt @@ -12,11 +12,9 @@ import org.postgis.Point import org.springframework.test.web.servlet.result.MockMvcResultMatchers.status import org.springframework.beans.factory.annotation.Autowired -import org.springframework.boot.test.SpringApplicationConfiguration +import org.springframework.boot.test.context.SpringBootTest import org.springframework.http.MediaType.APPLICATION_JSON_UTF8 import org.springframework.restdocs.RestDocumentation -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner -import org.springframework.test.context.web.WebAppConfiguration import org.springframework.test.web.servlet.MockMvc import org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppContextSetup import org.springframework.web.context.WebApplicationContext @@ -29,10 +27,11 @@ import org.springframework.test.web.servlet.setup.DefaultMockMvcBuilder import org.springframework.restdocs.payload.PayloadDocumentation.* import org.springframework.restdocs.request.RequestDocumentation.* import org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.* +import org.springframework.test.context.junit4.SpringRunner -@RunWith(SpringJUnit4ClassRunner::class) @WebAppConfiguration -@SpringApplicationConfiguration(classes = arrayOf(Application::class)) +@RunWith(SpringRunner::class) +@SpringBootTest class UserControllerTests { @Rule @JvmField val restDoc = RestDocumentation("build/generated-snippets")