Skip to content

Commit eec87c7

Browse files
committed
- added some more comments
- enhanced logging - fixed bad wording "ContractValidator" => "InputValidator"
1 parent 073187a commit eec87c7

File tree

8 files changed

+199
-29
lines changed

8 files changed

+199
-29
lines changed

sampling-message-server/src/main/java/de/dhbw/ravensburg/verteiltesysteme/server/ServiceEndpoint.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import de.dhbw.ravensburg.verteiltesysteme.server.persistence.DatabaseAccessObjectImpl;
55
import de.dhbw.ravensburg.verteiltesysteme.server.persistence.FakePersistence;
66
import de.dhbw.ravensburg.verteiltesysteme.server.rpc.RpcService;
7-
import de.dhbw.ravensburg.verteiltesysteme.server.service.ContractValidator;
7+
import de.dhbw.ravensburg.verteiltesysteme.server.service.InputValidator;
88
import de.dhbw.ravensburg.verteiltesysteme.server.service.SamplingMessageService;
99
import de.dhbw.ravensburg.verteiltesysteme.server.service.SamplingMessageServiceImpl;
1010
import de.dhbw.ravensburg.verteiltesysteme.server.service.ServiceConfig;
@@ -35,8 +35,8 @@ public ServiceEndpoint(final ServiceConfig serviceConfig) {
3535
this.serviceConfig = serviceConfig;
3636

3737
final DatabaseAccessObject databaseAccessObject = new DatabaseAccessObjectImpl(new FakePersistence<>());
38-
final ContractValidator contractValidator = new ContractValidator(this.serviceConfig);
39-
final SamplingMessageService samplingMessageService = new SamplingMessageServiceImpl(databaseAccessObject, contractValidator);
38+
final InputValidator inputValidator = new InputValidator(this.serviceConfig);
39+
final SamplingMessageService samplingMessageService = new SamplingMessageServiceImpl(databaseAccessObject, inputValidator);
4040

4141
final RpcService rpcService = new RpcService(samplingMessageService);
4242

@@ -47,6 +47,9 @@ public ServiceEndpoint(final ServiceConfig serviceConfig) {
4747
.build();
4848
}
4949

50+
/*
51+
Provide request endpoint logging interceptor
52+
*/
5053
private static ServerInterceptor socketAddressLoggingServerInterceptor() {
5154
return new ServerInterceptor() {
5255
@Override
@@ -72,6 +75,11 @@ public void init() {
7275
}
7376
}
7477

78+
/**
79+
* Block until server shutdown occurs.
80+
*
81+
* @throws InterruptedException
82+
*/
7583
public void awaitTermination() throws InterruptedException {
7684
this.server.awaitTermination();
7785
}

sampling-message-server/src/main/java/de/dhbw/ravensburg/verteiltesysteme/server/persistence/DatabaseAccessObjectImpl.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,15 @@
1111
public class DatabaseAccessObjectImpl implements DatabaseAccessObject {
1212
private final FakePersistence<String, DatabaseSamplingMessage> fakePersistence;
1313

14+
1415
public DatabaseAccessObjectImpl(final @NonNull FakePersistence<String, DatabaseSamplingMessage> fakePersistence) {
1516
log.debug("Constructing DatabaseAccessObjectImpl");
1617
this.fakePersistence = fakePersistence;
1718
}
1819

20+
/**
21+
* {@inheritDoc}
22+
*/
1923
@Override
2024
public Optional<DatabaseSamplingMessage> getSamplingMessage(@NonNull final String messageName) {
2125
log.info(String.format("Getting DatabaseSamplingMessage with the messageName: %s.", messageName));
@@ -32,6 +36,9 @@ public Optional<DatabaseSamplingMessage> getSamplingMessage(@NonNull final Strin
3236
}
3337
}
3438

39+
/**
40+
* {@inheritDoc}
41+
*/
3542
@Override
3643
public boolean createSamplingMessage(@NonNull final String messageName, @NonNull final DatabaseSamplingMessage databaseSamplingMessage) {
3744
log.info(String.format("Creating DatabaseSamplingMessage with the messageName: %s.", messageName));
@@ -45,6 +52,10 @@ public boolean createSamplingMessage(@NonNull final String messageName, @NonNull
4552
return false;
4653
}
4754

55+
/**
56+
* {@inheritDoc}
57+
*/
58+
@Override
4859
public boolean writeSamplingMessageContentAndTimestamp(@NonNull final String messageName, @NonNull final String messageContent, @NonNull final Instant updateTimestamp) {
4960
log.info(String.format("Writing DatabaseSamplingMessage with the messageName: %s.", messageName));
5061

@@ -57,6 +68,9 @@ public boolean writeSamplingMessageContentAndTimestamp(@NonNull final String mes
5768
return false;
5869
}
5970

71+
/**
72+
* {@inheritDoc}
73+
*/
6074
@Override
6175
public boolean deleteSamplingMessage(@NonNull final String messageName) {
6276
log.info(String.format("Deleting DatabaseSamplingMessage with the messageName: %s.", messageName));
@@ -69,6 +83,9 @@ public boolean deleteSamplingMessage(@NonNull final String messageName) {
6983
return false;
7084
}
7185

86+
/**
87+
* {@inheritDoc}
88+
*/
7289
@Override
7390
public long getTotalMessageCount() {
7491
final long messageCount = fakePersistence.size();

sampling-message-server/src/main/java/de/dhbw/ravensburg/verteiltesysteme/server/persistence/FakePersistence.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44

55
/**
66
* Fake persistence class
7-
* Mocking a partially synchronized persistence key-value storage by being nothing else than a simple java.util.concurrent.ConcurrentHashMap
7+
* Mocking a partially synchronized persistence key-value storage by being nothing else than a simple {@link ConcurrentHashMap}
8+
* All the concurrency magic happens here - no need for explicit synchronization or locking.
89
*
910
* @param <K> Key generic type
1011
* @param <V> Value generic type

sampling-message-server/src/main/java/de/dhbw/ravensburg/verteiltesysteme/server/persistence/model/DatabaseSamplingMessage.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,30 @@
1010
import java.time.Duration;
1111
import java.time.Instant;
1212

13+
14+
/**
15+
* Primary persistence layer representation of a SamplingMessage.
16+
*/
17+
18+
/*
19+
Automatically generate getters and setters for all attributes.
20+
*/
1321
@Data
22+
/*
23+
Automatically generate builder pattern implementation
24+
*/
1425
@Builder
26+
/*
27+
Automatically generate fancy toString method
28+
*/
1529
@ToString
30+
/*
31+
Automatically generate equals and hashCode methods
32+
*/
1633
@EqualsAndHashCode
34+
/*
35+
Setter will return 'this'
36+
*/
1737
@Accessors(chain = true)
1838
public class DatabaseSamplingMessage {
1939
private String messageName;

sampling-message-server/src/main/java/de/dhbw/ravensburg/verteiltesysteme/server/rpc/RpcService.java

Lines changed: 65 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,29 @@
99
import io.grpc.stub.StreamObserver;
1010
import lombok.extern.slf4j.Slf4j;
1111

12+
/**
13+
* This class implements remote procedure calls specified the service.proto file by extending the automatically generated gRPC {@link SamplingMessageGrpc.SamplingMessageImplBase}
14+
* This implementation is getting deployed to a gRPC server instance to expose the specified remote procedure calls.
15+
*/
1216
@Slf4j
1317
public class RpcService extends SamplingMessageGrpc.SamplingMessageImplBase {
1418

19+
/*
20+
Business layer object.
21+
*/
1522
private final SamplingMessageService samplingMessageService;
1623

17-
public RpcService(SamplingMessageService samplingMessageService) {
24+
25+
public RpcService(final SamplingMessageService samplingMessageService) {
1826
this.samplingMessageService = samplingMessageService;
1927
}
2028

21-
29+
/**
30+
* Perform Service level status code mapping to data transfer object status mapping.
31+
*
32+
* @param status Service level status object
33+
* @return Transfer level status object
34+
*/
2235
private static SamplingMessageGrpcService.StatusCode fromServiceResultStatus(final ServiceResult.Status status) {
2336
switch (status) {
2437
case SUCCESS:
@@ -36,13 +49,20 @@ private static SamplingMessageGrpcService.StatusCode fromServiceResultStatus(fin
3649
}
3750
}
3851

52+
/**
53+
* Transfer method for creating SamplingMessages as gRPC service call implementation.
54+
*
55+
* @param request The incoming RPC request.
56+
* @param responseObserver The reactive StreamObserver to perform responses.
57+
*/
3958
@Override
4059
public void createSamplingMessage(SamplingMessageGrpcService.CreateSamplingMessageRequest request,
4160
StreamObserver<SamplingMessageGrpcService.CreateSamplingMessageResponse> responseObserver) {
4261
log.info(String.format("Received WriteSamplingMessageRequest for messageName: %s with lifetime in sec: %d", request.getMessageName(), request.getLifetimeInSec()));
4362

44-
log.info("createSamplingMessage: " + request.getMessageName() + "\t" + request.getLifetimeInSec());
4563
final ServiceResult serviceResult = samplingMessageService.createSamplingMessage(request.getMessageName(), request.getLifetimeInSec());
64+
65+
log.info(String.format("Response Status: %s", serviceResult.getStatus().name()));
4666
SamplingMessageGrpcService.CreateSamplingMessageResponse createSamplingMessageResponse = SamplingMessageGrpcService.CreateSamplingMessageResponse
4767
.newBuilder()
4868
.setStatusCode(fromServiceResultStatus(serviceResult.getStatus()))
@@ -52,12 +72,20 @@ public void createSamplingMessage(SamplingMessageGrpcService.CreateSamplingMessa
5272
responseObserver.onCompleted();
5373
}
5474

75+
/**
76+
* Transfer method for writing SamplingMessages as gRPC service call implementation.
77+
*
78+
* @param request The incoming RPC request.
79+
* @param responseObserver The reactive StreamObserver to perform responses.
80+
*/
5581
@Override
5682
public void writeSamplingMessage(SamplingMessageGrpcService.WriteSamplingMessageRequest request,
5783
StreamObserver<SamplingMessageGrpcService.WriteSamplingMessageResponse> responseObserver) {
5884
log.info(String.format("Received WriteSamplingMessageRequest for messageName: %s ", request.getMessageName()));
5985

6086
final ServiceResult serviceResult = samplingMessageService.writeSamplingMessage(request.getMessageName(), request.getMessageContent());
87+
88+
log.info(String.format("Response Status: %s", serviceResult.getStatus().name()));
6189
SamplingMessageGrpcService.WriteSamplingMessageResponse writeSamplingMessageResponse = SamplingMessageGrpcService.WriteSamplingMessageResponse
6290
.newBuilder()
6391
.setStatusCode(fromServiceResultStatus(serviceResult.getStatus()))
@@ -67,12 +95,20 @@ public void writeSamplingMessage(SamplingMessageGrpcService.WriteSamplingMessage
6795
responseObserver.onCompleted();
6896
}
6997

98+
/**
99+
* Transfer method for clearing SamplingMessages as gRPC service call implementation.
100+
*
101+
* @param request The incoming RPC request.
102+
* @param responseObserver The reactive StreamObserver to perform responses.
103+
*/
70104
@Override
71105
public void clearSamplingMessage(SamplingMessageGrpcService.ClearSamplingMessageRequest request,
72106
StreamObserver<SamplingMessageGrpcService.ClearSamplingMessageResponse> responseObserver) {
73107
log.info(String.format("Received ClearSamplingMessageRequest for messageName: %s ", request.getMessageName()));
74108

75109
final ServiceResult serviceResult = samplingMessageService.clearSamplingMessage(request.getMessageName());
110+
111+
log.info(String.format("Response Status: %s", serviceResult.getStatus().name()));
76112
SamplingMessageGrpcService.ClearSamplingMessageResponse clearSamplingMessageResponse = SamplingMessageGrpcService.ClearSamplingMessageResponse
77113
.newBuilder()
78114
.setStatusCode(fromServiceResultStatus(serviceResult.getStatus()))
@@ -82,12 +118,20 @@ public void clearSamplingMessage(SamplingMessageGrpcService.ClearSamplingMessage
82118
responseObserver.onCompleted();
83119
}
84120

121+
/**
122+
* Transfer method for reading SamplingMessages as gRPC service call implementation.
123+
*
124+
* @param request The incoming RPC request.
125+
* @param responseObserver The reactive StreamObserver to perform responses.
126+
*/
85127
@Override
86128
public void readSamplingMessage(SamplingMessageGrpcService.ReadSamplingMessageRequest request,
87129
StreamObserver<SamplingMessageGrpcService.ReadSamplingMessageResponse> responseObserver) {
88130
log.info(String.format("Received ReadSamplingMessageRequest for messageName: %s ", request.getMessageName()));
89131

90132
final ServiceResult<SamplingMessage> samplingMessageServiceResult = samplingMessageService.readSamplingMessage(request.getMessageName());
133+
134+
log.info(String.format("Response Status: %s", samplingMessageServiceResult.getStatus().name()));
91135
final SamplingMessageGrpcService.StatusCode statusCode = fromServiceResultStatus(samplingMessageServiceResult.getStatus());
92136
final SamplingMessageGrpcService.ReadSamplingMessageResponse readSamplingMessageResponse;
93137
if (samplingMessageServiceResult.getResultItem().isPresent()) {
@@ -109,12 +153,20 @@ public void readSamplingMessage(SamplingMessageGrpcService.ReadSamplingMessageRe
109153
responseObserver.onCompleted();
110154
}
111155

156+
/**
157+
* Transfer method for retrieving SamplingMessageStati as gRPC service call implementation.
158+
*
159+
* @param request The incoming RPC request.
160+
* @param responseObserver The reactive StreamObserver to perform responses.
161+
*/
112162
@Override
113163
public void getSamplingMessageStatus(SamplingMessageGrpcService.GetSamplingMessageStatusRequest request,
114164
StreamObserver<SamplingMessageGrpcService.GetSamplingMessageStatusResponse> responseObserver) {
115165
log.info(String.format("Received GetSamplingMessageStatusRequest for messageName: %s ", request.getMessageName()));
116166

117167
final ServiceResult<SamplingMessageStatus> samplingMessageServiceResult = samplingMessageService.getSamplingMessageStatus(request.getMessageName());
168+
169+
log.info(String.format("Response Status: %s", samplingMessageServiceResult.getStatus().name()));
118170
final SamplingMessageGrpcService.StatusCode statusCode = fromServiceResultStatus(samplingMessageServiceResult.getStatus());
119171
final SamplingMessageGrpcService.GetSamplingMessageStatusResponse readSamplingMessageResponse;
120172
if (samplingMessageServiceResult.getResultItem().isPresent()) {
@@ -136,16 +188,24 @@ public void getSamplingMessageStatus(SamplingMessageGrpcService.GetSamplingMessa
136188
responseObserver.onCompleted();
137189
}
138190

191+
/**
192+
* Transfer method for deleting SamplingMessages as gRPC service call implementation.
193+
*
194+
* @param request The incoming RPC request.
195+
* @param responseObserver The reactive StreamObserver to perform responses.
196+
*/
139197
@Override
140198
public void deleteSamplingMessage(SamplingMessageGrpcService.DeleteSamplingMessageRequest request,
141199
StreamObserver<SamplingMessageGrpcService.DeleteSamplingMessageResponse> responseObserver) {
142200
log.info(String.format("Received DeleteSamplingMessageRequest for messageName: %s ", request.getMessageName()));
143201

144202
final ServiceResult serviceResult = samplingMessageService.deleteSamplingMessage(request.getMessageName());
203+
204+
log.info(String.format("Response Status: %s", serviceResult.getStatus().name()));
145205
SamplingMessageGrpcService.DeleteSamplingMessageResponse deleteSamplingMessageResponse = SamplingMessageGrpcService.DeleteSamplingMessageResponse
146-
.newBuilder()
206+
.newBuilder()
147207
.setStatusCode(fromServiceResultStatus(serviceResult.getStatus()))
148-
.build();
208+
.build();
149209

150210
responseObserver.onNext(deleteSamplingMessageResponse);
151211
responseObserver.onCompleted();

sampling-message-server/src/main/java/de/dhbw/ravensburg/verteiltesysteme/server/service/ContractValidator.java renamed to sampling-message-server/src/main/java/de/dhbw/ravensburg/verteiltesysteme/server/service/InputValidator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@
1212
* Provides validation patterns for incoming transit data
1313
*/
1414
@Data
15-
public class ContractValidator {
15+
public class InputValidator {
1616
private ServiceConfig serviceConfig;
1717

18-
public ContractValidator(final ServiceConfig serviceConfig) {
18+
public InputValidator(final ServiceConfig serviceConfig) {
1919
this.serviceConfig = serviceConfig;
2020
}
2121

sampling-message-server/src/main/java/de/dhbw/ravensburg/verteiltesysteme/server/service/SamplingMessageService.java

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,63 @@
33
import de.dhbw.ravensburg.verteiltesysteme.server.service.model.SamplingMessage;
44
import de.dhbw.ravensburg.verteiltesysteme.server.service.model.SamplingMessageStatus;
55

6+
/**
7+
* This interface represents the high-level Service for SamplingMessages
8+
*/
69
public interface SamplingMessageService {
10+
11+
/**
12+
* Perform SamplingMessage creation.
13+
* The created SamplingMessage's content will be empty after creation.
14+
* It is valid from provided lifetime in seconds. validity = now + lifetime
15+
*
16+
* @param messageName The unique identifier of the SamplingMessage to be created.
17+
* @param lifetimeInSec The lifetime of the SamplingMessage to be created.
18+
* @return {@link ServiceResult} represents the result of the high-level operation.
19+
*/
720
ServiceResult createSamplingMessage(String messageName, Long lifetimeInSec);
821

22+
/**
23+
* Update the content of an already existing SamplingMessage.
24+
* The validity will be updated according to the lifetime specified while creation. validity = now + lifetime
25+
*
26+
* @param messageName The unique identifier of an already existing SamplingMessage.
27+
* @param messageContent The new SamplingMessage's content.
28+
* @return {@link ServiceResult} represents the result of the high-level operation.
29+
*/
930
ServiceResult writeSamplingMessage(String messageName, String messageContent);
1031

32+
/**
33+
* Clear the content of an already existing SamplingMessage.
34+
* This will invalidate the SamplingMessage. validity = now + 0
35+
*
36+
* @param messageName The unique identifier of an already existing SamplingMessage.
37+
* @return {@link ServiceResult} represents the result of the high-level operation.
38+
*/
1139
ServiceResult clearSamplingMessage(String messageName);
1240

41+
/**
42+
* Read an already existing SamplingMessage.
43+
*
44+
* @param messageName The unique identifier of an already existing SamplingMessage.
45+
* @return {@link ServiceResult<SamplingMessage>} represents the result of the high-level operation.
46+
*/
1347
ServiceResult<SamplingMessage> readSamplingMessage(String messageName);
1448

49+
/**
50+
* Get the SamplingMessageStatus of an already existing SamplingMessage.
51+
*
52+
* @param messageName The unique identifier of an already existing SamplingMessage.
53+
* @return {@link ServiceResult<SamplingMessageStatus>} represents the result of the high-level operation.
54+
*/
1555
ServiceResult<SamplingMessageStatus> getSamplingMessageStatus(String messageName);
1656

57+
/**
58+
* Delete an already existing SamplingMessage.
59+
* This will free the unique identifier for re-use.
60+
*
61+
* @param messageName The unique identifier of an already existing SamplingMessage to be deleted.
62+
* @return {@link ServiceResult} represents the result of the high-level operation.
63+
*/
1764
ServiceResult deleteSamplingMessage(String messageName);
1865
}

0 commit comments

Comments
 (0)