Dependency Injection In Java and CDI

Dependency injection(DI) is one of the key techniques that enables a class or module to be injected into another, which also enables us to apply the principal of seperation of concerns via enabling a way of entity association and making wiring easy.

Along with Java EE 5, dependency injection was made of a part of the specification with JSR 250 (Common Annotations). For basic usages of injection, it has been a good start for Java platform especially with the annotations; @ManagedBean and @Resource.

Since Java EE 6, JSR 330 (Dependency Injection for Java) was introduced and the frequently used annotations like @Inject and @Named were made available. And ultimately, Contexts and Dependency Injection was also introduced with Java EE 6 which is built on top of JSR 330. Comparing to DI, CDI additionally provides an easy to use event mechanism, decorators and interceptors to add functionality to beans.

Since Java EE 5 with the EJB 3.0 specification, Java EE also provides injection for EJBs whic…

Configuring Spring Boot Application with Maven

You can build and manage your Spring Boot applications with Maven or Gradle. In this article we will explore the basics of maven configuration for Spring Boot applications.

When we generate a Spring Boot application with Spring Initializr or Spring Boot CLI, a template Spring Boot project is generated for us having the selected dependencies. Let's examine the sections of the generated pom.xml.
1.Parent Pom In the heart of Spring Boot is inheriting the defaults from predefined configurations and that is the usage of starter pom files. A starter pom file includes convenient dependencies and versions in sync for your application; and when you import that starter you would automatically have the dependencies defined in that starter pom file.

<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.3.RELEASE</version> <relativePath/> </parent>
In the code bl…

Spring Components & Auto Scanning & Configuration

Spring managed beans are declared with the stereotype annotations specialized from @Component or with the @Component annotation itself.
When you declare a class with @Component[+derived] annotations, that bean is detected by Spring, via component scanning or explicitly wiring,
and put into the ApplicationContext.
1. Component ScanningIn a Spring application, you can declare your beans manually inside the bean configuration file,
but most probably, auto scanning of components is the preferred way of registering your beans into the application context.

You can configure auto scanning in bean configuration file or with the annotation.
1.1 Enable Auto-Scanning in Bean Configuration FileThis is available since Spring 2.5:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframe…


In Java EE world, Servlet simply is a web technology with which we can receive and handle the HTTP requests, create HTTP response and return that response back to the client.

Servlet technology makes a basis for other Java web technologies on top of which other frameworks put their extensions. For example JSP, JSF, Spring MVC are such technologies which are uses Servlet technology at behind. 

Servlets run on a web container such as Tomcat which provides the services on Java EE technology stack
What is a servlet ?Servlet simply makes an object having HTTP-server functionality when its class extends HttpServlet class.
A servlet is mapped to a URL to which clients requestHTTP requests made to the URL is directed to the corresponding Servlet objectServlet implementation receives the request in the form of GET, POST, PUT or DELETEServlet implementation runs a business logic and prepares an HTTP response and sends it back to the client just an HTTP server doesLifecycle of the servlet is manag…

RPC or REST; Which one is best suited for your Web API ?

When we design an api for our software components, then a couple of confusing terms are just at the front of us.
Let's first cope with the conceptual confusion about the terms in this question.

What is an API ?API is the acronym for the Application Programming Interface.

It is a group of methods that is exported by a provider software components/modules and is supplied to its consumer software components/modulesand the messages(XML, JSON, etc.) of these method calls are transported accross the client and server sides.Web APIIn the context of web, an API is refered as a group of methods that is
the web protocol HTTP is used for the communication by transferring the messages, generally of the form; XML or JSON format.Okay then, if a consumer is using an API; then
it is communicating via a service providerwith dependency to a contract defined by the APIover some communication protocols such as HTTPand exchanging the messages in a structured formats such as XML, JSON etc.RPC or RPC style ?…

Spring Boot with H2

In this tutorial, we will examine the usage of the in-memory database h2 in a Spring Boot application.
H2 is an in-memory database, we can use it for simple case-studies and quick show cases.
Maven DependenciesThis can be easily generated with Spring Starter.
The dependency for Spring Data and JPA:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
The dependency for H2:
<dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency>H2 ConfigurationNow, we can configure the database settings in application.properties file:
spring.datasource.url=jdbc:h2:mem:testdb spring.datasource.driverClassName=org.h2.Driver spring.jpa.database-platform=org.hibernate.dialect.H2Dialect spring.datasource.username=sa spring.datasource.password=password spring.h2.console.enabled=trueThe last line is for…

Load Balancer

Websites may be in need of serving millions of incoming requests from clients.
This high traffic leads us to scale the web application horizontally by adding more servers to the server pool.

At this point, the network traffic should be directed to the servers in a way of well-balanced and this is called load balancing.
A load balancer makes this balanced distribution of network traffic across servers.

A load balancer may be of the form of a physical hardware device or a software.

Load balancers mainly enable horizontally scaling with which the following benefits are implicitly gained:
minimizes server response timemaximizes throughputprevents bottlenecksavoids single points of failure Load balancing algorithmsRound Robin
In Round robin load balancing; the requests are distributed sequentially to the servers.
Round robin load balancing is easy to implement however it has a drawback that long-running requests are not taken into account and this leads the balance to be lost.

Least Connections
In t…

Proxy Server

There are two kinds of proxy servers; forward proxy and reverse proxy.

Forward ProxyA forward proxy is also known as proxy server or web proxy.
Proxy servers are located in front of clients and provides managed access to outside of the internal network.
In a typical scenerio;
A client wants to access a website on the internet and makes a request over proxy.Why doesnot the client access directly ? Because the client is prevented direct connection to the internet for security concerns.The proxy executes some logic on the request decides whether to forward or not.The proxy forwards the request to where it's routed.The server to which the request is sent does not know about the client, it knows the proxy as the sender.The server responds back to the proxy.And the proxy route the response to the client.Use cases
Enforcing security policies on clients in the internal network.Blocking access to certain websites.A blocked-ip-ranged client for a website can use a forward proxy to hide its real …

Java EE Technology Stack

In this article, we will examine the components of Java EE technology stack and historically look at the new comer components and version changes in the components along with the Java EE versions. I will use this article as the umbrella for Java EE stack and update for every new features added to Java EE.

About Java Enterprise EditionUnder the container architecture named Java Enterprise Edition;
  - business logic (projects to EJB)
  - contents or presentations (projects to Servlet, JSP, JSF)
are developed as software components and then run in a managed execution environment named containers.

In terms of Java EE, there are two types of containers;
Web containerIn web container, the components are generated in the form of Servlet, JSP and JSF, called web components.Tomcat is a Java EE web container in which web components can be executed.Application containerIn the application container, the components are generated in the form of EJBs.Weblogic, Websphere, Tom EE are some of JEE compliant …