Skip to content

Commit

Permalink
Merge pull request #42 from LinuxCounter/41_jpa_layer
Browse files Browse the repository at this point in the history
[#41] basic JPA layer
  • Loading branch information
bmarwell committed Jan 6, 2022
2 parents a75b0ad + 03c1fb9 commit 98ecbac
Show file tree
Hide file tree
Showing 19 changed files with 251 additions and 9 deletions.
26 changes: 25 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@
<plugin.maven.source.version>3.2.1</plugin.maven.source.version>

<dependency.jakarta.jaxb.version>2.3.3</dependency.jakarta.jaxb.version>
<dependency.jakarta.json-api.version>1.1.6</dependency.jakarta.json-api.version>
<dependency.jakarta.json.bind-api.version>1.0.2</dependency.jakarta.json.bind-api.version>
<dependency.jakarta.persistence-api.version>2.2.3</dependency.jakarta.persistence-api.version>
<dependency.jakarta.transaction-api.version>1.3.3</dependency.jakarta.transaction-api.version>
<dependency.shiro.version>1.8.0</dependency.shiro.version>
</properties>

Expand All @@ -35,6 +39,7 @@

<dependencyManagement>
<dependencies>
<!-- Jakarta EE dependencies -->
<dependency>
<groupId>jakarta.enterprise</groupId>
<artifactId>jakarta.enterprise.cdi-api</artifactId>
Expand All @@ -44,7 +49,13 @@
<dependency>
<groupId>jakarta.json.bind</groupId>
<artifactId>jakarta.json.bind-api</artifactId>
<version>1.0.2</version>
<version>${dependency.jakarta.json.bind-api.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.json</groupId>
<artifactId>jakarta.json-api</artifactId>
<version>${dependency.jakarta.json-api.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
Expand All @@ -53,6 +64,19 @@
<version>${dependency.jakarta.jaxb.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.persistence</groupId>
<artifactId>jakarta.persistence-api</artifactId>
<version>${dependency.jakarta.persistence-api.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.transaction</groupId>
<artifactId>jakarta.transaction-api</artifactId>
<version>${dependency.jakarta.transaction-api.version}</version>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
Expand Down
12 changes: 10 additions & 2 deletions repository/api/pom.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
Expand All @@ -15,5 +15,13 @@
<version>1.0.0-SNAPSHOT</version>
<name>lico :: repository :: api</name>

<dependencies>
<dependency>
<groupId>io.github.linuxcounter</groupId>
<artifactId>linuxcounter-common-value</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
</dependencies>


</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package io.github.linuxcounter.repository.api;

import io.github.linuxcounter.common.value.AnonymousReportData;

public interface AnonymousReportDataRepository {

void countAnonymous(AnonymousReportData reportData);
}
5 changes: 5 additions & 0 deletions repository/api/src/main/java/module-info.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
module linuxcounter.repository.api {
exports io.github.linuxcounter.repository.api;

requires linuxcounter.common.value;
}
21 changes: 19 additions & 2 deletions repository/impl/jpa/pom.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
Expand All @@ -16,11 +16,28 @@
<name>lico :: repository :: impl :: jpa</name>

<dependencies>
<dependency>
<groupId>io.github.linuxcounter</groupId>
<artifactId>linuxcounter-common-value</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>io.github.linuxcounter</groupId>
<artifactId>linuxcounter-repository-api</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>

<dependency>
<groupId>jakarta.enterprise</groupId>
<artifactId>jakarta.enterprise.cdi-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.persistence</groupId>
<artifactId>jakarta.persistence-api</artifactId>
<scope>provided</scope>
</dependency>

</dependencies>

</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package io.github.linuxcounter.repository.impl.jpa;

import io.github.linuxcounter.common.value.AnonymousReportData;
import io.github.linuxcounter.repository.api.AnonymousReportDataRepository;
import javax.enterprise.context.ApplicationScoped;
import javax.persistence.EntityManager;

@ApplicationScoped
public class AnonymousReportDataJpaRepository extends JpaBaseRepository implements AnonymousReportDataRepository {

@Override
public void countAnonymous(AnonymousReportData reportData) {
final EntityManager em = getEntityManager();
throw new UnsupportedOperationException(
"not yet implemented: [io.github.linuxcounter.repository.impl.jpa.AnonymousReportDataJpaRepository::countAnonymous].");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package io.github.linuxcounter.repository.impl.jpa;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

public class JpaBaseRepository {

@PersistenceContext(unitName = "unixcounter")
private EntityManager entityManager;

public JpaBaseRepository() {
}

public JpaBaseRepository(EntityManager entityManager) {
this.entityManager = entityManager;
}

public EntityManager getEntityManager() {
return entityManager;
}

public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
}
8 changes: 8 additions & 0 deletions repository/impl/jpa/src/main/java/module-info.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
module linuxcounter.repository.impl.jpa {
exports io.github.linuxcounter.repository.impl.jpa;

requires jakarta.enterprise.cdi.api;
requires linuxcounter.common.value;
requires linuxcounter.repository.api;
requires java.persistence;
}
3 changes: 3 additions & 0 deletions repository/impl/jpa/src/main/resources/META-INF/beans.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<beans>
<trim />
</beans>
20 changes: 20 additions & 0 deletions repository/impl/jpa/src/main/resources/META-INF/persistence.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"
version="2.2">
<persistence-unit name="unixcounter"
transaction-type="JTA">
<description>
Persistence unit for the JPA tutorial of the Hibernate Getting Started Guide
</description>

<exclude-unlisted-classes>false</exclude-unlisted-classes>

<properties>
<property name="javax.persistence.schema-generation.database.action"
value="none" />
</properties>

</persistence-unit>

</persistence>
18 changes: 18 additions & 0 deletions services/impl/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,30 @@
<version>1.0.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.github.linuxcounter</groupId>
<artifactId>linuxcounter-repository-api</artifactId>
<version>1.0.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.github.linuxcounter</groupId>
<artifactId>linuxcounter-repository-impl-jpa</artifactId>
<version>1.0.0-SNAPSHOT</version>
<scope>runtime</scope>
</dependency>


<dependency>
<groupId>jakarta.enterprise</groupId>
<artifactId>jakarta.enterprise.cdi-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.transaction</groupId>
<artifactId>jakarta.transaction-api</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>


Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,22 @@
package io.github.linuxcounter.services.impl;

import io.github.linuxcounter.common.value.AnonymousReportData;
import io.github.linuxcounter.repository.api.AnonymousReportDataRepository;
import io.github.linuxcounter.services.api.CounterService;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.transaction.Transactional;


@ApplicationScoped
public class CounterServiceImpl implements CounterService {

@Inject
AnonymousReportDataRepository anonymousReportDataRepository;

@Override
@Transactional
public void countAnonymous(AnonymousReportData reportData) {
// TODO: implement
throw new UnsupportedOperationException(
"not yet implemented: [io.github.linuxcounter.services.impl.CounterServiceImpl::countAnonymous].");
anonymousReportDataRepository.countAnonymous(reportData);
}
}
3 changes: 3 additions & 0 deletions services/impl/src/main/java/module-info.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,7 @@
requires linuxcounter.services.api;

requires jakarta.enterprise.cdi.api;
requires java.transaction;
requires linuxcounter.repository.api;
requires javax.inject;
}
11 changes: 11 additions & 0 deletions web/rest-v1/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,12 @@
<version>1.0.0-SNAPSHOT</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.github.linuxcounter</groupId>
<artifactId>linuxcounter-repository-impl-jpa</artifactId>
<version>1.0.0-SNAPSHOT</version>
<scope>runtime</scope>
</dependency>

<dependency>
<groupId>jakarta.ws.rs</groupId>
Expand All @@ -59,6 +65,11 @@
<version>4.0.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.json</groupId>
<artifactId>jakarta.json-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jakarta.json.bind</groupId>
<artifactId>jakarta.json.bind-api</artifactId>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,27 @@
package io.github.linuxcounter.web.rest.v1.config;

import io.github.linuxcounter.web.rest.v1.json.AnonymousRecordAdapter;
import javax.enterprise.context.ApplicationScoped;
import javax.json.bind.Jsonb;
import javax.json.bind.JsonbBuilder;
import javax.json.bind.JsonbConfig;
import javax.json.bind.config.PropertyNamingStrategy;
import javax.ws.rs.ext.ContextResolver;
import javax.ws.rs.ext.Provider;

@ApplicationScoped
@Provider
public class JsonbConfigurator implements ContextResolver<Jsonb> {

@Override
public Jsonb getContext(Class<?> type) {
final JsonbConfig jsonbConfig = new JsonbConfig()
.withPropertyNamingStrategy(PropertyNamingStrategy.LOWER_CASE_WITH_UNDERSCORES)
.withNullValues(Boolean.TRUE);
.withNullValues(Boolean.TRUE)
.withFormatting(Boolean.TRUE)
.withAdapters(
new AnonymousRecordAdapter()
);

return JsonbBuilder.newBuilder()
.withConfig(jsonbConfig)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package io.github.linuxcounter.web.rest.v1.err;

import java.util.Map;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

@Provider
@Produces(MediaType.APPLICATION_JSON)
public class UnsupportedOperationExceptionMapper implements ExceptionMapper<UnsupportedOperationException> {

@Override
public Response toResponse(UnsupportedOperationException exception) {
Map<String, Object> responseEntity = Map.of(
"message", exception.getMessage()
);

return Response.status(Status.NOT_IMPLEMENTED)
.entity(responseEntity)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package io.github.linuxcounter.web.rest.v1.json;

import io.github.linuxcounter.common.value.AnonymousReportData;
import io.github.linuxcounter.common.value.HardwareId;
import javax.json.Json;
import javax.json.JsonObject;
import javax.json.bind.adapter.JsonbAdapter;

public class AnonymousRecordAdapter implements JsonbAdapter<AnonymousReportData, JsonObject> {

@Override
public JsonObject adaptToJson(AnonymousReportData obj) throws Exception {
return Json.createObjectBuilder()
.add("kernel_name", obj.kernelName())
.add("kernel_version", obj.kernelVersion())
.add("distribution_name", obj.distributionName())
.add("distribution_version", obj.distributionVersion())
.add("timezone", obj.timezone())
.add("hardware_id", obj.hardwareId().value())
.build();
}

@Override
public AnonymousReportData adaptFromJson(JsonObject obj) throws Exception {
return new AnonymousReportData(
obj.getString("kernel_name"),
obj.getString("kernel_version"),
obj.getString("distribution_name"),
obj.getString("distribution_version"),
obj.getString("timezone"),
new HardwareId(obj.getString("hardware_id"))
);
}
}
1 change: 1 addition & 0 deletions web/rest-v1/src/main/java/module-info.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
requires java.servlet;
requires javax.inject;
requires jakarta.enterprise.cdi.api;
requires java.json;
requires java.json.bind;
requires microprofile.openapi.api;

Expand Down
Loading

0 comments on commit 98ecbac

Please sign in to comment.