Posts

[Java] การนำ jar file library มาใช้กับ Maven Project

Image
Dependency ทำให้เราสามารถใช้งาน source code จาก repository ได้ ทำให้ชีวิตโปรแกรมเมอร์อย่างเรา ๆ สะดวกสะบายพอสมควร อีกทั้งยังสามารถ share dependency ให้ทีมสามารถใช้งานได้เหมือนกัน

          แต่ !! โลกก็ไม่ได้สวยงามเสมอไป บางทีโปรเจคเก่า ๆ ที่เป็นแบบ editor based ก็อาจทำร้ายเราได้ โดยเฉพาะ library ที่ทำกันขึ้นมาเอง (*.jar) ซึ่งไม่ได้ download มาจาก dependency ทำให้เมื่อมีคนใหม่เข้ามาในทีมก็อาจเสียเวลา setup กันอีก แทนที่จะเปิดขึ้นมาแล้วสามารถเริ่มทำงานได้เลย


วิธีการที่ผมใช้และคิดว่ามัน work สุดคือ การทำ local repository ในโปรเจคซะเลย
อันดับแรก เอา *.jar ไฟล์มาทำให้เป็น maven based ซะก่อนmvn install:install-file -Dfile=mylib1.0.jar -DgroupId=th.in.lordgift -DartifactId=MyLib -Dversion=1.0 -Dpackaging=jar -DlocalRepositoryPath=local-libsfile - ระบุ *.jar ของเรา ไม่จำเป็นต้องอยู่ในโปรเจคlocalRepositoryPath - ระบุ directory ปลายทางที่ต้องการให้เป็น local repository (ในโปรเจค)attribute อื่น ๆ เป็นค่าที่กำหนดเอง สามารถใส่อะไรก็ได้ครับ แต่ควรตั้งตามรูปแบบของ maven ไม่งั้นตอนเรี…

[Java] รู้จัก Maven ให้มากขึ้น เพื่อก้าวสู่ java professional

Image
ถึงวันนี้คงไม่มี java dev คนไหนไม่ยอมใช้ maven กันอีกแล้ว แต่คงต้องอธิบายกันหน่อยเผื่อบางท่านมาจากภาษาอื่น ไม่ว่ากันครับ :D
maven คือ ??           maven เป็นbuild tool ที่มีคลัง java source code หรือเรียกอีกอย่างว่า dependency เป็นของตัวเองอย่าง maven repository (https://mvnrepository.com/) ซึ่งประกอบด้วย library, plugin, archetype ให้เลือกใช้มากมาย ซึ่ง editor ส่วนใหญ่ก็รองรับกันอยู่แล้ว บางตัวก็มีติดมาในตัวเลย ไม่ต้องติดตั้ง maven เองเพิ่ม แต่ผมก็แนะนำให้ download แยกต่างหากนะ

ตัวอย่างโครงสร้าง maven project บน IntelliJ IDEA
          pom.xml คือ ส่วนสำคัญที่สุดของ maven project เราจะต้องระบุการเรียกใช้งาน dependency, plugin จะถูกเขียนไว้ที่ไฟล์นี้ ในรูปแบบ xml

ตัวอย่าง pom.xml
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemalocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelversion>4.0.0</modelversion> <…

[Java] การเชื่อมต่อ database ผ่าน Datasource

Image
การเขียนโปรแกรมเชื่อมต่อฐานข้อมูลนอกจากจะเขียนต่อโดยตรง การเชื่อมต่อ MySQL Database ซึ่งเป็นการเชื่อมต่อที่ไม่ใช่วิธีที่ดีนัก เพราะเรา (developer) จะต้องรายละเอียดต่างๆ ตั้งแต่ยี่ห้อฐานข้อมูล, host, SID, username, password ไว้ในแอปฯ ของเรา หรือจะเรียกว่า "hard-code" ก็ไม่ผิด
//Legacy Way Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/sys", "root", "1234");           สังเกตว่าเราจะต้องระบุ parameter กันไปโต้ง ๆ แบบนี้ ไม่ว่าจะเป็น admin หรือไม่ ก็สามารถนำ connection นี้ไปเชื่อมต่อฐานข้อมูลได้ทันที

          การเชื่อมต่อผ่าน datasource จะเป็นการผลักภาระให้ Application Server เป็นตัวจัดการ ซึ่งเรา (admin) จะต้องตั้งค่ารายละเอียดที่จำเป็นในการเชื่อมต่อฐานข้อมูลเข้าไป ซึ่งทำเพียงครั้งเดียว จากนั้นเขียนโปรแกรมเพื่อทำการ lookup ผ่านชื่อที่ตั้งไว้ โดยในภาพตัวอย่างเป็นการสร้าง datasource บน Wildfly Application Server*AppServ. ของภาษา Java มีหลายตัว หน้าจออาจแตกต่างกันเล็กน…

[Java] try-with-resouces กับการคืนทรัพยากรบน Java 7

Java 7 มี syntax ที่เราอาจไม่ได้รู้สึกตัวว่ามันมีอยู่ คราวนี้เราก็จะมาทำความรู้จัก try-with-resources ที่เป็นตัวช่วยสำคัญในการยุ่งกับ resources ต่าง ๆ เช่น การเชื่อมต่อฐานข้อมูล(Database connection) การเขียน-อ่านไฟล์ เป็นต้น

          ปกติแล้ว การเขียนโปรแกรมขั้นพื้นฐาน ก็เราได้รู้จักการใช้งาน object ซึ่งก็จะมี lifetime ของตัวมันเองแต่ก่อน การยุ่งกับ resources เราจำเป็นจะต้องเขียนเปิด-ปิดการใช้งานเอง จุดนี้ try-with-resources จะเข้ามาช่วยให้เราเขียนโค้ดง่ายขึ้น
การเชื่อมต่อฐานข้อมูลโดยไม่ใช้ try-with-resourcs ถ้าเขียนตามจินตนาการขั้นแรกสุด
เปิดใช้งาน resourcesอย่าลืมปิดเมื่อใช้เสร็จConnection con = getConnection(); ... .. . con.close()           แต่ แต่แต่ !การเรียกใช้งาน resources ส่วนใหญ่จะพ่วงกันมาหลายตัว และจะบังคับให้เราเขียน try-catch เพื่อจัดการบางอย่างเมื่อเกิดปัญหาขึ้น ซึ่งเราจะต้องตามปิด resources ทั้งเคสที่ทำงานถูกต้องและไม่ถูกต้องของทุกตัว
Connection con = null; Statement stm = null; ResultSet rs = null; try { String sql = "SELECT * FROM UserAccount"; con …

[Java] Java 8 ทำความเข้าใจให้มากขึ้นกับ Lambda Expression

เรื่องของ lambda คงต้องขยายความกันหน่อย หลังจากเกริ่นนำไปในโพส Java 8 มาเขียน lambda กันเถอะ ก็ทำให้ได้เห็น syntax กันไปบ้างแล้ว ครั้งนี้เราจะเพิ่มความรู้ว่า เขียนโปรแกรมยังไงให้ใช้ Lambda Expression ได้
Syntax ของ LambdaParameter คล้ายกับการเขียน method บางครั้งอาจมีวงเล็บOptional Parameter Type ปกติมักจะไม่ใส่กัน Parameter Name สามารถตั้งอะไรก็ได้ ไม่จำเป็นต้องเหมือนกับ method Arrow  ( -> )Body เหมือนกับ statement ทั่วไป คือถ้ามีคำสั่งเดียวก็ไม่จำเป็นต้องใส่ block 
แบบย่อ
message -> System.out.prinln(message); แบบเต็ม
(String message) -> { System.out.prinln(message); };แบบนิยม
(message) -> { System.out.prinln(message); }; รูปแบบการเขียนตามจำนวน parameter0parameter
() -> /* single statement */; () -> { /* statements block */ }; 1 parameter
p -> /* single statement */; p -> {/* statements block */}; (p) -> /* single statement */; (p) -> {/* statements block */}; (T p) -> {/* statements block */}; (T p) -> {/* statements block */};2+ parame…

[Java] Java 8 DateTime ใหม่ ไฉไลกว่าเดิม

Image
Java 8 นอกจาก lambda expression ที่สร้างความโกลาหลให้กับชีวิต Java Programmer ที่เป็นมือใหม่ในวงการ functional language แล้ว ยังมีการปรับปรุง library เกี่ยวกับ Date, Time ด้วย
เปลี่ยน package ในการใช้งาน เพื่อป้องกันการสับสน (ก่อนหน้านี้จะมี java.sql.Date กับ java.util.Date ให้งงเล่นๆ)
java.util.Date; java.time.*; เราเคยเจ็บปวดกับ date, time กันมาพอสมควร ถึงเวลาแล้วที่ Java จะช่วยให้ชีวิตเราดีขึ้น โดย... แยก class ซะเลย
LocalDate LocalTime LocalDateTime ดูชื่อทั้ง 3 ตัวแล้วคงไม่ต้องเล่าอะไรมาก Date มีแค่วันที่ Time มีแค่เวลา ถ้าสนใจทั้งวันและเวลาก็เอา DateTime ไปใช้ ส่วนที่ต้อง Local เพราะมี Zoned อยู่ด้านล่างพร้อมคำอธิบายครับ

การดึงวันเวลาปัจจุบันก็ถูกทำให้เข้าใจมากขึ้น ไม่ใช่ new Date() อีกต่อไป
LocalDate.now() //2016-11-19 LocalTime.now() //20:00:01.635 LocalDateTime.now() //2016-11-19T20:00:01.635
การสร้าง object date,time โดยระบุค่าเองLocalDate.of(int year, Month month, int dayOfMonth); LocalTime.of(int hour, int minute, int second, int nanoOfSecond); LocalDateTime.o…

สอบ Cert. Java (Oracle) ที่ไหน ยังไง ??

Image
เมื่อถึงเวลา เราจำเป็นจะต้องมีสิ่งที่รับประกันความสามารถของเรา ซึ่งยิ่งเป็นสาย IT อย่างเรา ๆ ก็จะมี 'Certificate' ที่เปิดให้สอบหลายตัว ขึ้นอยู่กับความถนัดของแต่ละคน ถูกแพงต่างกันไป ซึ่งสำหรับผมแล้วก็คือ Java

SCJA - Sun Certified Java Associate
เมื่อก่อน Java ยังเป็นของบริษัท Sun Microsystems ใครที่ทันสอบป่านนี้ก็คงมีฝีมือระดับเทพแล้ว

OCAJP - Oracle Certified Associate, Java Programmer
หลังจากที่ Oracle ซื้อ Java มา ก็ได้ปรับชื่อเดิมให้เป็นชื่อบริษัทตัวเองแทน ซึ่งใครมีแผนว่าจะสอบก็คงต้องเป็นตัวนี้แหละ ส่วนใครที่ได้ cert. ตัวเก่าจาก Sun มาแล้วก็สามารถนำมา upgrade level ถัดไปกับ Oracle ได้เลย

          พอตกลงปลงใจว่าจะสอบ เค้าก็จะมีให้เลือก Java version ที่เราต้องการสอบ แน่นอนว่ามันไม่เหมือนกัน เช่น Java 6 ยังไม่มี try-with-resource, Java 7 ยังไม่มี lambda expression ฯลฯ ส่วนตัวผมเลือกสอบ OCAJP (Java SE 8) แต่จริง ๆ ผมคุ้นเคย Java 7 มากกว่า แต่สอบทั้งทีเลยจัด Java 8 ซะงั้น ซึ่งในส่วนของการสอบนอกจากหัวข้อที่เพิ่มเติมมา ยังมีจำนวนข้อและเวลาสอบมากกว่าด้วย แต่ราคาเท่ากันนะ (ค…

Facebook Comment