Skip to content

Commit 20ea465

Browse files
anuragagarwal561994iluwatar
authored andcommitted
Java 11 migrate remaining q-r (iluwatar#1121)
* Moves queue-load-leveling to Java 11 * Moves reactor to Java 11 * Moves reader-writer-lock to Java 11 * Moves repository to Java 11 * Moves resource-acquisition-is-initialization to Java 11 * Moves retry to Java 11 * Moves role-object to Java 11
1 parent cd2a2e7 commit 20ea465

File tree

52 files changed

+422
-552
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+422
-552
lines changed

queue-load-leveling/src/main/java/com/iluwatar/queue/load/leveling/App.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -78,17 +78,17 @@ public static void main(String[] args) {
7878

7979
try {
8080
// Create a MessageQueue object.
81-
MessageQueue msgQueue = new MessageQueue();
81+
var msgQueue = new MessageQueue();
8282

8383
LOGGER.info("Submitting TaskGenerators and ServiceExecutor threads.");
8484

8585
// Create three TaskGenerator threads. Each of them will submit different number of jobs.
86-
final Runnable taskRunnable1 = new TaskGenerator(msgQueue, 5);
87-
final Runnable taskRunnable2 = new TaskGenerator(msgQueue, 1);
88-
final Runnable taskRunnable3 = new TaskGenerator(msgQueue, 2);
86+
final var taskRunnable1 = new TaskGenerator(msgQueue, 5);
87+
final var taskRunnable2 = new TaskGenerator(msgQueue, 1);
88+
final var taskRunnable3 = new TaskGenerator(msgQueue, 2);
8989

9090
// Create e service which should process the submitted jobs.
91-
final Runnable srvRunnable = new ServiceExecutor(msgQueue);
91+
final var srvRunnable = new ServiceExecutor(msgQueue);
9292

9393
// Create a ThreadPool of 2 threads and
9494
// submit all Runnable task for execution to executor..

queue-load-leveling/src/main/java/com/iluwatar/queue/load/leveling/MessageQueue.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public class MessageQueue {
4040

4141
// Default constructor when called creates Blocking Queue object.
4242
public MessageQueue() {
43-
this.blkQueue = new ArrayBlockingQueue<Message>(1024);
43+
this.blkQueue = new ArrayBlockingQueue<>(1024);
4444
}
4545

4646
/**
@@ -62,13 +62,11 @@ public void submitMsg(Message msg) {
6262
* them. Retrieves and removes the head of this queue, or returns null if this queue is empty.
6363
*/
6464
public Message retrieveMsg() {
65-
Message retrievedMsg = null;
6665
try {
67-
retrievedMsg = blkQueue.poll();
66+
return blkQueue.poll();
6867
} catch (Exception e) {
6968
LOGGER.error(e.getMessage());
7069
}
71-
72-
return retrievedMsg;
70+
return null;
7371
}
74-
}
72+
}

queue-load-leveling/src/main/java/com/iluwatar/queue/load/leveling/ServiceExecutor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public ServiceExecutor(MessageQueue msgQueue) {
4646
public void run() {
4747
try {
4848
while (!Thread.currentThread().isInterrupted()) {
49-
Message msg = msgQueue.retrieveMsg();
49+
var msg = msgQueue.retrieveMsg();
5050

5151
if (null != msg) {
5252
LOGGER.info(msg.toString() + " is served.");

queue-load-leveling/src/main/java/com/iluwatar/queue/load/leveling/TaskGenerator.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,11 @@ public void submit(Message msg) {
6363
* submission TaskGenerator thread will sleep for 1 second.
6464
*/
6565
public void run() {
66-
67-
int count = this.msgCount;
66+
var count = this.msgCount;
6867

6968
try {
7069
while (count > 0) {
71-
String statusMsg = "Message-" + count + " submitted by " + Thread.currentThread().getName();
70+
var statusMsg = "Message-" + count + " submitted by " + Thread.currentThread().getName();
7271
this.submit(new Message(statusMsg));
7372

7473
LOGGER.info(statusMsg);

queue-load-leveling/src/test/java/com/iluwatar/queue/load/leveling/AppTest.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,12 @@
2525

2626
import org.junit.jupiter.api.Test;
2727

28-
import java.io.IOException;
29-
3028
/**
3129
* Application Test
3230
*/
3331
public class AppTest {
3432
@Test
35-
public void test() throws IOException {
36-
String[] args = {};
37-
App.main(args);
33+
public void test() {
34+
App.main(new String[]{});
3835
}
3936
}

queue-load-leveling/src/test/java/com/iluwatar/queue/load/leveling/MessageQueueTest.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,25 +23,23 @@
2323

2424
package com.iluwatar.queue.load.leveling;
2525

26-
import org.junit.jupiter.api.Test;
27-
2826
import static org.junit.jupiter.api.Assertions.assertEquals;
2927

28+
import org.junit.jupiter.api.Test;
29+
3030
/**
31-
*
3231
* Test case for submitting and retrieving messages from Blocking Queue.
33-
*
3432
*/
3533
public class MessageQueueTest {
3634

3735
@Test
3836
public void messageQueueTest() {
39-
40-
MessageQueue msgQueue = new MessageQueue();
41-
37+
38+
var msgQueue = new MessageQueue();
39+
4240
// submit message
4341
msgQueue.submitMsg(new Message("MessageQueue Test"));
44-
42+
4543
// retrieve message
4644
assertEquals("MessageQueue Test", msgQueue.retrieveMsg().getMsg());
4745
}

queue-load-leveling/src/test/java/com/iluwatar/queue/load/leveling/MessageTest.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,23 +23,21 @@
2323

2424
package com.iluwatar.queue.load.leveling;
2525

26-
import org.junit.jupiter.api.Test;
27-
2826
import static org.junit.jupiter.api.Assertions.assertEquals;
2927

28+
import org.junit.jupiter.api.Test;
29+
3030
/**
31-
*
3231
* Test case for creating and checking the Message.
33-
*
3432
*/
3533
public class MessageTest {
36-
34+
3735
@Test
3836
public void messageTest() {
39-
37+
4038
// Parameterized constructor test.
41-
String testMsg = "Message Test";
42-
Message msg = new Message(testMsg);
39+
var testMsg = "Message Test";
40+
var msg = new Message(testMsg);
4341
assertEquals(testMsg, msg.getMsg());
4442
}
4543
}

queue-load-leveling/src/test/java/com/iluwatar/queue/load/leveling/TaskGenSrvExeTest.java

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,25 +26,23 @@
2626
import org.junit.jupiter.api.Test;
2727

2828
/**
29-
*
30-
* Test case for submitting Message to Blocking Queue by TaskGenerator
31-
* and retrieve the message by ServiceExecutor.
32-
*
29+
* Test case for submitting Message to Blocking Queue by TaskGenerator and retrieve the message by
30+
* ServiceExecutor.
3331
*/
3432
public class TaskGenSrvExeTest {
3533

3634
@Test
3735
public void taskGeneratorTest() {
38-
MessageQueue msgQueue = new MessageQueue();
39-
36+
var msgQueue = new MessageQueue();
37+
4038
// Create a task generator thread with 1 job to submit.
41-
Runnable taskRunnable = new TaskGenerator(msgQueue, 1);
42-
Thread taskGenThr = new Thread(taskRunnable);
39+
var taskRunnable = new TaskGenerator(msgQueue, 1);
40+
var taskGenThr = new Thread(taskRunnable);
4341
taskGenThr.start();
44-
42+
4543
// Create a service executor thread.
46-
Runnable srvRunnable = new ServiceExecutor(msgQueue);
47-
Thread srvExeThr = new Thread(srvRunnable);
44+
var srvRunnable = new ServiceExecutor(msgQueue);
45+
var srvExeThr = new Thread(srvRunnable);
4846
srvExeThr.start();
4947
}
5048

reactor/src/main/java/com/iluwatar/reactor/app/App.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -124,15 +124,17 @@ public void start() throws IOException {
124124
* This represents application specific business logic that dispatcher will call on appropriate
125125
* events. These events are read events in our example.
126126
*/
127-
LoggingHandler loggingHandler = new LoggingHandler();
127+
var loggingHandler = new LoggingHandler();
128128

129129
/*
130130
* Our application binds to multiple channels and uses same logging handler to handle incoming
131131
* log requests.
132132
*/
133-
reactor.registerChannel(tcpChannel(6666, loggingHandler))
133+
reactor
134+
.registerChannel(tcpChannel(6666, loggingHandler))
134135
.registerChannel(tcpChannel(6667, loggingHandler))
135-
.registerChannel(udpChannel(6668, loggingHandler)).start();
136+
.registerChannel(udpChannel(6668, loggingHandler))
137+
.start();
136138
}
137139

138140
/**
@@ -144,20 +146,20 @@ public void start() throws IOException {
144146
public void stop() throws InterruptedException, IOException {
145147
reactor.stop();
146148
dispatcher.stop();
147-
for (AbstractNioChannel channel : channels) {
149+
for (var channel : channels) {
148150
channel.getJavaChannel().close();
149151
}
150152
}
151153

152154
private AbstractNioChannel tcpChannel(int port, ChannelHandler handler) throws IOException {
153-
NioServerSocketChannel channel = new NioServerSocketChannel(port, handler);
155+
var channel = new NioServerSocketChannel(port, handler);
154156
channel.bind();
155157
channels.add(channel);
156158
return channel;
157159
}
158160

159161
private AbstractNioChannel udpChannel(int port, ChannelHandler handler) throws IOException {
160-
NioDatagramChannel channel = new NioDatagramChannel(port, handler);
162+
var channel = new NioDatagramChannel(port, handler);
161163
channel.bind();
162164
channels.add(channel);
163165
return channel;

reactor/src/main/java/com/iluwatar/reactor/app/AppClient.java

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525

2626
import java.io.IOException;
2727
import java.io.InputStream;
28-
import java.io.OutputStream;
2928
import java.io.PrintWriter;
3029
import java.net.DatagramPacket;
3130
import java.net.DatagramSocket;
@@ -55,7 +54,7 @@ public class AppClient {
5554
* @throws IOException if any I/O error occurs.
5655
*/
5756
public static void main(String[] args) throws IOException {
58-
AppClient appClient = new AppClient();
57+
var appClient = new AppClient();
5958
appClient.start();
6059
}
6160

@@ -118,8 +117,8 @@ public TcpLoggingClient(String clientName, int serverPort) {
118117
@Override
119118
public void run() {
120119
try (Socket socket = new Socket(InetAddress.getLocalHost(), serverPort)) {
121-
OutputStream outputStream = socket.getOutputStream();
122-
PrintWriter writer = new PrintWriter(outputStream);
120+
var outputStream = socket.getOutputStream();
121+
var writer = new PrintWriter(outputStream);
123122
sendLogRequests(writer, socket.getInputStream());
124123
} catch (IOException e) {
125124
LOGGER.error("error sending requests", e);
@@ -128,12 +127,12 @@ public void run() {
128127
}
129128

130129
private void sendLogRequests(PrintWriter writer, InputStream inputStream) throws IOException {
131-
for (int i = 0; i < 4; i++) {
130+
for (var i = 0; i < 4; i++) {
132131
writer.println(clientName + " - Log request: " + i);
133132
writer.flush();
134133

135-
byte[] data = new byte[1024];
136-
int read = inputStream.read(data, 0, data.length);
134+
var data = new byte[1024];
135+
var read = inputStream.read(data, 0, data.length);
137136
if (read == 0) {
138137
LOGGER.info("Read zero bytes");
139138
} else {
@@ -167,17 +166,17 @@ public UdpLoggingClient(String clientName, int port) throws UnknownHostException
167166

168167
@Override
169168
public void run() {
170-
try (DatagramSocket socket = new DatagramSocket()) {
171-
for (int i = 0; i < 4; i++) {
169+
try (var socket = new DatagramSocket()) {
170+
for (var i = 0; i < 4; i++) {
172171

173-
String message = clientName + " - Log request: " + i;
174-
DatagramPacket request =
175-
new DatagramPacket(message.getBytes(), message.getBytes().length, remoteAddress);
172+
var message = clientName + " - Log request: " + i;
173+
var bytes = message.getBytes();
174+
var request = new DatagramPacket(bytes, bytes.length, remoteAddress);
176175

177176
socket.send(request);
178177

179-
byte[] data = new byte[1024];
180-
DatagramPacket reply = new DatagramPacket(data, data.length);
178+
var data = new byte[1024];
179+
var reply = new DatagramPacket(data, data.length);
181180
socket.receive(reply);
182181
if (reply.getLength() == 0) {
183182
LOGGER.info("Read zero bytes");

reactor/src/main/java/com/iluwatar/reactor/app/LoggingHandler.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public void handleChannelRead(AbstractNioChannel channel, Object readObject, Sel
5454
doLogging((ByteBuffer) readObject);
5555
sendReply(channel, key);
5656
} else if (readObject instanceof DatagramPacket) {
57-
DatagramPacket datagram = (DatagramPacket) readObject;
57+
var datagram = (DatagramPacket) readObject;
5858
doLogging(datagram.getData());
5959
sendReply(channel, datagram, key);
6060
} else {
@@ -71,14 +71,14 @@ private static void sendReply(
7171
* Create a reply acknowledgement datagram packet setting the receiver to the sender of incoming
7272
* message.
7373
*/
74-
DatagramPacket replyPacket = new DatagramPacket(ByteBuffer.wrap(ACK));
74+
var replyPacket = new DatagramPacket(ByteBuffer.wrap(ACK));
7575
replyPacket.setReceiver(incomingPacket.getSender());
7676

7777
channel.write(replyPacket, key);
7878
}
7979

8080
private static void sendReply(AbstractNioChannel channel, SelectionKey key) {
81-
ByteBuffer buffer = ByteBuffer.wrap(ACK);
81+
var buffer = ByteBuffer.wrap(ACK);
8282
channel.write(buffer, key);
8383
}
8484

reactor/src/main/java/com/iluwatar/reactor/framework/AbstractNioChannel.java

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,7 @@ public abstract class AbstractNioChannel {
4646

4747
private final SelectableChannel channel;
4848
private final ChannelHandler handler;
49-
private final Map<SelectableChannel, Queue<Object>> channelToPendingWrites =
50-
new ConcurrentHashMap<>();
49+
private final Map<SelectableChannel, Queue<Object>> channelToPendingWrites;
5150
private NioReactor reactor;
5251

5352
/**
@@ -59,6 +58,7 @@ public abstract class AbstractNioChannel {
5958
public AbstractNioChannel(ChannelHandler handler, SelectableChannel channel) {
6059
this.handler = handler;
6160
this.channel = channel;
61+
this.channelToPendingWrites = new ConcurrentHashMap<>();
6262
}
6363

6464
/**
@@ -117,18 +117,14 @@ public ChannelHandler getHandler() {
117117
* whole pending block of data at once.
118118
*/
119119
void flush(SelectionKey key) throws IOException {
120-
Queue<Object> pendingWrites = channelToPendingWrites.get(key.channel());
121-
while (true) {
122-
Object pendingWrite = pendingWrites.poll();
123-
if (pendingWrite == null) {
124-
// We don't have anything more to write so channel is interested in reading more data
125-
reactor.changeOps(key, SelectionKey.OP_READ);
126-
break;
127-
}
128-
120+
var pendingWrites = channelToPendingWrites.get(key.channel());
121+
Object pendingWrite;
122+
while ((pendingWrite = pendingWrites.poll()) != null) {
129123
// ask the concrete channel to make sense of data and write it to java channel
130124
doWrite(pendingWrite, key);
131125
}
126+
// We don't have anything more to write so channel is interested in reading more data
127+
reactor.changeOps(key, SelectionKey.OP_READ);
132128
}
133129

134130
/**
@@ -162,7 +158,7 @@ void flush(SelectionKey key) throws IOException {
162158
* @param key the key which is writable.
163159
*/
164160
public void write(Object data, SelectionKey key) {
165-
Queue<Object> pendingWrites = this.channelToPendingWrites.get(key.channel());
161+
var pendingWrites = this.channelToPendingWrites.get(key.channel());
166162
if (pendingWrites == null) {
167163
synchronized (this.channelToPendingWrites) {
168164
pendingWrites = this.channelToPendingWrites.get(key.channel());

0 commit comments

Comments
 (0)