In-container Java Development: Netbeans
Note: This tutorial requires you to run your app locally on your own computer
Using your git client clone the repository.
git clone https://github.com/docker/labs cd labs/developer-tools/java-debugging
Open NetBeans IDE, Click on
app and click on
Building the application
The application is a basic Spring MVC application that receives user input from a form, writes the data to a database, and queries the database.
The application is built using Maven. To build the application click on
The results of the build will be displayed in the console.
Running the application
Open a terminal and go to the application directory. Start the application with docker-compose
> docker-compose up
Docker will build the images for Apache Tomcat and MySQL and start the containers. It will also mount the application directory (
./app/target/UserSignup) as a data volume on the host system to the Tomcat webapps directory in the web server container.
Open a browser window and go to: ‘localhost:8080’; you should see the Tomcat home page
When the Tomcat image was built, the user roles were also configured. Click on the
Manager App button to see the deployed applications. When prompted for username and password, enter
manager respectively to log into the Tomcat Web Application Manager page.
You can use the Manager page to
Undeploy web applications.
To go to the application, Click on
Debugging the Application
In the application, click on
Signup to create a new user. Fill out the registration form and click
Yes to confirm.
Test out the login.
Configure Remote Debugging
In the menu click on
Make sure that the port is set to 8000, click on
Finding the Error
Since the problem is with the password, lets see how the password is set in the User class. In the User class, the setter for password is scrambled using rot13 before it is saved to the database.
Since we enabled remote debugging earlier, you should see the Daemon Threads for Tomcat in the
Debugging window. Set a breakpoint for in the User class where the password is set.
Register a new user with the username of ‘Moby’ and with ‘m0by’ as the password, click
NetBeans will display the code at the breakpoint and the value of password in the variables window. Note that the value is
Continue icon or press
F5 to let the code run.
Next, set a breakpoint on the getPassword in the User class to see the value returned for password. You can also toggle off the breakpoint for setPassword. Try to log into the application. Look at the value for password in the NetBeans variables window, note that it is
z0ol which is
m0by using ROT13.
In this MVC application the UserController uses the findByLogin method in the UserServiceImpl class which uses the findByUsername method to retrieve the information from the database. It then checks to see if the password from the form matches the user password. Since the password from the login form is not scrambled using ROT13, it does not match the user password and you cannot log into the application.
To fix this, apply ROT13 to the password by adding
import com.docker.UserSignup.utit.Rot13 String passwd = Rot13.rot13(password);
Set a breakpoint in UserServiceImpl on the findByLogin method. Press
F11 or click on
Build Project to update the deployed code. Log in again and look at the values for the breakpoint. The ‘passwd’ variable is
z0ol which matches the password for the user moby.
F5) and you should successfully log in.
True or false: You have to restart a container after you make changes to the code or they won’t be reflected in the application
- ( ) True
- (x) False
True or false: Debugging a Java app running in a container requires a special plugin for the IDE
- ( ) True
- (x) False