SlideShare a Scribd company logo
1 of 30
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

More Related Content

What's hot

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 DevLOVEUehara 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 LambdasGanesh 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 courseTran Khoa
 
Advance Java Programs skeleton
Advance Java Programs skeletonAdvance Java Programs skeleton
Advance Java Programs skeletonIram Ramrajkar
 
Advanced Java Practical File
Advanced Java Practical FileAdvanced Java Practical File
Advanced Java Practical FileSoumya Behera
 
Code generation for alternative languages
Code generation for alternative languagesCode generation for alternative languages
Code generation for alternative languagesRafael 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 2014Susan Potter
 
5. Ввод-вывод, доступ к файловой системе
5. Ввод-вывод, доступ к файловой системе5. Ввод-вывод, доступ к файловой системе
5. Ввод-вывод, доступ к файловой системеDEVTYPE
 
4. Обработка ошибок, исключения, отладка
4. Обработка ошибок, исключения, отладка4. Обработка ошибок, исключения, отладка
4. Обработка ошибок, исключения, отладкаDEVTYPE
 
Java Basics
Java BasicsJava Basics
Java BasicsSunil OS
 

What's hot (20)

Java 8 Lambda Expressions
Java 8 Lambda ExpressionsJava 8 Lambda Expressions
Java 8 Lambda Expressions
 
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
 
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
 
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 ...
 
Java Generics - by Example
Java Generics - by ExampleJava Generics - by Example
Java Generics - by Example
 
Scala is java8.next()
Scala is java8.next()Scala is java8.next()
Scala is java8.next()
 
Java Concurrency by Example
Java Concurrency by ExampleJava Concurrency by Example
Java Concurrency by Example
 
Java 8: the good parts!
Java 8: the good parts!Java 8: the good parts!
Java 8: the good parts!
 
Beyond Java: 자바 8을 중심으로 본 자바의 혁신
Beyond Java: 자바 8을 중심으로 본 자바의 혁신Beyond Java: 자바 8을 중심으로 본 자바의 혁신
Beyond Java: 자바 8을 중심으로 본 자바의 혁신
 
Javascript basic course
Javascript basic courseJavascript basic course
Javascript basic course
 
Advance Java Programs skeleton
Advance Java Programs skeletonAdvance Java Programs skeleton
Advance Java Programs skeleton
 
Java Generics
Java GenericsJava Generics
Java Generics
 
Advanced Java Practical File
Advanced Java Practical FileAdvanced Java Practical File
Advanced Java Practical File
 
Code generation for alternative languages
Code generation for alternative languagesCode generation for alternative languages
Code generation for alternative languages
 
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
 
5. Ввод-вывод, доступ к файловой системе
5. Ввод-вывод, доступ к файловой системе5. Ввод-вывод, доступ к файловой системе
5. Ввод-вывод, доступ к файловой системе
 
Java Generics
Java GenericsJava Generics
Java Generics
 
4. Обработка ошибок, исключения, отладка
4. Обработка ошибок, исключения, отладка4. Обработка ошибок, исключения, отладка
4. Обработка ошибок, исключения, отладка
 
Sailing with Java 8 Streams
Sailing with Java 8 StreamsSailing with Java 8 Streams
Sailing with Java 8 Streams
 
Java Basics
Java BasicsJava Basics
Java Basics
 

Similar to Use of Apache Commons and Utilities

Java design patterns
Java design patternsJava design patterns
Java design patternsShawn 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 beyondMario Fusco
 
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 LuongVu Huy
 
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 LuongGrokking VN
 
Java Concurrency Gotchas
Java Concurrency GotchasJava Concurrency Gotchas
Java Concurrency GotchasAlex 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++ ExamsMuhammadTalha436
 
JAVA CONCEPTS AND PRACTICES
JAVA CONCEPTS AND PRACTICESJAVA CONCEPTS AND PRACTICES
JAVA CONCEPTS AND PRACTICESNikunj Parekh
 
Atlassian Groovy Plugins
Atlassian Groovy PluginsAtlassian Groovy Plugins
Atlassian Groovy PluginsPaul 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 – Introductioncaswenson
 
K is for Kotlin
K is for KotlinK is for Kotlin
K is for KotlinTechMagic
 
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 JVMRafael 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
 

Similar to Use of Apache Commons and Utilities (20)

Java design patterns
Java design patternsJava design patterns
Java design patterns
 
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
 
Thread
ThreadThread
Thread
 
Java 8 Workshop
Java 8 WorkshopJava 8 Workshop
Java 8 Workshop
 
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
 
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
 
Java concurrency
Java concurrencyJava concurrency
Java concurrency
 
Java 7 & 8 New Features
Java 7 & 8 New FeaturesJava 7 & 8 New Features
Java 7 & 8 New Features
 
Java Concurrency Gotchas
Java Concurrency GotchasJava Concurrency Gotchas
Java Concurrency Gotchas
 
What is new in Java 8
What is new in Java 8What is new in Java 8
What is new in Java 8
 
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
 
JAVA CONCEPTS AND PRACTICES
JAVA CONCEPTS AND PRACTICESJAVA CONCEPTS AND PRACTICES
JAVA CONCEPTS AND PRACTICES
 
Jist of Java
Jist of JavaJist of Java
Jist of Java
 
Atlassian Groovy Plugins
Atlassian Groovy PluginsAtlassian Groovy Plugins
Atlassian Groovy Plugins
 
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...
 
Learning Java 1 – Introduction
Learning Java 1 – IntroductionLearning Java 1 – Introduction
Learning Java 1 – Introduction
 
K is for Kotlin
K is for KotlinK is for Kotlin
K is for Kotlin
 
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
 
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
 

Recently uploaded

How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 

Recently uploaded (20)

How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 

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