Sunday, June 02, 2019

Java 12: Switch Expressions

In Java 12, the switch statement has been enhanced so that it can be used as an expression. It is now also possible to switch on multiple constants in a single case, resulting in code that is more concise and readable. These enhancements are a preview language feature, which means that they must be explicitly enabled in the Java compiler and runtime using the --enable-preview flag.

Consider the following switch statement:

int result = -1;
switch (input) {
  case 0:
  case 1:
    result = 1;
    break;
  case 2:
    result = 4;
    break;
  case 3:
    System.out.println("Calculating: " + input);
    result = compute(input);
    System.out.println("Result: " + result);
    break;
  default:
    throw new IllegalArgumentException("Invalid input " + input);
}

In Java 12, this can be rewritten using a switch expression as follows:

final int result = switch (input) {
  case 0, 1 -> 1;
  case 2 -> 4;
  case 3 -> {
    System.out.println("Calculating: " + input);
    final int output = compute(input);
    System.out.println("Result: " + output);
    break output;
  }
  default -> throw new IllegalArgumentException("Invalid input " + input);
};

As illustrated above:

  • The switch is being used in an expression to assign a value to the result integer
  • There are multiple labels separated with a comma in a single case
  • There is no fall-through with the new case X -> syntax. Only the expression or statement to the right of the arrow is executed
  • The break statement takes an argument which becomes the value returned by the switch expression (similar to a return)

Saturday, June 01, 2019

Using Java 12 in Eclipse

1. Install JDK 12

Link: https://www.oracle.com/technetwork/java/javase/downloads/jdk12-downloads-5295953.html

2. Install Eclipse 4.11

Link: https://download.eclipse.org/eclipse/downloads/drops4/R-4.11-201903070500

3. Install Eclipse Java 12 Support

Start Eclipse and go to Help > Install New Software. Add Update Site: https://download.eclipse.org/eclipse/updates/4.11-P-builds. Install Eclipse Java 12 support for 2019-03 development stream from the list of available software

4. Add Java 12 JRE to Eclipse

Go to Window > Preferences, navigate to Java > Installed JREs and add the Java 12 JRE (that you installed in Step 1). Tick the box to make it the default JRE

5. Upgrade Compiler Compliance Level

In your preferences, go to Java > Compiler and select "12" as the "Compiler compliance level". In addition, tick "Enable preview features".

That's it! Now you can try out Switch Expressions!

Monday, April 22, 2019

Load Testing Web Apps Using Apache JMeter

Apache JMeter is an excellent tool for simulating user load on a web application in order to test performance. You can easily build a test plan by specifying the number of users and the interval between requests, and JMeter will then spawn a thread per user and hit your webapp. At the end of the test, you will get a performance summary report showing the min, max and average response times.

Here is a quick walkthrough of using JMeter:

  • Download JMeter from here
  • Run the jmeter.bat (for Windows) or jmeter (for Unix) file to start the JMeter GUI
  • Add a "Thread Group" to the Test Plan and configure the number of users, ramp-up period and duration of the test
  • Add a "HTTP Request" to the Thread Group and set the server URL and any request parameters
  • Add a "Constant Timer" (or any other Timer) to the HTTP Request and specify the time interval between requests
  • Add a "Summary Report" to the Thread Group
  • Add a "View Results in Table" to the Thread Group
  • Run the test and view the Summary Report

There are a number of other components that can be added to the test plan as well. For example, you can add a "HTTP Header Manager" to the Thread Group if you want to add any fields to the request's header. The "Response Assertion" component is useful for checking if you have received the desired response from the server.

Once you are happy with your test plan, you can save it to a file and then run it on the command line whenever you need to load test your application or as part of your continuous build process.

Tuesday, January 01, 2019

fahd.blog in 2018

Happy 2019, everyone!

I'd like to wish everyone a great start to an even greater new year!

In keeping with tradition, here's one last look back at fahd.blog in 2018.

During 2018, I posted 14 new entries on fahd.blog. I am also thrilled that I have more readers from all over the world! Thanks for reading and especially for giving feedback.

Top 5 posts of 2018:

I'm going to be writing a lot more this year, so stay tuned for more great techie tips, tricks and hacks! :)

Related posts:

Saturday, December 29, 2018

Java 11: Running single-file programs and "shebang" scripts

In Java 11, the java launcher has been enhanced to run single-file source code programs directly, without having to compile them first.

For example, consider the following class that simply adds its arguments:

import java.util.*;
public class Add {
  public static void main(String[] args) {
    System.out.println(Arrays.stream(args)
      .mapToInt(Integer::parseInt)
      .sum());
  }
}

In previous versions of Java, you would first have to compile the source file and then run it as follows:

$ javac Add.java
$ java Add 1 2 3
6

In Java 11, there is no need to compile the file! You can run it directly as follows:

$ java Add.java 1 2 3
6

It's not even necessary to have the ".java" extension on your file. You can call the file whatever you like but, if the file does not have the ".java" extension, you need to specify the --source option in order to tell the java launcher to use source-file mode. In the example below, I have renamed my file to MyJava.code and run it with --source 11:

$ java --source 11 MyJava.code 1 2 3
6

It gets even better! It is also possible to run a Java program directly on Unix-based systems using the shebang (#!) mechanism.

For example, you can take the code from Add.java and put it in a file called add, with the shebang at the start of the file, as shown below:

#!/path/to/java --source 11
import java.util.*;
public class Add {
  public static void main(String[] args) {
    System.out.println(Arrays.stream(args)
      .mapToInt(Integer::parseInt)
      .sum());
  }
}

Mark the file as executable using chmod and run it as follows:

$ chmod +x add
$ ./add 1 2 3
6