<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    <title>JOMYUT.NET - Java</title>
    <link>http://diary.jomyut.net/</link>
    <description>Blog</description>
    <dc:language>en</dc:language>
    <generator>Serendipity 1.3 - http://www.s9y.org/</generator>
    <pubDate>Fri, 21 Sep 2007 08:21:55 GMT</pubDate>

    <image>
        <url>http://diary.jomyut.net/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: JOMYUT.NET - Java - Blog</title>
        <link>http://diary.jomyut.net/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>RMI: Unbind and Exit Thread</title>
    <link>http://diary.jomyut.net/archives/1095-RMI-Unbind-and-Exit-Thread.html</link>
            <category>Java</category>
    
    <comments>http://diary.jomyut.net/archives/1095-RMI-Unbind-and-Exit-Thread.html#comments</comments>
    <wfw:comment>http://diary.jomyut.net/wfwcomment.php?cid=1095</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://diary.jomyut.net/rss.php?version=2.0&amp;type=comments&amp;cid=1095</wfw:commentRss>
    

    <author>nospam@example.com (JOMYUT.NET)</author>
    <content:encoded>
    &lt;br /&gt;
&lt;h3&gt;How to unbind RMI service thread and detroy?&lt;/h3&gt;&lt;ol&gt;&lt;li&gt;Unbind the object from RMI service by&lt;br /&gt;&lt;font color=&quot;#0000ff&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;use:&lt;/font&gt; Naming.unbind(&lt;font color=&quot;#ff3300&quot;&gt;&amp;lt;Service Name&amp;gt;&lt;/font&gt;, this);&lt;/font&gt;&lt;/li&gt;&lt;li&gt;Unexport the object from RMI to remove the object from RMI&lt;br /&gt;use: &lt;font color=&quot;#0000ff&quot;&gt;UnicastRemoteObject.unexportObject(this, true);&lt;/font&gt;&lt;/li&gt;&lt;li&gt;Detroy the reference to object&lt;br /&gt;&lt;font color=&quot;#0000ff&quot;&gt;this.rmi_object = null;&lt;/font&gt;&lt;/li&gt;&lt;li&gt;Detroy the thread or make the reference to Thread variable to null&lt;br /&gt;&lt;font color=&quot;#0000ff&quot;&gt;this.rmi_thread = null;&lt;/font&gt;&lt;/li&gt;&lt;/ol&gt;After that, the object will no reference from RMI anymore.&lt;br /&gt;&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Fri, 21 Sep 2007 15:14:10 +0700</pubDate>
    <guid isPermaLink="false">http://diary.jomyut.net/archives/1095-guid.html</guid>
    
</item>
<item>
    <title>Solve: Class file has wrong version</title>
    <link>http://diary.jomyut.net/archives/659-Solve-Class-file-has-wrong-version.html</link>
            <category>Java</category>
    
    <comments>http://diary.jomyut.net/archives/659-Solve-Class-file-has-wrong-version.html#comments</comments>
    <wfw:comment>http://diary.jomyut.net/wfwcomment.php?cid=659</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://diary.jomyut.net/rss.php?version=2.0&amp;type=comments&amp;cid=659</wfw:commentRss>
    

    <author>nospam@example.com (JOMYUT.NET)</author>
    <content:encoded>
    &lt;br /&gt;
&lt;p&gt;&lt;strong&gt;&lt;font color=&quot;#0000ff&quot;&gt;bad class file&lt;/font&gt;&lt;/strong&gt;: ./com/****/***/example/session/utility/MFEncoder.class&lt;br /&gt;&lt;font color=&quot;#ff0000&quot;&gt;class file has wrong version 49.0, should be 48.0&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;ปัญหานี้เกิดขึ้นเมื่อใช้คำสั่ง Compile file สาเหตุเกิดจาก ไฟล์ที่เรากำลังจะ compile นั้น มีการใช้ class ซึ่ง compile ด้วย java version อื่นอยู่ (bad class file) จากตัวอย่าง ผม Compile ไฟล์ชื่อ MDSubDemo.java แต่เนื่องจาก ผมเพิ่งเปลี่ยน Compiler จาก JDK5.0 เป็น 1.4 ก็เลยเกิดปัญหานี้ขึ้น เพราะว่ามันมี file .class ที่อื่น ที่มัน compile ไว้แล้วด้วย JDK5.0 แล้วไม่ได้ถูกลบทิ้งไป ผลจึงทำให้ compile ไฟล์ไม่สำเร็จ&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;วิธีการแก้ปัญหาก็คือ ลบไฟล์ .class ที่ระบุอยู่ใน bad class file ทิ้ง ก็เป็นอันใช้ได้แล้ว.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;ในตัวอย่าง 49.0 เป็น version ของ JDK5.0 ส่วน 48.0 เป็น JDK1.4 สรุป มันกำลังบอกว่า คลาสไฟล์ผิดเวอร์ชั่น มันควรจะเป็นเวอร์ชั่น 48 นั่นเอง&lt;/p&gt; 
    </content:encoded>

    <pubDate>Mon, 04 Sep 2006 16:44:09 +0700</pubDate>
    <guid isPermaLink="false">http://diary.jomyut.net/archives/659-guid.html</guid>
    
</item>
<item>
    <title>Java Ambassador Day 4</title>
    <link>http://diary.jomyut.net/archives/339-Java-Ambassador-Day-4.html</link>
            <category>Java</category>
    
    <comments>http://diary.jomyut.net/archives/339-Java-Ambassador-Day-4.html#comments</comments>
    <wfw:comment>http://diary.jomyut.net/wfwcomment.php?cid=339</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://diary.jomyut.net/rss.php?version=2.0&amp;type=comments&amp;cid=339</wfw:commentRss>
    

    <author>nospam@example.com (JOMYUT.NET)</author>
    <content:encoded>
    &lt;br /&gt;
Java Ambassador Day 4 - Nested Class&lt;br /&gt;###############################################&lt;br /&gt;Nested Class - คลาสที่อยู่ข้างในคลาส&lt;br /&gt;Enclosing Class - คลาสหลักที่มีคลาสใดๆ อยู่ข้างใน&lt;br /&gt;&lt;br /&gt;&lt;font color=&quot;#990066&quot;&gt;&lt;b&gt;Exception&lt;/b&gt;&lt;br /&gt;&lt;b&gt;#########################&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;แบ่งออกเป็น Checked Exception และ UnChecked Exception&lt;br /&gt;1. Checked Exception &lt;br /&gt;2. UnChecked Exception&lt;br /&gt;&lt;br /&gt;วิธีการ Catch Exception&lt;br /&gt;- ถ้าต้องการ Catch Exception จะต้องดักจับ Exception Class ที่เป็นของ Sub Class ก่อน ที่จะเขียนเพื่อดักจับ Exception Class ของ Super Class เช่น catch (SubClassException e) จะต้องมาก่อน catch (SuperClassException e)&lt;br /&gt;- Constructor สามารถ Throw Exception ได้&lt;br /&gt;&lt;font color=&quot;#cc00cc&quot;&gt;&lt;b&gt;&lt;br /&gt;Tip Note: Interface can extends from some class&lt;br /&gt;#########################&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;ในส่วนของ Interface ถ้าสมุติว่ามีการประกาศ Function ที่มีการ Throw ออกมา ถ้าหาก Interface มีการ Extends มาจากหลาย Class เราจะเอา Exception ของแต่ละ Class แม่ที่ Interface Inherit มานั้นเอามาทำการ Intersec กัน ดังนั้น class ที่มีการ implement จาก interface ดังกล่าว จะต้องมีการ thow เฉพาะ Exception ที่มีการ Intersec กันเท่านั้น&lt;br /&gt;&lt;br /&gt;&lt;font color=&quot;#990066&quot;&gt;&lt;b&gt;Tip Note: Finally Block Priority&lt;br /&gt;#########################&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;try {&lt;br /&gt;    return false;&lt;br /&gt;} finally {&lt;br /&gt;    return true;&lt;br /&gt;}&lt;br /&gt;- อะไรที่อยู่ใน Finally จะมีผลมากที่สุด ดังนั้นแม้การทำงานจะ return เป็น false ไปแล้ว แต่ว่ามันก็จะ return true ตามสิ่งที่อยู่ใน finally&lt;br /&gt;- การเรียก System.exit จะทำให้ไม่ทำ finally Block &lt;br /&gt; &lt;br /&gt;&lt;a href=&quot;http://diary.jomyut.net/archives/339-Java-Ambassador-Day-4.html#extended&quot;&gt;Continue reading &quot;Java Ambassador Day 4&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Sun, 28 Aug 2005 21:47:05 +0700</pubDate>
    <guid isPermaLink="false">http://diary.jomyut.net/archives/339-guid.html</guid>
    
</item>
<item>
    <title>Sun Developer Day ฉ.3</title>
    <link>http://diary.jomyut.net/archives/324-Sun-Developer-Day-.3.html</link>
            <category>Java</category>
    
    <comments>http://diary.jomyut.net/archives/324-Sun-Developer-Day-.3.html#comments</comments>
    <wfw:comment>http://diary.jomyut.net/wfwcomment.php?cid=324</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://diary.jomyut.net/rss.php?version=2.0&amp;type=comments&amp;cid=324</wfw:commentRss>
    

    <author>nospam@example.com (JOMYUT.NET)</author>
    <content:encoded>
    &lt;br /&gt;
&lt;p&gt;เกร็ดเล็กเกร็ดน้อยจาก Sun Developer Day&lt;/p&gt;&lt;p&gt;่java.net - j2se.dev.java.net เว็บไซต์แนะนำ&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Vitual Machine แบ่ง Heap ออกเป็น 3 ระดับ มี &lt;font color=&quot;#cc0099&quot;&gt;Young Generation , Old Generation , Permanent Generation&lt;/font&gt; แต่ฟังไม่ทัน ในส่วนของ &lt;font color=&quot;#0000ff&quot;&gt;Young Generation จะใช้กับพวก Stack&lt;/font&gt; ยิ่งถ้ามี ขนาดใหญ่ จะสามารถสร้าง Object ใหม่ได้เร็วขึ้น ส่วน &lt;font color=&quot;#006666&quot;&gt;Old Generation ช่วยในการทำงานกับ Object ที่มีอายุการทำงานนาน (Long Lifetime)&lt;/font&gt; ปกติ Heap จะมีขนาด 4 Mb เป็น Default แต่สำหรับ Netbean จะกำหนด Default เป็น 20 Mb&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Parameter ที่น่าสนใจของ Young Generation ได้แก่ -XX:NewSize , -XX:MaxNewSize , -XX:NewRatio , -XX:SurivorRatio ส่วนของ Old Generation ก็จะมี -XX:OldSize , -XX:MinHeapFreeRatio , -XX:MaxHeapFreeRatio&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;คำสั่งที่น่าสนใจที่เอาไว้วัดประสิทธิภาพของโปรแกรม ได้แก่ jconsole เพื่อดูว่ามันเกิดอะไรขึ้นกับ JVM บ้าง&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;เว็บไซต์ของ Sun ที่สอนเกี่ยวกับ Performance ได้แก่ java.sun.com/..../performance/&lt;/p&gt;&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Sat, 20 Aug 2005 20:43:55 +0700</pubDate>
    <guid isPermaLink="false">http://diary.jomyut.net/archives/324-guid.html</guid>
    
</item>
<item>
    <title>JCreator: เพิ่มรายชื่อใน Popup ของ Code Completion</title>
    <link>http://diary.jomyut.net/archives/318-JCreator-Popup-Code-Completion.html</link>
            <category>Java</category>
    
    <comments>http://diary.jomyut.net/archives/318-JCreator-Popup-Code-Completion.html#comments</comments>
    <wfw:comment>http://diary.jomyut.net/wfwcomment.php?cid=318</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://diary.jomyut.net/rss.php?version=2.0&amp;type=comments&amp;cid=318</wfw:commentRss>
    

    <author>nospam@example.com (JOMYUT.NET)</author>
    <content:encoded>
    &lt;p&gt;ใน JCreator เราสามารถใส่ JavaDoc ซึ่ง Generate มาจาก Java เพื่อสร้าง API Document สำหรับเวลา Search หา Function , Class ที่ต้องการ แล้วก็ยังสามารถทำให้เวลาเขียนโปรแกรม จะมี Popup Code Completion ขึ้นมา เช่นเวลา Import ก็จะมีขึ้นว่ามี Class อะไรบ้าง&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;u&gt;&lt;b&gt;วิธีการปรับ JCreator&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;b&gt;ที่นี้ถ้า&lt;/b&gt;&lt;font color=&quot;#990066&quot;&gt; สมุติว่าเรามี Class จากข้างนอกหรือเขียนขึ้นมาเอง แล้วต้องการให้มันขึ้นใน Code Completion นี้จะต้องทำอย่างไร&lt;/font&gt; ก็ให้เลือก &lt;font color=&quot;#0000ff&quot;&gt;Project &amp;gt; Project Proproties&lt;/font&gt; ดูที่แถบ Required Libraries ให้ใส่ ตัว JAR File หรือว่า Class File ลงในหน้าของ Class , ถ้ามี Source Code ด้วย ก็ใส่ลงช่อง Source ช่องที่สำคัญคือช่องสุดท้าย &amp;quot;Document&amp;quot; ให้ใส่ JavaDoc ของ Class Library อันนั้น เท่านี้เวลาพิมพ์ มันก็จะขึ้น Popup Code Completion ขึ้นมา&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;ไอ้ที่สำคัญ คือ Class Tab กับ Document Tab , Class Tab นี่เอาไว้เวลา Link Library เวลา Compile โปรแกรมของเรา ส่วน Document Tab ใช้สำหรับสร้าง Popup Code Completion&lt;/p&gt; 
    </content:encoded>

    <pubDate>Wed, 17 Aug 2005 18:59:29 +0700</pubDate>
    <guid isPermaLink="false">http://diary.jomyut.net/archives/318-guid.html</guid>
    
</item>
<item>
    <title>Quicktime for Java</title>
    <link>http://diary.jomyut.net/archives/317-Quicktime-for-Java.html</link>
            <category>Java</category>
    
    <comments>http://diary.jomyut.net/archives/317-Quicktime-for-Java.html#comments</comments>
    <wfw:comment>http://diary.jomyut.net/wfwcomment.php?cid=317</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://diary.jomyut.net/rss.php?version=2.0&amp;type=comments&amp;cid=317</wfw:commentRss>
    

    <author>nospam@example.com (JOMYUT.NET)</author>
    <content:encoded>
    &lt;p&gt;สำหรับการใช้งาน&lt;b&gt; &lt;font color=&quot;#330099&quot;&gt;Quicktime For Java&lt;/font&gt;&lt;/b&gt; เพื่อใช้เล่น Multimedia ภายในโปรแกรมของเราที่เขียนด้วย Java อันดับแรก จะต้อง Download ตัว Quicktime มาลงก่อน ซึ่งตอนนี้ &lt;font color=&quot;#cc0033&quot;&gt;(Version 6.5) มันเอาไปรวมกับโปรแกรม iTunes ซึ่งเมื่อ Download มาจะ ไม่มี Option ใดๆให้เลือกเหมือนกับ Version ก่อนหน้า&lt;/font&gt; ผลทำให้ ไม่สามารถเลือกลง Package Quicktime for Java ได้ เพราะว่ามันไม่มีให้เลือก&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;วิธีการที่จะเอา Quicktime มาใช้ใน Java สำหรับ Version 6.5 ขึ้นไป คือ เมื่อ Install Quicktime with iTunes เสร็จเรียบร้อยแล้ว ให้เข้าไปเรียก &lt;font color=&quot;#cc0099&quot;&gt;Quicktime Updater &lt;/font&gt;ใน Start ของ Windows กดปุ่ม Custom แล้วค่อยเลือก Quicktime for Java ซึ่ง โปรแกรมจะ Download Package ของ Quicktime ที่จำเป็นจะต้องใช้ใน Java มา Save เก็บไว้ให้ที่ &lt;font color=&quot;#006666&quot;&gt;&amp;lt;JRE Path&amp;gt;/lib/ext/QTJava.zip&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;ดังนั้นสำหรับคนที่ลง JDK และ JRE หลายๆตัว ให้ทำการ Copy QTJava.zip นี้ไปใส่ใน JDK Folder หรือ JRE Folder หรือไม่ก็กำหนด Classpath ไปได้เลย เพียงแต่ผมใช้ JDK หลายตัวในตอนนี้ เลยใช้วิธี Copy ไปไว้ที่ JDK , JRE Folder แทน เพื่อที่ตอนหลังหากผมลบ จะได้ไม่เกิดปัญหา&lt;/p&gt;&lt;p /&gt; 
    </content:encoded>

    <pubDate>Wed, 17 Aug 2005 18:46:14 +0700</pubDate>
    <guid isPermaLink="false">http://diary.jomyut.net/archives/317-guid.html</guid>
    
</item>
<item>
    <title>RMI: My First RMI</title>
    <link>http://diary.jomyut.net/archives/316-RMI-My-First-RMI.html</link>
            <category>Java</category>
    
    <comments>http://diary.jomyut.net/archives/316-RMI-My-First-RMI.html#comments</comments>
    <wfw:comment>http://diary.jomyut.net/wfwcomment.php?cid=316</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://diary.jomyut.net/rss.php?version=2.0&amp;type=comments&amp;cid=316</wfw:commentRss>
    

    <author>nospam@example.com (JOMYUT.NET)</author>
    <content:encoded>
    &lt;br /&gt;
&lt;p&gt;&lt;b&gt;First RMI&lt;/b&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;นั่งเขียนทดสอบการใช้ RMI เป็นครั้งแรก เจอปัญหา Compile ไม่ผ่านเพราะ User Error อยู่นิดหน่อย ส่วน Code นี่ลอกมาจากตัว RMI Specification กับเว็บไซต์ตัวอย่างคราวก่อน โดยเปลี่ยน Function ไปก่อน. สรุปแล้ว RMI สามารถทำงานได้ในสภาวะแวดล้อมการทำงานแบบ Windows ไม่ใช่เฉพาะ Linux ที่เราคิดไว้ในช่วงแรกๆ.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;font color=&quot;#0000ff&quot;&gt;&lt;b&gt;Implementation&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;การนำไป Implement ใช้งานจริงนั้น สอนไม่ยากเลย เพียงเพิ่มพวก Exception ไปหน่อยก็ใช้ได้แล้ว แต่ไม่รู้ว่าเวลาทำ Project จริง จะสร้าง Intrerface Class ขึ้นมา เพื่อให้ การติดต่อระหว่าง Client - Server ติดต่อเพียงแค่ Interface Class เท่านั้น หรือว่าจะ Implement Class ทั้งหมดให้เป็น RMI แล้วให้ แต่ละ Class มีการเรียกกันผ่าน RMI เองดี.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;font color=&quot;#990066&quot;&gt;&lt;b&gt;Knowledgement&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;ในการสร้าง Class เพื่อใช้ RMI เราจะต้อง Compile Class ทั้งหมด 2 ครั้ง ครั้งแรก Compile ด้วย Java Compiler ตามปกติ ด้วย javac และตาม Compile อีกครั้งด้วย rmic จึงจะทำให้ตัว Server Application จะสามารถใช้งาน RMI ได้ ส่วน Class Client นั้น Compile ด้วย javac อย่างเดียวก็ใช้ได้&lt;/p&gt;&lt;p&gt;RMI นั้น จะ Lookup พวก Remote Object ผ่าน RMI Registry ซึ่งจะมีการตั้งชื่อบริการไว้ (&lt;font color=&quot;#cc00ff&quot;&gt;rmiregistry.rebind()&lt;/font&gt;) สำหรับถ้าอย่างเรามี Application หลายๆตัว ที่มีฟังก์ชั่นเดียวกัน เครื่อง Client มันจะได้ติดต่อถูก Application ผ่านชื่อ RMI Registry ที่มีการตั้งไว้ ในส่วนหลาย Application เรายังไม่ได้ทำการทำสอบ แต่อาจจะช่วยให้ Application หลายตัว ติดต่อผ่าน Port เดียวกันได้หรือเปล่าไม่แน่ใจ&lt;/p&gt;&lt;p&gt;เมื่อกี้ไดเข้าไปอ่านบทความหนึ่งเลย ค่อนข้างแน่ใจว่า Port เดียวสามารถใช้งานได้หลาย Application จริงๆ&lt;/p&gt;&lt;p&gt;สำหรับ &lt;font color=&quot;#669900&quot;&gt;พอร์ตมาตรฐานของ RMI คือ Port หมายเลข 1099&lt;/font&gt; แต่ของ Oracle RMI กลับเป็นพอร์ตหมายเลข 3201 ไม่รู้ว่าทำไมเค้า Design ให้มันแตกต่าง ไม่รู้ว่ามีความพิเศษอย่างไร&lt;/p&gt;&lt;p /&gt;&lt;div align=&quot;center&quot;&gt;&lt;pre&gt;&lt;b&gt;&lt;code&gt;&lt;font color=&quot;#cc3333&quot;&gt;rmi://&amp;lt;HOST_NAME&amp;gt;[:&amp;lt;PORT&amp;gt;]/&amp;lt;SERVICE_NAME&amp;gt;&lt;/font&gt; &lt;/code&gt;&lt;/b&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;b&gt;Related Site:&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/www.devx.com/Java/Article/20843&#039;);&quot;  target=&quot;_blank&quot; href=&quot;http://www.devx.com/Java/Article/20843&quot;&gt;DevX - Java Document&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;
&lt;/p&gt; 
    </content:encoded>

    <pubDate>Wed, 17 Aug 2005 14:58:41 +0700</pubDate>
    <guid isPermaLink="false">http://diary.jomyut.net/archives/316-guid.html</guid>
    
</item>
<item>
    <title>Java: Remote Method Invocation (RMI)</title>
    <link>http://diary.jomyut.net/archives/315-Java-Remote-Method-Invocation-RMI.html</link>
            <category>Java</category>
    
    <comments>http://diary.jomyut.net/archives/315-Java-Remote-Method-Invocation-RMI.html#comments</comments>
    <wfw:comment>http://diary.jomyut.net/wfwcomment.php?cid=315</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://diary.jomyut.net/rss.php?version=2.0&amp;type=comments&amp;cid=315</wfw:commentRss>
    

    <author>nospam@example.com (JOMYUT.NET)</author>
    <content:encoded>
    &lt;br /&gt;
&lt;p&gt;&lt;font color=&quot;#0000ff&quot;&gt;Remote Method Invocation&lt;/font&gt; เป็นการเรียกฟังก์ชั่นบนระบบต่างเครื่องสำหรับจาวา ใน Specification ของ Sun สำหรับ J2SE SDK 1.4.2 นั้น เค้าบอกว่า &lt;font color=&quot;#990033&quot;&gt;มันก็เหมือนกับ Remote Procedure Call (RPC)&lt;/font&gt; หละ แต่ที่แตกต่างคือ RPC นั้นไม่สามารถเปลี่ยนมาระบบแบบ Object Distributed ได้ ส่วนตัวคิดว่ามันคงมอง RPC เป็นลักษณะเรียกใช้ Procedure ไม่ได้เรียกใช้ และรับส่งข้อมูลเป็น Object ได้เหมือน Java ดังนั้น จึงมีการ&lt;font color=&quot;#3300ff&quot;&gt; สร้าง RMI ขึ้นมา เพื่อสนับสนุนการทำงานแบบ Distributed Object System&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;เมื่อวานเท่าที่อ่านดู เดิมทีคิดว่า RMI จะทำได้เฉพาะสภาพแวดล้อมที่เป็น Linux เพราะเห็น Optional Package ของ Java ที่เป็น RMI เขียน Requirement เป็นระบบ Linux แต่พอค้นจากเว็บ ก็เหมือนจะไม่ใช่ เพราะเหมือน Class ที่ใช้นั้น Release มาจาก J2SE โดยตรง ไม่ต้องเอา Optional Package มาลงเพิ่ม&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;สุดท้ายแล้ว ยังไม่ได้ทดสอบเหมือนกันว่า RMI ใช้ได้เฉพาะบน Linux มั๊ย แต่เห็นคำสั่งที่ RMI ต้องใช้ ของ J2SE มันมีการเตรียมมาให้เรียบร้อยแล้ว ดังนั้นก็เลยคิดว่าน่าจะใช้ได้. เดี๋ยววันนี้จะลองอีกครั้ง.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;จาก Specification และ ตัวอย่าง RMI ดัง Link ก็เลยทำให้รู้ว่า มันจะต้องมีการสร้าง Interface ขึ้นมา เพื่อเก็บว่ามีฟังก์ชั่นใดในเครื่องปลายทางที่เครื่องลูกสามารถใช้ได้บ้าง ส่วนเครื่องลูกจะมีการสร้าง object มี Type เป็น Interface ที่ประกาศดังกล่าวอีกที รายละเอียดส่วนอื่นๆยังไม่ได้ดูเพิ่มเติม&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;แต่หากสามารถนำมาใช้งานได้จริง คิดว่าน่าจะใช้กับโปรเจคได้อย่างยอดเยี่ยมมากขึ้น และเราก็ไม่ต้องสร้าง Class สนับสนุนการทำงานด้าน Network แต่สามารถสอนเพื่อนในกลุ่มให้ Implement ใช้กับ Class ที่เกี่ยวข้อง ที่จะต้องเขียนได้เลย.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;b&gt;Related Site&lt;/b&gt; :&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/yama-linux.cc.kagoshima-u.ac.jp/~yamanoue/researches/java/rmi-ex2/&#039;);&quot;  href=&quot;http://yama-linux.cc.kagoshima-u.ac.jp/~yamanoue/researches/java/rmi-ex2/&quot;&gt;ตัวอย่าง RMI&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a onclick=&quot;javascript: pageTracker._trackPageview(&#039;/extlink/java.sun.com/j2se/1.4.2/docs/guide/rmi/index.html&#039;);&quot;  href=&quot;http://java.sun.com/j2se/1.4.2/docs/guide/rmi/index.html&quot; target=&quot;_blank&quot;&gt;Sun - Java RMI Content&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Tue, 16 Aug 2005 22:00:25 +0700</pubDate>
    <guid isPermaLink="false">http://diary.jomyut.net/archives/315-guid.html</guid>
    
</item>
<item>
    <title>Java: ส่ง Object ไปตามสาย เอิ๊กๆ</title>
    <link>http://diary.jomyut.net/archives/311-Java-Object.html</link>
            <category>Java</category>
    
    <comments>http://diary.jomyut.net/archives/311-Java-Object.html#comments</comments>
    <wfw:comment>http://diary.jomyut.net/wfwcomment.php?cid=311</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://diary.jomyut.net/rss.php?version=2.0&amp;type=comments&amp;cid=311</wfw:commentRss>
    

    <author>nospam@example.com (JOMYUT.NET)</author>
    <content:encoded>
    &lt;br /&gt;
&lt;p&gt;วันนี้ หลังจากย้าย JOMYUT.NET ส่วนของ Development นึกว่าจะไม่ได้เขียนโปรแกรมเล่นซะแล้ว แต่ท้ายที่สุด เที่ยงคืนกว่าๆของวันนี้ ก็ได้เล่นการส่ง Object สักที นั่งลองเล่น ส่ง Object ไปตาม Network โดยใช้ ObjectInputStream ที่ได้เรียนรู้ในการเรียนวันนี้ ว่ามันเอาไว้เป็นท่อของ Object เราเอาท่อของ &lt;font color=&quot;#0000ff&quot;&gt;ObjectInputStream ไปต่อกับ OutputStream&lt;/font&gt; ที่ get มาได้จาก &lt;b&gt;Socket&lt;/b&gt; ส่วนตัว Object ที่เราต้องการจะส่งตามสายนี่&lt;/p&gt;&lt;p&gt;จะต้องทำให้มันเป็นสายก่อน อิอิ โดย Class นั้นจะต้อง Implements Serializable เท่านี้เราก็เอา Class ส่งไปตามสายได้แล้วฮับ.&lt;/p&gt;&lt;p&gt;ต้องเอาไปใช้ทำ OO Project เรื่อง &lt;font color=&quot;#ff00ff&quot;&gt;&lt;b&gt;ระบบจัดคิวเพลงร้านคาราโอเกะ&lt;/b&gt; &lt;/font&gt;ด้วย.&lt;/p&gt;&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Mon, 15 Aug 2005 01:46:31 +0700</pubDate>
    <guid isPermaLink="false">http://diary.jomyut.net/archives/311-guid.html</guid>
    
</item>
<item>
    <title>JAVA: Garbarge Corrector</title>
    <link>http://diary.jomyut.net/archives/308-JAVA-Garbarge-Corrector.html</link>
            <category>Java</category>
    
    <comments>http://diary.jomyut.net/archives/308-JAVA-Garbarge-Corrector.html#comments</comments>
    <wfw:comment>http://diary.jomyut.net/wfwcomment.php?cid=308</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://diary.jomyut.net/rss.php?version=2.0&amp;type=comments&amp;cid=308</wfw:commentRss>
    

    <author>nospam@example.com (JOMYUT.NET)</author>
    <content:encoded>
    &lt;br /&gt;
&lt;font color=&quot;#0000ff&quot;&gt;&lt;b&gt;Garbarge Corrector&lt;/b&gt;&lt;/font&gt;&lt;p&gt; คือ ตัวกำจัดขยะ อันได้แก่ Memory ที่โปรแกรมไม่มีการอ้างถึง ของ Java ซึ่งแตกต่างจากในภาษา C ที่เราจะต้องมีการคืนหน่วยความจำเอง แต่สำหรับ Java นั้น Garbarge Corrector จะทำหน้าที่จัดการให้ &amp;quot;ซึ่งตรงจุดนี้ แปลว่า Garbarge Corrector จะต้องคอยตรวจสอบว่ามีเมมโมรี่ที่ต้องคืนหรือไม่ ตรงนี้จะเป็น Overhead ของระบบ (ประมวลผลส่วนที่ไม่ใช่งานของเรา)&lt;br /&gt;
แต่ว่าง่ายในการเขียนโปรแกรม&amp;quot; อ.ศรัณย์ สอน&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;วันนี้ทำให้ได้รู้ว่า &lt;font color=&quot;#990000&quot;&gt;Garbarge Corrector&lt;/font&gt; ไม่ได้ทำงานตลอดเวลา แต่ว่าทำงานเป็นเสมือน Thead หนึ่งของ Java ซึ่งมี Priority ในการทำงานต่ำสุด (Low Piority Thread) เราจึงไม่สามารถเชื่อถือได้ว่า เมื่อไหร่ ที่จะมีการเคลียร์เมมโมรี่ ซึ่งบางครั้ง ทำงานจนจบโปรแกรมแล้ว อาจจะยังไม่มีการเรียก Garbarge Corrector เลยก็ได้ วิธีการกระตุ้นให้ Garbarge Corrrector ทำงาน ใช้ Static Method ของ Class Runtime ชื่อว่า System.rc() แต่ทั้งนี้ ก็ไม่ได้หมายความว่า Garbarge Corrector ทำงานทันทีอยู่นั่นหละ. แค่ไปกระตุ้นมัน อาจจะทำ หรืออาจจะไม่ทำ&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;font color=&quot;#0000ff&quot;&gt;&lt;font color=&quot;#cc00ff&quot;&gt;Garbarge Corrector&lt;/font&gt; &lt;/font&gt;มี Algorithm ง่ายๆคือ การนับจำนวนตัวแปรที่มีการอ้างถึง Address ดังกล่าว โดยเมื่อพบว่า Address ใด มีตัวแปรที่อ้างถึงเป็น 0 เมื่อนั้น ก็จะทำการกำจัดพื้นที่ส่วนนั้นคืนให้กับระบบ&lt;/p&gt; 
    </content:encoded>

    <pubDate>Sat, 13 Aug 2005 19:27:27 +0700</pubDate>
    <guid isPermaLink="false">http://diary.jomyut.net/archives/308-guid.html</guid>
    
</item>
<item>
    <title>JAVA: illegal start of type</title>
    <link>http://diary.jomyut.net/archives/190-JAVA-illegal-start-of-type.html</link>
            <category>Java</category>
    
    <comments>http://diary.jomyut.net/archives/190-JAVA-illegal-start-of-type.html#comments</comments>
    <wfw:comment>http://diary.jomyut.net/wfwcomment.php?cid=190</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://diary.jomyut.net/rss.php?version=2.0&amp;type=comments&amp;cid=190</wfw:commentRss>
    

    <author>nospam@example.com ()</author>
    <content:encoded>
    &lt;br /&gt;
อ่าา... ภายหลังจากหัดเขียน Java มาแล้ว ก็พบข้อผิดพลาดอันหนึ่งที่เรามักจะผิดเป็นประจำคือ&lt;br /&gt;
&amp;quot;illegal start of type&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ปัญหานี้เกิดจากเราลืมประกาศหัว Method เช่น เราอาจจะมีการเขียน implement การทำงานของ function&lt;br /&gt;
ใน Class เลย ทั้งๆที่ควรจะเป็น สร้าง method ขึ้นมาใน class นั้นๆ จากนั้นจึงค่อยใส่คำสั่งในนั้น.&lt;br /&gt;
&lt;br /&gt;
%-v 
    </content:encoded>

    <pubDate>Mon, 14 Mar 2005 21:33:09 +0700</pubDate>
    <guid isPermaLink="false">http://diary.jomyut.net/archives/190-guid.html</guid>
    
</item>

</channel>
</rss>