SlideShare a Scribd company logo
UTILITIES @ WORK
           - don’t reinvent when it is ready to use
AGENDA
 Discussion on apache commons utilities
 Java Concurrency Framework

 Mutable vs. Immutable




                                           2
APACHE COMMONS UTILITIES
 Configuration
 Lang

 IO

 BeanUtils




                           3
APACHE COMMONS - CONFIGURATION
 org.apache.commons.configuration
 To load a properties file:

  PropertiesConfiguration config = new
       PropertiesConfiguration(“usergui.properties”);
 If we do not specify an absolute path, the file will be
  searched automatically in the following locations:
     in the current directory
     in the user home directory
     in the classpath

   If a property is named “include” and the value of that
    property is the name of a file on the disk, that file will   4
    be included into the configuration.
APACHE COMMONS – CONFIGURATION (CONT..)
                            Example Properties files


         usergui.properties                            color.properties



    window.width = 500                            colors.background = #FFFFFF
    window.height = 300                           colors.foreground = #000080
    include = color.properties
                                                  # chart colors
    colors.background = #FFFFFF                   colors.pie = #FF0000, #00FF00
    colors.foreground = #000080

    # chart colors
    colors.pie = #FF0000, #00FF00




                                                                                  5
APACHE COMMONS – CONFIGURATION (CONT..)
Sample Code




                                          6
7
APACHE COMMONS – LANG
 StringUtils
 ToStringBuilder

 ArrayUtils




                        8
APACHE COMMONS – LANG - STRINGUTILS
 org.apache.commons.lang.StringUtils
 Methods:
    1.   isEmpty :- Checks if a String is empty (“”) or null.
    2.   isBlank :- Checks if a String is whitespace, empty or null.
    3.   isAlpha :- Checks if a String contains only alphabets
    4.   isNumeric :- Checks if a String contains only nuerics
    5.   defaultIfEmpty(String str, String defString) :- If str is
         empty or null, “defString” is returned else “str” is
         returned
    6.   reverseDelimited :-Reverses a String that is delimited by
         a specific character
    7.   leftPad / rightPad                                            9
APACHE COMMONS – LANG – STRINGUTILS (CONT…)
String str1 = null;
boolean result = false;

result = StringUtils.isEmpty(str1); // true

str1 = "str123";
result = StringUtils.isAlphanumeric(str1); //true
result = StringUtils.isNumeric(str1); //false

str1 = "7";
str1 = StringUtils.leftPad(str1, 3, '0'); //007

str1 = "172.168.1.44";
str1 = StringUtils.reverseDelimited(str1, '.'); //44.1.168.172
                                                                 10
APACHE COMMONS – LANG - TOSTRINGBUILDER
public class ToStringBuilderDemo {
  public static void main(String args[]){
    System.out.println(new Emp(7,"Java",99.99));
  }
}
class Emp{
  int id;
  String name;
  double salary;
  public Emp(int id, String name, double salary){
    this.id = id; this.name = name; this.salary = salary;
  }
  /* here comes accessors and mutators */

    public String toString(){
      return ToStringBuilder.reflectionToString(this);
                                                                   11
    }
}
OUTPUT: com.commons.examples.Emp@10b30a7[id=7,name=Java,salary=99.99]
APACHE COMMONS – LANG - ARRAYUTILS
import java.util.Arrays;
import org.apache.commons.lang.ArrayUtils;
public class ArrayUtilsDemo {
  public static void main(String args[]){
    String weekends[] = {"friday","saturday","sunday"};
    String weekdays[] = {"monday", "tuesday", "wednesday", "thursday"};

        String days[] = (String[])ArrayUtils.addAll(weekends, weekdays);
        System.out.println(ArrayUtils.isEmpty(days));
        System.out.println(ArrayUtils.isSameLength(weekends, weekdays));

        Integer values[] = new Integer[10];
        Arrays.fill(values, 1);
        int intValues[] = ArrayUtils.toPrimitive(values,0);
    }
}
                                                                           12
I I I I O O O
  I II
I I       I O O O
        I O O O
 I II I I O O O O


 Input Output       13
APACHE COMMONS – IO
 IOUtils
 FileUtils

 FileSystemUtils

 FileFilter

 LineIterator




                      14
APACHE COMMONS – IO (CONT…)
Task of reading bytes from a URL:




                                    TRADITIONAL


                                                  15

                                    IOUtils
APACHE COMMONS – IO (CONT…)




   File dir = new File(".");
   String[] files = dir.list( new
                  PrefixFileFilter("Test") );

   for ( int i = 0; i < files.length; i++ ) {   16
   System.out.println(files[i]);
   }
17
Executor
Framework
            18
SEQUENTIAL WEB SERVER
class SingleThreadWebServer{
  public static void main(String args[]){
    ServerSocket socket = new ServerSocket(80);
    while(true){
      Socket connection = socket.accept();
       handleRequest(connection);
    }
  }
}


Drawback: thread “main” is responsible for handling all
requests one after the other
                                                          19
WEB SERVER THAT STARTS A NEW THREAD FOR EACH REQUEST
class ThreadPerTaskWebServer{
  public static void main(String args[]){
    ServerSocket socket = new ServerSocket(80);
    while(true){
      final Socket connection = socket.accept();
      Runnable r = new Runnable(){
                  public void run(){
                        handleRequest(connection);
                  }
            };
      new Thread(r).start();
    }
}
}
                                                       20
Drawback: may cause “OutOfMemory” error as there is
no boundary on thread creation.
WEB SERVER USING A THREAD POOL
class TaskExecutionWebServer{
  private static final int NTHREADS = 100;
  private static final Executor exec =
            Executors.newFixedThreadPool(NTHREADS);
  public static void main(String args[]){
    ServerSocket socket = new ServerSocket(80);
    while(true){
      final Socket connection = socket.accept();
      Runnable task = new Runnable(){
                  public void run(){
                        handleRequest(connection);
                  }
            };
      exec.execute(task);
    }                                              21
  }
}
synchronization
        volatile
        atomic
                   22
SYNCHRONIZATION
   Synchronization is built around an internal entity known as the
    intrinsic lock or monitor lock. Intrinsic lock play a role in both
    aspects of synchronization: enforcing exclusive access to an object’s
    state and establishing happens-before relationships that are
    essential to visibility.

   Drawbacks:
        Locking
        Blocking
        Context Switching
        Possibility of Deadlock

                                                                            23
VOLATILE
 A volatile variable is not allowed to have a local copy
  of a variable that is different from the value currently
  held in “main” memory.
 Volatile variables cannot be used to construct
  atomic compound actions(i++). This means that
  volatile variables cannot be used:
     when one variable depends on another
     when the new value of a variable depends on its old value.




                                                                   24
ATOMIC INTEGER
public class Counter {
          private AtomicInteger count = new AtomicInteger(0);

         public void incrementCount() {
                   count.incrementAndGet();
         }
          public int getCount() {
                    return count.get();
         }
}




                                                                25
MUTABLE VS. IMMUTABLE
 Mutable: When we have a reference to an instance of
  an object, the contents of that instance can be altered.
  For Ex: class
  Person, Employee, java.math.BigInteger, etc.
 Immutable: When you have a reference to an instance
  of an object, the contents of that instance cannot be
  altered.
  For Ex: all wrapper classes (Integer,String,etc)



                                                             26
BUILDING AN IMMUTABLE CLASS
 Make all fields private.
 Don’t provide mutators (setter methods)

 Ensure that methods can't be overridden by either
  making the class final (Strong Immutability) or
  making your methods final (Weak Immutability).
 If a field isn't primitive or immutable, make a deep
  clone on the way in and the way out.




                                                         27
public final class BetterPerson{
         private String firstName;
         private String lastName;
         private Date dob;

         public BetterPerson( String firstName, String lastName, Date dob){
                   this.firstName = firstName;
                   this.lastName = lastName;
                   this.dob = new Date( dob.getTime() ); //way in
         }
         public String getFirstName(){
                   return this.firstName;
         }
         public String getLastName(){
                   return this.lastName;
         }
         public Date getDOB(){
                   return new Date( this.dob.getTime() ); //way out
         }

         //No mutators at all i.e., setter methods
                                                                              28
}
29
- PRAMOD

           30
Ad

More Related Content

What's hot (20)

Java 8 Lambda Expressions
Java 8 Lambda ExpressionsJava 8 Lambda Expressions
Java 8 Lambda Expressions
Scott Leberknight
 
Easy Going Groovy 2nd season on DevLOVE
Easy Going Groovy 2nd season on DevLOVEEasy Going Groovy 2nd season on DevLOVE
Easy Going Groovy 2nd season on DevLOVE
Uehara Junji
 
Functional Programming in Java 8 - Exploiting Lambdas
Functional Programming in Java 8 - Exploiting LambdasFunctional Programming in Java 8 - Exploiting Lambdas
Functional Programming in Java 8 - Exploiting Lambdas
Ganesh Samarthyam
 
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Uehara Junji
 
Java Generics - by Example
Java Generics - by ExampleJava Generics - by Example
Java Generics - by Example
Ganesh Samarthyam
 
Scala is java8.next()
Scala is java8.next()Scala is java8.next()
Scala is java8.next()
daewon jeong
 
Java Concurrency by Example
Java Concurrency by ExampleJava Concurrency by Example
Java Concurrency by Example
Ganesh Samarthyam
 
Java 8: the good parts!
Java 8: the good parts!Java 8: the good parts!
Java 8: the good parts!
Andrzej Grzesik
 
Beyond Java: 자바 8을 중심으로 본 자바의 혁신
Beyond Java: 자바 8을 중심으로 본 자바의 혁신Beyond Java: 자바 8을 중심으로 본 자바의 혁신
Beyond Java: 자바 8을 중심으로 본 자바의 혁신
Sungchul Park
 
Javascript basic course
Javascript basic courseJavascript basic course
Javascript basic course
Tran Khoa
 
Advance Java Programs skeleton
Advance Java Programs skeletonAdvance Java Programs skeleton
Advance Java Programs skeleton
Iram Ramrajkar
 
Java Generics
Java GenericsJava Generics
Java Generics
Zülfikar Karakaya
 
Advanced Java Practical File
Advanced Java Practical FileAdvanced Java Practical File
Advanced Java Practical File
Soumya Behera
 
Code generation for alternative languages
Code generation for alternative languagesCode generation for alternative languages
Code generation for alternative languages
Rafael Winterhalter
 
Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014
Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014
Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014
Susan Potter
 
5. Ввод-вывод, доступ к файловой системе
5. Ввод-вывод, доступ к файловой системе5. Ввод-вывод, доступ к файловой системе
5. Ввод-вывод, доступ к файловой системе
DEVTYPE
 
Java Generics
Java GenericsJava Generics
Java Generics
Carol McDonald
 
4. Обработка ошибок, исключения, отладка
4. Обработка ошибок, исключения, отладка4. Обработка ошибок, исключения, отладка
4. Обработка ошибок, исключения, отладка
DEVTYPE
 
Sailing with Java 8 Streams
Sailing with Java 8 StreamsSailing with Java 8 Streams
Sailing with Java 8 Streams
Ganesh Samarthyam
 
Java Basics
Java BasicsJava Basics
Java Basics
Sunil OS
 
Easy Going Groovy 2nd season on DevLOVE
Easy Going Groovy 2nd season on DevLOVEEasy Going Groovy 2nd season on DevLOVE
Easy Going Groovy 2nd season on DevLOVE
Uehara Junji
 
Functional Programming in Java 8 - Exploiting Lambdas
Functional Programming in Java 8 - Exploiting LambdasFunctional Programming in Java 8 - Exploiting Lambdas
Functional Programming in Java 8 - Exploiting Lambdas
Ganesh Samarthyam
 
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Let's go Developer 2011 sendai Let's go Java Developer (Programming Language ...
Uehara Junji
 
Scala is java8.next()
Scala is java8.next()Scala is java8.next()
Scala is java8.next()
daewon jeong
 
Beyond Java: 자바 8을 중심으로 본 자바의 혁신
Beyond Java: 자바 8을 중심으로 본 자바의 혁신Beyond Java: 자바 8을 중심으로 본 자바의 혁신
Beyond Java: 자바 8을 중심으로 본 자바의 혁신
Sungchul Park
 
Javascript basic course
Javascript basic courseJavascript basic course
Javascript basic course
Tran Khoa
 
Advance Java Programs skeleton
Advance Java Programs skeletonAdvance Java Programs skeleton
Advance Java Programs skeleton
Iram Ramrajkar
 
Advanced Java Practical File
Advanced Java Practical FileAdvanced Java Practical File
Advanced Java Practical File
Soumya Behera
 
Code generation for alternative languages
Code generation for alternative languagesCode generation for alternative languages
Code generation for alternative languages
Rafael Winterhalter
 
Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014
Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014
Scalaz By Example (An IO Taster) -- PDXScala Meetup Jan 2014
Susan Potter
 
5. Ввод-вывод, доступ к файловой системе
5. Ввод-вывод, доступ к файловой системе5. Ввод-вывод, доступ к файловой системе
5. Ввод-вывод, доступ к файловой системе
DEVTYPE
 
4. Обработка ошибок, исключения, отладка
4. Обработка ошибок, исключения, отладка4. Обработка ошибок, исключения, отладка
4. Обработка ошибок, исключения, отладка
DEVTYPE
 
Java Basics
Java BasicsJava Basics
Java Basics
Sunil OS
 

Similar to Use of Apache Commons and Utilities (20)

Java design patterns
Java design patternsJava design patterns
Java design patterns
Shawn Brito
 
FP in Java - Project Lambda and beyond
FP in Java - Project Lambda and beyondFP in Java - Project Lambda and beyond
FP in Java - Project Lambda and beyond
Mario Fusco
 
Thread
ThreadThread
Thread
phanleson
 
Java 8 Workshop
Java 8 WorkshopJava 8 Workshop
Java 8 Workshop
Mario Fusco
 
TechkTalk #12 Grokking: Writing code that writes code – Nguyen Luong
TechkTalk #12 Grokking: Writing code that writes code – Nguyen LuongTechkTalk #12 Grokking: Writing code that writes code – Nguyen Luong
TechkTalk #12 Grokking: Writing code that writes code – Nguyen Luong
Grokking VN
 
Writing code that writes code - Nguyen Luong
Writing code that writes code - Nguyen LuongWriting code that writes code - Nguyen Luong
Writing code that writes code - Nguyen Luong
Vu Huy
 
Java concurrency
Java concurrencyJava concurrency
Java concurrency
Hithem Ahmed
 
Java 7 & 8 New Features
Java 7 & 8 New FeaturesJava 7 & 8 New Features
Java 7 & 8 New Features
Leandro Coutinho
 
Java Concurrency Gotchas
Java Concurrency GotchasJava Concurrency Gotchas
Java Concurrency Gotchas
Alex Miller
 
What is new in Java 8
What is new in Java 8What is new in Java 8
What is new in Java 8
Sandeep Kr. Singh
 
Junit and testNG
Junit and testNGJunit and testNG
Junit and testNG
Марія Русин
 
Object Oriented Solved Practice Programs C++ Exams
Object Oriented Solved Practice Programs C++ ExamsObject Oriented Solved Practice Programs C++ Exams
Object Oriented Solved Practice Programs C++ Exams
MuhammadTalha436
 
JAVA CONCEPTS AND PRACTICES
JAVA CONCEPTS AND PRACTICESJAVA CONCEPTS AND PRACTICES
JAVA CONCEPTS AND PRACTICES
Nikunj Parekh
 
Jist of Java
Jist of JavaJist of Java
Jist of Java
Nikunj Parekh
 
Atlassian Groovy Plugins
Atlassian Groovy PluginsAtlassian Groovy Plugins
Atlassian Groovy Plugins
Paul King
 
Core Java Programming Language (JSE) : Chapter IX - Collections and Generic F...
Core Java Programming Language (JSE) : Chapter IX - Collections and Generic F...Core Java Programming Language (JSE) : Chapter IX - Collections and Generic F...
Core Java Programming Language (JSE) : Chapter IX - Collections and Generic F...
WebStackAcademy
 
Learning Java 1 – Introduction
Learning Java 1 – IntroductionLearning Java 1 – Introduction
Learning Java 1 – Introduction
caswenson
 
K is for Kotlin
K is for KotlinK is for Kotlin
K is for Kotlin
TechMagic
 
A topology of memory leaks on the JVM
A topology of memory leaks on the JVMA topology of memory leaks on the JVM
A topology of memory leaks on the JVM
Rafael Winterhalter
 
Apache Flink Training: DataStream API Part 2 Advanced
Apache Flink Training: DataStream API Part 2 Advanced Apache Flink Training: DataStream API Part 2 Advanced
Apache Flink Training: DataStream API Part 2 Advanced
Flink Forward
 
Java design patterns
Java design patternsJava design patterns
Java design patterns
Shawn Brito
 
FP in Java - Project Lambda and beyond
FP in Java - Project Lambda and beyondFP in Java - Project Lambda and beyond
FP in Java - Project Lambda and beyond
Mario Fusco
 
TechkTalk #12 Grokking: Writing code that writes code – Nguyen Luong
TechkTalk #12 Grokking: Writing code that writes code – Nguyen LuongTechkTalk #12 Grokking: Writing code that writes code – Nguyen Luong
TechkTalk #12 Grokking: Writing code that writes code – Nguyen Luong
Grokking VN
 
Writing code that writes code - Nguyen Luong
Writing code that writes code - Nguyen LuongWriting code that writes code - Nguyen Luong
Writing code that writes code - Nguyen Luong
Vu Huy
 
Java Concurrency Gotchas
Java Concurrency GotchasJava Concurrency Gotchas
Java Concurrency Gotchas
Alex Miller
 
Object Oriented Solved Practice Programs C++ Exams
Object Oriented Solved Practice Programs C++ ExamsObject Oriented Solved Practice Programs C++ Exams
Object Oriented Solved Practice Programs C++ Exams
MuhammadTalha436
 
JAVA CONCEPTS AND PRACTICES
JAVA CONCEPTS AND PRACTICESJAVA CONCEPTS AND PRACTICES
JAVA CONCEPTS AND PRACTICES
Nikunj Parekh
 
Atlassian Groovy Plugins
Atlassian Groovy PluginsAtlassian Groovy Plugins
Atlassian Groovy Plugins
Paul King
 
Core Java Programming Language (JSE) : Chapter IX - Collections and Generic F...
Core Java Programming Language (JSE) : Chapter IX - Collections and Generic F...Core Java Programming Language (JSE) : Chapter IX - Collections and Generic F...
Core Java Programming Language (JSE) : Chapter IX - Collections and Generic F...
WebStackAcademy
 
Learning Java 1 – Introduction
Learning Java 1 – IntroductionLearning Java 1 – Introduction
Learning Java 1 – Introduction
caswenson
 
K is for Kotlin
K is for KotlinK is for Kotlin
K is for Kotlin
TechMagic
 
A topology of memory leaks on the JVM
A topology of memory leaks on the JVMA topology of memory leaks on the JVM
A topology of memory leaks on the JVM
Rafael Winterhalter
 
Apache Flink Training: DataStream API Part 2 Advanced
Apache Flink Training: DataStream API Part 2 Advanced Apache Flink Training: DataStream API Part 2 Advanced
Apache Flink Training: DataStream API Part 2 Advanced
Flink Forward
 
Ad

Recently uploaded (20)

Challenges in Migrating Imperative Deep Learning Programs to Graph Execution:...
Challenges in Migrating Imperative Deep Learning Programs to Graph Execution:...Challenges in Migrating Imperative Deep Learning Programs to Graph Execution:...
Challenges in Migrating Imperative Deep Learning Programs to Graph Execution:...
Raffi Khatchadourian
 
UiPath Agentic Automation: Community Developer Opportunities
UiPath Agentic Automation: Community Developer OpportunitiesUiPath Agentic Automation: Community Developer Opportunities
UiPath Agentic Automation: Community Developer Opportunities
DianaGray10
 
Everything You Need to Know About Agentforce? (Put AI Agents to Work)
Everything You Need to Know About Agentforce? (Put AI Agents to Work)Everything You Need to Know About Agentforce? (Put AI Agents to Work)
Everything You Need to Know About Agentforce? (Put AI Agents to Work)
Cyntexa
 
Com fer un pla de gestió de dades amb l'eiNa DMP (en anglès)
Com fer un pla de gestió de dades amb l'eiNa DMP (en anglès)Com fer un pla de gestió de dades amb l'eiNa DMP (en anglès)
Com fer un pla de gestió de dades amb l'eiNa DMP (en anglès)
CSUC - Consorci de Serveis Universitaris de Catalunya
 
Q1 2025 Dropbox Earnings and Investor Presentation
Q1 2025 Dropbox Earnings and Investor PresentationQ1 2025 Dropbox Earnings and Investor Presentation
Q1 2025 Dropbox Earnings and Investor Presentation
Dropbox
 
AI You Can Trust: The Critical Role of Governance and Quality.pdf
AI You Can Trust: The Critical Role of Governance and Quality.pdfAI You Can Trust: The Critical Role of Governance and Quality.pdf
AI You Can Trust: The Critical Role of Governance and Quality.pdf
Precisely
 
Canadian book publishing: Insights from the latest salary survey - Tech Forum...
Canadian book publishing: Insights from the latest salary survey - Tech Forum...Canadian book publishing: Insights from the latest salary survey - Tech Forum...
Canadian book publishing: Insights from the latest salary survey - Tech Forum...
BookNet Canada
 
GyrusAI - Broadcasting & Streaming Applications Driven by AI and ML
GyrusAI - Broadcasting & Streaming Applications Driven by AI and MLGyrusAI - Broadcasting & Streaming Applications Driven by AI and ML
GyrusAI - Broadcasting & Streaming Applications Driven by AI and ML
Gyrus AI
 
Kit-Works Team Study_팀스터디_김한솔_nuqs_20250509.pdf
Kit-Works Team Study_팀스터디_김한솔_nuqs_20250509.pdfKit-Works Team Study_팀스터디_김한솔_nuqs_20250509.pdf
Kit-Works Team Study_팀스터디_김한솔_nuqs_20250509.pdf
Wonjun Hwang
 
Integrating FME with Python: Tips, Demos, and Best Practices for Powerful Aut...
Integrating FME with Python: Tips, Demos, and Best Practices for Powerful Aut...Integrating FME with Python: Tips, Demos, and Best Practices for Powerful Aut...
Integrating FME with Python: Tips, Demos, and Best Practices for Powerful Aut...
Safe Software
 
DevOpsDays SLC - Platform Engineers are Product Managers.pptx
DevOpsDays SLC - Platform Engineers are Product Managers.pptxDevOpsDays SLC - Platform Engineers are Product Managers.pptx
DevOpsDays SLC - Platform Engineers are Product Managers.pptx
Justin Reock
 
Cybersecurity Threat Vectors and Mitigation
Cybersecurity Threat Vectors and MitigationCybersecurity Threat Vectors and Mitigation
Cybersecurity Threat Vectors and Mitigation
VICTOR MAESTRE RAMIREZ
 
Financial Services Technology Summit 2025
Financial Services Technology Summit 2025Financial Services Technology Summit 2025
Financial Services Technology Summit 2025
Ray Bugg
 
Webinar - Top 5 Backup Mistakes MSPs and Businesses Make .pptx
Webinar - Top 5 Backup Mistakes MSPs and Businesses Make   .pptxWebinar - Top 5 Backup Mistakes MSPs and Businesses Make   .pptx
Webinar - Top 5 Backup Mistakes MSPs and Businesses Make .pptx
MSP360
 
Viam product demo_ Deploying and scaling AI with hardware.pdf
Viam product demo_ Deploying and scaling AI with hardware.pdfViam product demo_ Deploying and scaling AI with hardware.pdf
Viam product demo_ Deploying and scaling AI with hardware.pdf
camilalamoratta
 
Reimagine How You and Your Team Work with Microsoft 365 Copilot.pptx
Reimagine How You and Your Team Work with Microsoft 365 Copilot.pptxReimagine How You and Your Team Work with Microsoft 365 Copilot.pptx
Reimagine How You and Your Team Work with Microsoft 365 Copilot.pptx
John Moore
 
The Future of Cisco Cloud Security: Innovations and AI Integration
The Future of Cisco Cloud Security: Innovations and AI IntegrationThe Future of Cisco Cloud Security: Innovations and AI Integration
The Future of Cisco Cloud Security: Innovations and AI Integration
Re-solution Data Ltd
 
The No-Code Way to Build a Marketing Team with One AI Agent (Download the n8n...
The No-Code Way to Build a Marketing Team with One AI Agent (Download the n8n...The No-Code Way to Build a Marketing Team with One AI Agent (Download the n8n...
The No-Code Way to Build a Marketing Team with One AI Agent (Download the n8n...
SOFTTECHHUB
 
Does Pornify Allow NSFW? Everything You Should Know
Does Pornify Allow NSFW? Everything You Should KnowDoes Pornify Allow NSFW? Everything You Should Know
Does Pornify Allow NSFW? Everything You Should Know
Pornify CC
 
GDG Cloud Southlake #42: Suresh Mathew: Autonomous Resource Optimization: How...
GDG Cloud Southlake #42: Suresh Mathew: Autonomous Resource Optimization: How...GDG Cloud Southlake #42: Suresh Mathew: Autonomous Resource Optimization: How...
GDG Cloud Southlake #42: Suresh Mathew: Autonomous Resource Optimization: How...
James Anderson
 
Challenges in Migrating Imperative Deep Learning Programs to Graph Execution:...
Challenges in Migrating Imperative Deep Learning Programs to Graph Execution:...Challenges in Migrating Imperative Deep Learning Programs to Graph Execution:...
Challenges in Migrating Imperative Deep Learning Programs to Graph Execution:...
Raffi Khatchadourian
 
UiPath Agentic Automation: Community Developer Opportunities
UiPath Agentic Automation: Community Developer OpportunitiesUiPath Agentic Automation: Community Developer Opportunities
UiPath Agentic Automation: Community Developer Opportunities
DianaGray10
 
Everything You Need to Know About Agentforce? (Put AI Agents to Work)
Everything You Need to Know About Agentforce? (Put AI Agents to Work)Everything You Need to Know About Agentforce? (Put AI Agents to Work)
Everything You Need to Know About Agentforce? (Put AI Agents to Work)
Cyntexa
 
Q1 2025 Dropbox Earnings and Investor Presentation
Q1 2025 Dropbox Earnings and Investor PresentationQ1 2025 Dropbox Earnings and Investor Presentation
Q1 2025 Dropbox Earnings and Investor Presentation
Dropbox
 
AI You Can Trust: The Critical Role of Governance and Quality.pdf
AI You Can Trust: The Critical Role of Governance and Quality.pdfAI You Can Trust: The Critical Role of Governance and Quality.pdf
AI You Can Trust: The Critical Role of Governance and Quality.pdf
Precisely
 
Canadian book publishing: Insights from the latest salary survey - Tech Forum...
Canadian book publishing: Insights from the latest salary survey - Tech Forum...Canadian book publishing: Insights from the latest salary survey - Tech Forum...
Canadian book publishing: Insights from the latest salary survey - Tech Forum...
BookNet Canada
 
GyrusAI - Broadcasting & Streaming Applications Driven by AI and ML
GyrusAI - Broadcasting & Streaming Applications Driven by AI and MLGyrusAI - Broadcasting & Streaming Applications Driven by AI and ML
GyrusAI - Broadcasting & Streaming Applications Driven by AI and ML
Gyrus AI
 
Kit-Works Team Study_팀스터디_김한솔_nuqs_20250509.pdf
Kit-Works Team Study_팀스터디_김한솔_nuqs_20250509.pdfKit-Works Team Study_팀스터디_김한솔_nuqs_20250509.pdf
Kit-Works Team Study_팀스터디_김한솔_nuqs_20250509.pdf
Wonjun Hwang
 
Integrating FME with Python: Tips, Demos, and Best Practices for Powerful Aut...
Integrating FME with Python: Tips, Demos, and Best Practices for Powerful Aut...Integrating FME with Python: Tips, Demos, and Best Practices for Powerful Aut...
Integrating FME with Python: Tips, Demos, and Best Practices for Powerful Aut...
Safe Software
 
DevOpsDays SLC - Platform Engineers are Product Managers.pptx
DevOpsDays SLC - Platform Engineers are Product Managers.pptxDevOpsDays SLC - Platform Engineers are Product Managers.pptx
DevOpsDays SLC - Platform Engineers are Product Managers.pptx
Justin Reock
 
Cybersecurity Threat Vectors and Mitigation
Cybersecurity Threat Vectors and MitigationCybersecurity Threat Vectors and Mitigation
Cybersecurity Threat Vectors and Mitigation
VICTOR MAESTRE RAMIREZ
 
Financial Services Technology Summit 2025
Financial Services Technology Summit 2025Financial Services Technology Summit 2025
Financial Services Technology Summit 2025
Ray Bugg
 
Webinar - Top 5 Backup Mistakes MSPs and Businesses Make .pptx
Webinar - Top 5 Backup Mistakes MSPs and Businesses Make   .pptxWebinar - Top 5 Backup Mistakes MSPs and Businesses Make   .pptx
Webinar - Top 5 Backup Mistakes MSPs and Businesses Make .pptx
MSP360
 
Viam product demo_ Deploying and scaling AI with hardware.pdf
Viam product demo_ Deploying and scaling AI with hardware.pdfViam product demo_ Deploying and scaling AI with hardware.pdf
Viam product demo_ Deploying and scaling AI with hardware.pdf
camilalamoratta
 
Reimagine How You and Your Team Work with Microsoft 365 Copilot.pptx
Reimagine How You and Your Team Work with Microsoft 365 Copilot.pptxReimagine How You and Your Team Work with Microsoft 365 Copilot.pptx
Reimagine How You and Your Team Work with Microsoft 365 Copilot.pptx
John Moore
 
The Future of Cisco Cloud Security: Innovations and AI Integration
The Future of Cisco Cloud Security: Innovations and AI IntegrationThe Future of Cisco Cloud Security: Innovations and AI Integration
The Future of Cisco Cloud Security: Innovations and AI Integration
Re-solution Data Ltd
 
The No-Code Way to Build a Marketing Team with One AI Agent (Download the n8n...
The No-Code Way to Build a Marketing Team with One AI Agent (Download the n8n...The No-Code Way to Build a Marketing Team with One AI Agent (Download the n8n...
The No-Code Way to Build a Marketing Team with One AI Agent (Download the n8n...
SOFTTECHHUB
 
Does Pornify Allow NSFW? Everything You Should Know
Does Pornify Allow NSFW? Everything You Should KnowDoes Pornify Allow NSFW? Everything You Should Know
Does Pornify Allow NSFW? Everything You Should Know
Pornify CC
 
GDG Cloud Southlake #42: Suresh Mathew: Autonomous Resource Optimization: How...
GDG Cloud Southlake #42: Suresh Mathew: Autonomous Resource Optimization: How...GDG Cloud Southlake #42: Suresh Mathew: Autonomous Resource Optimization: How...
GDG Cloud Southlake #42: Suresh Mathew: Autonomous Resource Optimization: How...
James Anderson
 
Ad

Use of Apache Commons and Utilities

  • 1. UTILITIES @ WORK - don’t reinvent when it is ready to use
  • 2. AGENDA  Discussion on apache commons utilities  Java Concurrency Framework  Mutable vs. Immutable 2
  • 3. APACHE COMMONS UTILITIES  Configuration  Lang  IO  BeanUtils 3
  • 4. APACHE COMMONS - CONFIGURATION  org.apache.commons.configuration  To load a properties file: PropertiesConfiguration config = new PropertiesConfiguration(“usergui.properties”);  If we do not specify an absolute path, the file will be searched automatically in the following locations:  in the current directory  in the user home directory  in the classpath  If a property is named “include” and the value of that property is the name of a file on the disk, that file will 4 be included into the configuration.
  • 5. APACHE COMMONS – CONFIGURATION (CONT..) Example Properties files usergui.properties color.properties window.width = 500 colors.background = #FFFFFF window.height = 300 colors.foreground = #000080 include = color.properties # chart colors colors.background = #FFFFFF colors.pie = #FF0000, #00FF00 colors.foreground = #000080 # chart colors colors.pie = #FF0000, #00FF00 5
  • 6. APACHE COMMONS – CONFIGURATION (CONT..) Sample Code 6
  • 7. 7
  • 8. APACHE COMMONS – LANG  StringUtils  ToStringBuilder  ArrayUtils 8
  • 9. APACHE COMMONS – LANG - STRINGUTILS  org.apache.commons.lang.StringUtils  Methods: 1. isEmpty :- Checks if a String is empty (“”) or null. 2. isBlank :- Checks if a String is whitespace, empty or null. 3. isAlpha :- Checks if a String contains only alphabets 4. isNumeric :- Checks if a String contains only nuerics 5. defaultIfEmpty(String str, String defString) :- If str is empty or null, “defString” is returned else “str” is returned 6. reverseDelimited :-Reverses a String that is delimited by a specific character 7. leftPad / rightPad 9
  • 10. APACHE COMMONS – LANG – STRINGUTILS (CONT…) String str1 = null; boolean result = false; result = StringUtils.isEmpty(str1); // true str1 = "str123"; result = StringUtils.isAlphanumeric(str1); //true result = StringUtils.isNumeric(str1); //false str1 = "7"; str1 = StringUtils.leftPad(str1, 3, '0'); //007 str1 = "172.168.1.44"; str1 = StringUtils.reverseDelimited(str1, '.'); //44.1.168.172 10
  • 11. APACHE COMMONS – LANG - TOSTRINGBUILDER public class ToStringBuilderDemo { public static void main(String args[]){ System.out.println(new Emp(7,"Java",99.99)); } } class Emp{ int id; String name; double salary; public Emp(int id, String name, double salary){ this.id = id; this.name = name; this.salary = salary; } /* here comes accessors and mutators */ public String toString(){ return ToStringBuilder.reflectionToString(this); 11 } } OUTPUT: com.commons.examples.Emp@10b30a7[id=7,name=Java,salary=99.99]
  • 12. APACHE COMMONS – LANG - ARRAYUTILS import java.util.Arrays; import org.apache.commons.lang.ArrayUtils; public class ArrayUtilsDemo { public static void main(String args[]){ String weekends[] = {"friday","saturday","sunday"}; String weekdays[] = {"monday", "tuesday", "wednesday", "thursday"}; String days[] = (String[])ArrayUtils.addAll(weekends, weekdays); System.out.println(ArrayUtils.isEmpty(days)); System.out.println(ArrayUtils.isSameLength(weekends, weekdays)); Integer values[] = new Integer[10]; Arrays.fill(values, 1); int intValues[] = ArrayUtils.toPrimitive(values,0); } } 12
  • 13. I I I I O O O I II I I I O O O I O O O I II I I O O O O Input Output 13
  • 14. APACHE COMMONS – IO  IOUtils  FileUtils  FileSystemUtils  FileFilter  LineIterator 14
  • 15. APACHE COMMONS – IO (CONT…) Task of reading bytes from a URL: TRADITIONAL 15 IOUtils
  • 16. APACHE COMMONS – IO (CONT…) File dir = new File("."); String[] files = dir.list( new PrefixFileFilter("Test") ); for ( int i = 0; i < files.length; i++ ) { 16 System.out.println(files[i]); }
  • 17. 17
  • 19. SEQUENTIAL WEB SERVER class SingleThreadWebServer{ public static void main(String args[]){ ServerSocket socket = new ServerSocket(80); while(true){ Socket connection = socket.accept(); handleRequest(connection); } } } Drawback: thread “main” is responsible for handling all requests one after the other 19
  • 20. WEB SERVER THAT STARTS A NEW THREAD FOR EACH REQUEST class ThreadPerTaskWebServer{ public static void main(String args[]){ ServerSocket socket = new ServerSocket(80); while(true){ final Socket connection = socket.accept(); Runnable r = new Runnable(){ public void run(){ handleRequest(connection); } }; new Thread(r).start(); } } } 20 Drawback: may cause “OutOfMemory” error as there is no boundary on thread creation.
  • 21. WEB SERVER USING A THREAD POOL class TaskExecutionWebServer{ private static final int NTHREADS = 100; private static final Executor exec = Executors.newFixedThreadPool(NTHREADS); public static void main(String args[]){ ServerSocket socket = new ServerSocket(80); while(true){ final Socket connection = socket.accept(); Runnable task = new Runnable(){ public void run(){ handleRequest(connection); } }; exec.execute(task); } 21 } }
  • 22. synchronization volatile atomic 22
  • 23. SYNCHRONIZATION  Synchronization is built around an internal entity known as the intrinsic lock or monitor lock. Intrinsic lock play a role in both aspects of synchronization: enforcing exclusive access to an object’s state and establishing happens-before relationships that are essential to visibility.  Drawbacks:  Locking  Blocking  Context Switching  Possibility of Deadlock 23
  • 24. VOLATILE  A volatile variable is not allowed to have a local copy of a variable that is different from the value currently held in “main” memory.  Volatile variables cannot be used to construct atomic compound actions(i++). This means that volatile variables cannot be used:  when one variable depends on another  when the new value of a variable depends on its old value. 24
  • 25. ATOMIC INTEGER public class Counter { private AtomicInteger count = new AtomicInteger(0); public void incrementCount() { count.incrementAndGet(); } public int getCount() { return count.get(); } } 25
  • 26. MUTABLE VS. IMMUTABLE  Mutable: When we have a reference to an instance of an object, the contents of that instance can be altered. For Ex: class Person, Employee, java.math.BigInteger, etc.  Immutable: When you have a reference to an instance of an object, the contents of that instance cannot be altered. For Ex: all wrapper classes (Integer,String,etc) 26
  • 27. BUILDING AN IMMUTABLE CLASS  Make all fields private.  Don’t provide mutators (setter methods)  Ensure that methods can't be overridden by either making the class final (Strong Immutability) or making your methods final (Weak Immutability).  If a field isn't primitive or immutable, make a deep clone on the way in and the way out. 27
  • 28. public final class BetterPerson{ private String firstName; private String lastName; private Date dob; public BetterPerson( String firstName, String lastName, Date dob){ this.firstName = firstName; this.lastName = lastName; this.dob = new Date( dob.getTime() ); //way in } public String getFirstName(){ return this.firstName; } public String getLastName(){ return this.lastName; } public Date getDOB(){ return new Date( this.dob.getTime() ); //way out } //No mutators at all i.e., setter methods 28 }
  • 29. 29
  • 30. - PRAMOD 30
  翻译: