diff --git a/apache-solrj/src/test/java/com/baeldung/solrjava/SolrJavaIntegrationTest.java b/apache-solrj/src/test/java/com/baeldung/solrjava/SolrJavaLiveTest.java
similarity index 98%
rename from apache-solrj/src/test/java/com/baeldung/solrjava/SolrJavaIntegrationTest.java
rename to apache-solrj/src/test/java/com/baeldung/solrjava/SolrJavaLiveTest.java
index 8b5fe77c6f67..eaf0271b551a 100644
--- a/apache-solrj/src/test/java/com/baeldung/solrjava/SolrJavaIntegrationTest.java
+++ b/apache-solrj/src/test/java/com/baeldung/solrjava/SolrJavaLiveTest.java
@@ -12,7 +12,7 @@
import org.junit.Before;
import org.junit.Test;
-public class SolrJavaIntegrationTest {
+public class SolrJavaLiveTest {
private SolrJavaIntegration solrJavaIntegration;
diff --git a/core-java-io/src/test/java/org/baeldung/java/io/JavaInputStreamToXUnitTest.java b/core-java-io/src/test/java/org/baeldung/java/io/JavaInputStreamToXUnitTest.java
index f1bea1eefbf1..c49681efb83a 100644
--- a/core-java-io/src/test/java/org/baeldung/java/io/JavaInputStreamToXUnitTest.java
+++ b/core-java-io/src/test/java/org/baeldung/java/io/JavaInputStreamToXUnitTest.java
@@ -14,8 +14,10 @@
import java.io.*;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
+import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import java.util.Scanner;
+import java.util.UUID;
import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic;
import static org.hamcrest.Matchers.equalTo;
@@ -111,6 +113,19 @@ public final void givenUsingCommonsIoWithCopy_whenConvertingAnInputStreamToAStri
assertThat(writer.toString(), equalTo(originalString));
}
+
+ @Test
+ public final void givenUsingTempFile_whenConvertingAnInputStreamToAString_thenCorrect() throws IOException {
+ final String originalString = randomAlphabetic(DEFAULT_SIZE);
+ final InputStream inputStream = new ByteArrayInputStream(originalString.getBytes());
+
+ // When
+ Path tempFile = java.nio.file.Files.createTempDirectory("").resolve(UUID.randomUUID().toString() + ".tmp");
+ java.nio.file.Files.copy(inputStream, tempFile, StandardCopyOption.REPLACE_EXISTING);
+ String result = new String(java.nio.file.Files.readAllBytes(tempFile));
+
+ assertThat(result, equalTo(originalString));
+ }
// tests - InputStream to byte[]
diff --git a/core-kotlin/src/main/java/com/baeldung/mavenjavakotlin/Application.java b/core-kotlin/src/main/java/com/baeldung/mavenjavakotlin/Application.java
new file mode 100644
index 000000000000..e2cc0f1e017d
--- /dev/null
+++ b/core-kotlin/src/main/java/com/baeldung/mavenjavakotlin/Application.java
@@ -0,0 +1,26 @@
+package com.baeldung.mavenjavakotlin;
+
+import com.baeldung.mavenjavakotlin.services.JavaService;
+import com.baeldung.mavenjavakotlin.services.KotlinService;
+
+public class Application {
+
+ private static final String JAVA = "java";
+ private static final String KOTLIN = "kotlin";
+
+ public static void main(String[] args) {
+ String language = args[0];
+ switch (language) {
+ case JAVA:
+ new JavaService().sayHello();
+ break;
+ case KOTLIN:
+ new KotlinService().sayHello();
+ break;
+ default:
+ // Do nothing
+ break;
+ }
+ }
+
+}
diff --git a/core-kotlin/src/main/java/com/baeldung/mavenjavakotlin/services/JavaService.java b/core-kotlin/src/main/java/com/baeldung/mavenjavakotlin/services/JavaService.java
new file mode 100644
index 000000000000..b767e761af9d
--- /dev/null
+++ b/core-kotlin/src/main/java/com/baeldung/mavenjavakotlin/services/JavaService.java
@@ -0,0 +1,9 @@
+package com.baeldung.mavenjavakotlin.services;
+
+public class JavaService {
+
+ public void sayHello() {
+ System.out.println("Java says 'Hello World!'");
+ }
+
+}
diff --git a/core-kotlin/src/main/kotlin/com/baeldung/mavenjavakotlin/services/KotlinService.kt b/core-kotlin/src/main/kotlin/com/baeldung/mavenjavakotlin/services/KotlinService.kt
new file mode 100644
index 000000000000..114b1c88df05
--- /dev/null
+++ b/core-kotlin/src/main/kotlin/com/baeldung/mavenjavakotlin/services/KotlinService.kt
@@ -0,0 +1,9 @@
+package com.baeldung.mavenjavakotlin.services
+
+class KotlinService {
+
+ fun sayHello() {
+ System.out.println("Kotlin says 'Hello World!'")
+ }
+
+}
\ No newline at end of file
diff --git a/ejb/wildfly/wildfly-mdb/pom.xml b/ejb/wildfly/wildfly-mdb/pom.xml
new file mode 100644
index 000000000000..0b2ec7d5a3c2
--- /dev/null
+++ b/ejb/wildfly/wildfly-mdb/pom.xml
@@ -0,0 +1,21 @@
+
+ 4.0.0
+ widlfly-mdb
+
+
+ com.baeldung.wildfly
+ wildfly-example
+ 0.0.1-SNAPSHOT
+
+
+
+
+
+ javax
+ javaee-api
+ ${javaee-api.version}
+ provided
+
+
+
\ No newline at end of file
diff --git a/ejb/wildfly/wildfly-mdb/src/com/baeldung/wildfly/mdb/ReadMessageMDB.java b/ejb/wildfly/wildfly-mdb/src/com/baeldung/wildfly/mdb/ReadMessageMDB.java
new file mode 100644
index 000000000000..6997f92201a5
--- /dev/null
+++ b/ejb/wildfly/wildfly-mdb/src/com/baeldung/wildfly/mdb/ReadMessageMDB.java
@@ -0,0 +1,28 @@
+package com.baeldung.wildfly.mdb;
+
+import javax.ejb.ActivationConfigProperty;
+import javax.ejb.MessageDriven;
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.MessageListener;
+import javax.jms.TextMessage;
+
+/**
+ * Message-Driven Bean implementation class for: ReadMessageMDB
+ */
+@MessageDriven(
+ activationConfig = {
+ @ActivationConfigProperty(propertyName = "destination", propertyValue = "tutorialQueue"),
+ @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
+})
+public class ReadMessageMDB implements MessageListener {
+
+ public void onMessage(Message message) {
+ TextMessage textMessage = (TextMessage) message;
+ try {
+ System.out.println("Message received: " + textMessage.getText());
+ } catch (JMSException e) {
+ System.out.println("Error while trying to consume messages: " + e.getMessage());
+ }
+ }
+}
\ No newline at end of file
diff --git a/ejb/wildfly/wildfly-mdb/src/com/baeldung/wildfly/mdb/SendMessageServlet.java b/ejb/wildfly/wildfly-mdb/src/com/baeldung/wildfly/mdb/SendMessageServlet.java
new file mode 100644
index 000000000000..7dcd04b43f14
--- /dev/null
+++ b/ejb/wildfly/wildfly-mdb/src/com/baeldung/wildfly/mdb/SendMessageServlet.java
@@ -0,0 +1,52 @@
+package baeldung.com.example.servlet;
+
+import java.io.IOException;
+
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.JMSException;
+import javax.jms.MessageProducer;
+import javax.jms.Queue;
+import javax.jms.Session;
+import javax.jms.TextMessage;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+
+@WebServlet("/SendMessageServlet")
+public class SendMessageServlet extends HttpServlet {
+
+ @Override
+ protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
+ String text = req.getParameter("text") != null ? req.getParameter("text") : "Hello World";
+
+ try (
+ Context ic = new InitialContext();
+
+ ConnectionFactory cf = (ConnectionFactory) ic.lookup("/ConnectionFactory");
+ Queue queue = (Queue) ic.lookup("queue/tutorialQueue");
+
+ Connection connection = cf.createConnection();
+ ) {
+ Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+ MessageProducer publisher = session.createProducer(queue);
+
+ connection.start();
+
+ TextMessage message = session.createTextMessage(text);
+ publisher.send(message);
+
+ } catch (NamingException | JMSException e) {
+ res.getWriter().println("Error while trying to send <" + text + "> message: " + e.getMessage());
+ }
+
+ res.getWriter().println("Message sent: " + text);
+ }
+
+}
\ No newline at end of file
diff --git a/javax-servlets/README.md b/javax-servlets/README.md
index d39a0cca1336..3c3b17996bf8 100644
--- a/javax-servlets/README.md
+++ b/javax-servlets/README.md
@@ -6,3 +6,4 @@
- [Example of Downloading File in a Servlet](http://www.baeldung.com/servlet-download-file)
- [Returning a JSON Response from a Servlet](http://www.baeldung.com/servlet-json-response)
- [Java EE Servlet Exception Handling](http://www.baeldung.com/servlet-exceptions)
+- [Context and Servlet Initialization Parameters](http://www.baeldung.com/context-servlet-initialization-param)
diff --git a/persistence-modules/spring-hibernate-3/src/main/resources/exceptionDemoPersistenceConfig.xml b/persistence-modules/spring-hibernate-3/src/main/resources/exceptionDemoPersistenceConfig.xml
index 09314c67b111..263e902e7cb8 100644
--- a/persistence-modules/spring-hibernate-3/src/main/resources/exceptionDemoPersistenceConfig.xml
+++ b/persistence-modules/spring-hibernate-3/src/main/resources/exceptionDemoPersistenceConfig.xml
@@ -17,7 +17,7 @@
-
+
diff --git a/persistence-modules/spring-hibernate-3/src/main/resources/persistenceConfig.xml b/persistence-modules/spring-hibernate-3/src/main/resources/persistenceConfig.xml
index e7ef9ad76588..f39817383baf 100644
--- a/persistence-modules/spring-hibernate-3/src/main/resources/persistenceConfig.xml
+++ b/persistence-modules/spring-hibernate-3/src/main/resources/persistenceConfig.xml
@@ -5,7 +5,7 @@
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd"
>
-
+
diff --git a/pom.xml b/pom.xml
index d6f9081ed440..5321ec751ef3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -269,7 +269,7 @@
java-ee-8-security-api
spring-webflux-amqp
antlr
- maven-archetype
+ maven-archetype
apache-meecrowave
diff --git a/spring-batch/src/main/java/org/baeldung/batchscheduler/SpringBatchScheduler.java b/spring-batch/src/main/java/org/baeldung/batchscheduler/SpringBatchScheduler.java
new file mode 100644
index 000000000000..edb9b7cfa54e
--- /dev/null
+++ b/spring-batch/src/main/java/org/baeldung/batchscheduler/SpringBatchScheduler.java
@@ -0,0 +1,172 @@
+package org.baeldung.batchscheduler;
+
+import java.util.Date;
+import java.util.IdentityHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import org.baeldung.batchscheduler.model.Book;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.batch.core.Job;
+import org.springframework.batch.core.JobExecution;
+import org.springframework.batch.core.JobParametersBuilder;
+import org.springframework.batch.core.Step;
+import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
+import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
+import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
+import org.springframework.batch.core.launch.JobLauncher;
+import org.springframework.batch.core.launch.support.SimpleJobLauncher;
+import org.springframework.batch.core.repository.JobRepository;
+import org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean;
+import org.springframework.batch.item.ItemWriter;
+import org.springframework.batch.item.file.FlatFileItemReader;
+import org.springframework.batch.item.file.builder.FlatFileItemReaderBuilder;
+import org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper;
+import org.springframework.batch.support.transaction.ResourcelessTransactionManager;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.scheduling.TaskScheduler;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
+import org.springframework.scheduling.support.ScheduledMethodRunnable;
+
+@Configuration
+@EnableBatchProcessing
+@EnableScheduling
+public class SpringBatchScheduler {
+
+ private final Logger logger = LoggerFactory.getLogger(SpringBatchScheduler.class);
+
+ private AtomicBoolean enabled = new AtomicBoolean(true);
+
+ private Date currentLaunchDate;
+
+ private final Map