SlideShare une entreprise Scribd logo
1  sur  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

Contenu connexe

Tendances

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
 

Tendances (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
 

Similaire à Apache Commons Utilities Framework Java Concurrency Immutable Classes

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
 
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
 
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
 
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
 

Similaire à Apache Commons Utilities Framework Java Concurrency Immutable Classes (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
 
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
 
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
 
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
 

Dernier

"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 

Dernier (20)

"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 

Apache Commons Utilities Framework Java Concurrency Immutable Classes

  • 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