• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
EJB Programming Using Eclipse & JBoss
 

EJB Programming Using Eclipse & JBoss

on

  • 2,700 views

เอกสารการสอน Mini Master of Java Technology

เอกสารการสอน Mini Master of Java Technology

Statistics

Views

Total Views
2,700
Views on SlideShare
2,700
Embed Views
0

Actions

Likes
2
Downloads
368
Comments
2

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

12 of 2 previous next

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    EJB Programming Using Eclipse & JBoss EJB Programming Using Eclipse & JBoss Document Transcript

    • 1 Hand-on Exercises การพัฒนฒนาโปรแกรม EJB 3.0 and JPA โดยใช้੼ Eclipse และ JBoss Assoc.Prof.Dr.Thanachart Numnonda Software Park Thailand and Asst Prof.Thanisa Kruawaisayawan King Mongkuts Institute of Technology Ladkrabang June 2011การพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 2 บทนำ เอกสารนใช้ในการปในการประกอบการสอนวช้ในการปา Java 301 : EJB 3.0 ของหลักสูตร กสตร Mini Master of JavaTechnology คณะเทคโนโลักสูตร ยสารสนเทศ สถาบนพัฒนระจอมเกลักสูตร าเจาคณทหารลักสูตร าด้วย Entกระบง โด้วย Entยมจด้วย Entประสงค(เพัฒน)*อให,เรยนได้วย Entเขาใจถ.งการพัฒนฒนาโปรแกรม Java Enterprise Application ท*ใช้ในการป Enterprise Java Bean 3.0 แลักสูตร ะJava Persistence API ทงนแบบ/.กหด้วย Entนอางองกบเคร)*องม)อพัฒนฒนาโปรแกรมจาวา Eclipse แลักสูตร ะ โปรแกรมJBoss Application Server thananum@gmail.com twitter.com/thanachart www.facebook.com/thanachart www.thaijavadev.com มถนายน 2554การพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 3สารบัญญExercise 1 Stateless Session Bean Using EJB 3.0................................................................................4Exercise 2 Stateful Session Bean Using EJB 3.0...............................................................................21Exercise 3 Entity Class (JPA).............................................................................................................26Exercise 4 การพัฒนาJSPฒนา JSP เพัฒนาJSPอเรยกใช้ EJB EJB 3.0.....................................................................................36Exercise 5 JPA : Entity Relationships................................................................................................41Exercise 6 JPA: Inheritance................................................................................................................60Exercise 7 Message Driven Bean.......................................................................................................70Exercise 8 EJB Security.....................................................................................................................75Exercise 9 Using Java Persistence API in Visual Web JSF applications...........................................83การพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 4 Exercise 1 Stateless Session Bean Using EJB 3.0 แบบ/.กหด้วย Entนเป0นการพัฒนฒนาโปรแกรม Enterprise Java Bean (EJB) โด้วย Entยใช้ในการป EJB 3.0 สราง SessionBean แลักสูตร ะแสด้วย Entงตวอย1างการเรยกใช้ในการป Session Bean จาก Web Application โด้วย Entยใช้ในการป Java Servlet แลักสูตร ะจากDesktop Application โด้วย Entยใช้ในการป Java SEขนตอนในการพัฒนาโปรฒนาโปรแกรม 1. สราง Enterprise Application Project 2. พัฒนฒนา Session Bean 3. พัฒนฒนา Web Application 4. พัฒนฒนา Desktop Application1.1 ก รสร ง Enterprise Application Project สราง Project แบบ Enterprise Application ซึ่งมี E.*งม EJB Module แลักสูตร ะ Web Module ภายในตว Project 1. สราง Project โด้วย Entยเลักสูตร )อกเมน File → New → Enterprise Application Project ก4าหนด้วย Ent Project Name เป0น SessionBeanDemo 2. สราง Server ท*จะรน Click ท*ป1ม New Runtime... ก4าหนด้วย Ent Directory ท*ม JBoss Application Server อย1 3. กด้วย Ent Next กด้วย Entป1ม New Module... เลักสูตร )อก EJB Module แลักสูตร ะ Web Module กด้วย Ent Finish จนจบ Wizardการพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 5 รปที่ 1.1 การสราง Enterprise Application Projectการพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 61.2 ก รพัฒนฒนำ โปรแกรม Session Bean โปรแกรม EJB จะใช้ในการป Session Bean ในการตด้วย Entต1อกบโปรแกรมอ)*นๆ ภายนอก EJB Containerโด้วย Entย Session Bean จะประกอบด้วย Entวย Business Method ต1างๆ ในแบบ/.กหด้วย Entจะสราง Session Bean ท*ช้ในการป)*อBLSession ท*ม Business method สองเมธอด้วย Entค)อ ● String sayHi(String name) ● double currencyConvert(String currency, double amt) โด้วย Entยเราสามารถท*จะพัฒนฒนาโปรแกรมนได้วย Entด้วย Entงน 1. คลักสูตร 7กขวาท* SessionBeanDemoEJB → New → Session Bean(EJB 3.x) 2. ก4าหนด้วย Ent Java package = ejb Class Name = BLSession State Type = Stateless Create Business Interface เลักสูตร )อกทง Remote แลักสูตร ะ Local ด้วย Entงรปท* 1.2 รปที่ 1.2 ไดอะล็อกการสอกการสราง Session Beanการพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 7 3. แลักสูตร วกด้วย Ent Finish โปรแกรมจะสรางไฟลักสูตร (ต1างๆ มาใหด้วย Entงรป รปที่ 1.3 โครงสรางของไฟล็อกการสของ Session Bean 4. Declare Method Signature 2 methods ท* Interface BLSessionLocal , BLSessionRemote Method Name ช้ในการป)*อ sayHi Return Type : String Input Parameter = name เป0น String Method Name ช้ในการป)*อ currencyConvert Return Type : double Input Parameter 1 = currency เป0น String Input Parameter 2 = amt เป0น double ท4าไมตอก4าหนด้วย Ent Signature Method ใหกบ Interface? ม 2 กรณ ค)อ 1. ,เรยก EJB อย1บน Virtual Machine เด้วย Entยวกนกบ EJB ,เรยกจะใช้ในการปงาน Method ท*ระบใน Interface BLSessionLocal 2. ,เรยกอย1คนลักสูตร ะ Virtual Machine หร)อคนลักสูตร ะเคร)อง * ,เรยกจะใช้ในการปงาน Method ท*ระบใน Interface BLSessionRemoteการพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 8Listing 1.1 ประกาศ Signature Method ท* Interface ทง Local แลักสูตร ะ Remote--- File Local--------------------------------------------------------------@Localpublic interface BLSessionLocal { public String sayHi(String name); public double currencyConvert(String currency,double amt);}--- File Remote-------------------------------------------------------------@Remotepublic interface BLSessionRemote { public String sayHi(String name); public double currencyConvert(String currency,double amt);} 5. จะเห0นว1าม Error เกด้วย Entขนท* BLSession.java (Concrete Class) ใหใช้ในการป mouse วางท* Error . eclipse จะบอกว1าให implement method ท* interface บงคบไว กรณนกด้วย Entเลักสูตร )อกท* บรรทด้วย Entแรก Add Unimplemented Methods ด้วย Entงรป รปที่ 1.4 ที่ !าการ Implement source code ที่ concrete class : BLSession 6. ให Implement source code ส4าหรบ Business Method ทงสองด้วย Entงน public String sayHi(String name) { return "Hello " + name; } public double currencyConvertor(String currency, double amt) { if (currency.equals("baht")) { return (amt / 35); } else if (currency.equals("euro")) { return (amt * 2); } else { return 0; } }การพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 91.3 ก รพัฒนฒนำ โปรแกรม Web Application โปรแกรม EJB จะเป0นส1 วนของ Business Logic เท1านน การพัฒนฒนาส1 วนของ Presentation จะตองใช้ในการปโปรแกรม Web Application หร)อ Java SE ในขนตอนนจะพัฒนฒนาโปรแกรม Web Application เพัฒน)*อเรยกใช้ในการป Business Method ของ BLSessionท*ช้ในการป)*อ sayHi โด้วย Entยก4าหนด้วย Entให,ใช้ในการปส1 งพัฒนารามเตอร( String myName ไป Servlet ท*ช้ในการป)*อ SayHiServlet 1. คลักสูตร 7กขวาท* SessionBeanDemoWeb เลักสูตร )อก New → Servlet 2. ก4าหนด้วย Ent Package = controller Class Name = SayHiServlet รปที่ 1.5 สราง Servlet เพัฒนาโปร#อต$ดต%อกบ EJB3การพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 10 3. Set ให Web Project รจก EJB Project โด้วย Entยคลักสูตร กขวาท* SessionBeanDemoWeb เลักสูตร )อก Build Path → Configure Build Path รปที่ 1.6 ที่ !าให้ Web P Web Project มองเห้ Web Pน EJB Project 4. เพัฒนม Source code ในการเรยก EJB ท* Servlet โด้วย Entย Declare เป0น Instant Variable * public class SayHiServlet extends HttpServlet { @EJB private BLSessionLocal blSession; .......... .......... .......... 5. ใหปรบปรง Source code ในเมธอด้วย Ent processRequest ด้วย Entงน protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("TIS-620"); response.setContentType("TIS-620"); PrintWriter out = response.getWriter(); out.println("<html><body>"); out.println(blSession.sayHi(request.getParameter("myName"))); out.println("</body></html>"); out.close(); }การพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 111.4 ก รทดสอบโปรแกรม 1. ท4าการ Add โปรแกรม SessionBeanDemo เขาส1 JBoss Application Server 2. ใส1 URL ของ Web Browser เป0น http://localhost:8080/SessionBeanDemoWeb/SayHiServlet?myName=Thana 3. โปรแกรม Web Browser จะแสด้วย Entงขอความ Hello Thana ออกมาการพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 121.5 ก รพัฒนฒนำ โปรแกรม Desktop Application ติดต่อกัดติดต่อกัอกบ EJB 3.0 เราสามารถท*จะเขยนโปรแกรม Desktop Application เพัฒน)*อท*จะเรยกใช้ในการป EJB ในขนตอนนจะเป0นการพัฒนฒนาโปรแกรม Java SE เพัฒน)*อเรยกใช้ในการป Business Method ของ BLSession โด้วย Entยจะท4าการพัฒนฒนาโปรแกรมสองโปรแกรม โปรแกรมแรกค)อโปรแกรม Main.java จะเรยกเมธอด้วย Entท*ช้ในการป)*อ sayHi จาก command prompt ส1 วนโปรแกรมท*สองค)อโปรแกรม CurrencyConvertor.java จะเรยกเมธอด้วย Entท*ช้ในการป)*อ currencyConvert โด้วย Entยก4าหนด้วย Entใหโปรแกรมนม GUI เพัฒน)*อให,ใช้ในการปปอนขอมลักสูตร เพัฒน)*อก4าหนด้วย Entสกลักสูตร เงนแลักสูตร ะจ4านวนเงน แลักสูตร ะมขนตอนการพัฒนฒนาด้วย Entงน 1. คลักสูตร กขวาท* SessionBeanDemo เลักสูตร )อก New → Application Client Module ก4าหนด้วย Ent Project Name = SessionBeanDemoClient 2. คลักสูตร กเลักสูตร )อก check box เป0น Add project to an EAR เลักสูตร )อก dropdown ช้ในการป)*อ SessionBeanDemo รปที่ 1.7 การเพัฒนาโปร$ม Enterprise Application Client เขาส% Enterprise Application Projectการพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 131.5.1 แกไข EJB Project (เพัฒน*ม Mapping Name) เพัฒน)*อให Application Client เรยกใช้ในการป SessionBean ของ EJB ได้วย Ent จะตอง Register ช้ในการป)*อของ SessionBean เขาส1 Context หร)อเรยกว1าการ Mapping ไปท* SessionBeanDemoEJB ท* @Stateless ใหเพัฒนม วงเลักสูตร 0บ แลักสูตร วกด้วย Ent Ctrl+Space จะม hint มาให * เลักสูตร )อก mappedName แลักสูตร วใส1 ช้ในการป)*อท*ตองการ รปที่ 1.8 การเพัฒนาโปร$มชื่อของ #อของ Session Bean เขาส% Context ของ JBoss Application Server1.5.2 การพัฒนฒนาโปรแกรม Main.java Implement Source code ของ Main.java ด้วย Entงนimport java.util.Hashtable;import javax.naming.Context;import javax.naming.InitialContext;import javax.naming.NamingException;import ejb.BLSessionRemote;public class Main { public static void main(String[] args) throws NamingException { Context ctx = getJBossNamingContext(); BLSessionRemote sb = (BLSessionRemote)ctx.lookup("SessionBeanForClient"); String result = sb.sayHi("Thana"); System.out.println(result); } public static Context getJBossNamingContext() throws NamingException{ Hashtable<String, String> env = new Hashtable<String, String>(); env.put("java.naming.factory.initial","org.jboss.naming.NamingContextFactory"); env.put("java.naming.provider.url", "localhost:1099"); return new InitialContext(env); }} ท* Method getJBossNamingContext() พัฒนบว1ามการ Config ถ.ง host:port ของ Naming Service(เป0นท*ๆเราจะเขาไปถามหา Session Bean ช้ในการป)*อ “SessionBeanForClient”) เราจะตองหา port ของ Server ท*มEJB อย1 ซึ่งมี E.*งท4าได้วย Entโด้วย Entย double click ท* Server JBoss ด้วย Entงรปการพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 14 รปที่ 1.9 การห้ Web Pา JNDI port ของ Server ที่ EJB Project Deploy อยู่t % จากนนท4าการรน Application จะได้วย Ent,ลักสูตร ลักสูตร พัฒนธ(ค)อ Hello Thana print ออกมาท* Consoleการพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 151.5.3 การพัฒนฒนาโปรแกรม CurrencyConvertor.java โปรแกรม Desktop Application จะมลักสูตร กษณะด้วย Entงรป โด้วย Entยจะใช้ในการป GUI Designer (Jigloo) ในการพัฒนฒนา รปที่ 1.10 GUI ของโปรแกรม CurrencyConvertor 1. คลักสูตร กขวาท*โหนด้วย Ent SessionBeanDemoClient เลักสูตร )อก appClientModule → New → Other... → GUI Forms → Swing → Jframe จะมได้วย Entอะลักสูตร 0อกข.นมา ก4าหนด้วย Ent Package = swing แลักสูตร ะ Class Name = CurrencyConvertor รปที่ 1.11 สราง Swing GUIการพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 16 2. คลักสูตร 7กท* JFrame แลักสูตร วเปลักสูตร *ยน property ท*ช้ในการป)*อ title เป0น Currency Convertor รปที่ 1.12 สราง Swing GUI 3. เพัฒนม JPanel แบบ Form * รปที่ 1.13 สราง Swing GUI 4.การพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 17 5. ลักสูตร ากไอคอน Label ใน Swing Controls จาก Table Compoments Drag & Drop ไปท*หนาต1าง ด้วย Entงรป แลักสูตร วก4าหนด้วย Entค1า รปที่ 1.14 การวาง Label ใน Components Windows 6. คลักสูตร 7กเลักสูตร )อก jLabel แต1ลักสูตร ะตว แลักสูตร ะเปลักสูตร *ยน property ท*ช้ในการป)*อ text เป0น currency, amount แลักสูตร ะ value 7. ลักสูตร ากไอคอน Combo Box มาในต4าแหน1งทางขวาม)อของ currency จากนนใน property ใหเลักสูตร )อก model โด้วย Entยก4าหนด้วย Ent Item สองรายการใหเป0น baht แลักสูตร ะ euro ด้วย Entงรป รปที่ 1.15 การก!าห้ Web Pนดค%า item ของ ComboBoxการพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 18 8. ท4าการ implement sourcecode ด้วย Entงรป 9. Implement source code กรณท*มการกด้วย Entป1ม Calculate โด้วย Entยแกไข source code ด้วย Entงน private void jButton1ActionPerformed(ActionEvent evt) { System.out.println("jButton1.actionPerformed, event="+evt); try { Context ctx = getJBossNamingContext(); BLSessionRemote obj = (BLSessionRemote) ctx.lookup("SessionBeanForClient"); int index = jComboBox1.getSelectedIndex(); String currency = (String) jComboBox1.getItemAt(index); String amtStr = jTextField1.getText(); double amt = Double.parseDouble(amtStr); double usDollar = obj.currencyConvertor(currency, amt); jTextField2.setText(usDollar + ""); } catch (Exception ex) { ex.printStackTrace(); } } public Context getJBossNamingContext() throws NamingException{ Hashtable<String, String> env = new Hashtable<String, String>(); env.put("java.naming.factory.initial","org.jboss.naming.NamingContextFactory"); env.put("java.naming.provider.url", "localhost:1099"); return new InitialContext(env); } 10. ป1ม Exit ท4าเช้ในการป1นเด้วย Entยวกบป1ม Calculate private void jButton2ActionPerformed(ActionEvent evt) { System.out.println("jButton2.actionPerformed, event=" + evt); System.exit(0); } 11. ทด้วย Entสอบโปรแกรมโด้วย Entยการเลักสูตร )อกสกลักสูตร เงน แลักสูตร ะปอนจ4านวนเงน แลักสูตร วกด้วย Entป1ม Calculateการพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 19Source Code ท* Jigloo สรางข.นมา แลักสูตร ะท*เราปรบปรงทงหมด้วย Entpackage swing;import com.jgoodies.forms.layout.CellConstraints;import com.jgoodies.forms.layout.FormLayout;import ejb.BLSessionRemote;import java.awt.BorderLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.Hashtable;import javax.naming.*;import javax.swing.ComboBoxModel;import javax.swing.DefaultComboBoxModel;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JTextField;import javax.swing.WindowConstants;import javax.swing.SwingUtilities;import org.apache.bsf.Main;/** * This code was edited or generated using CloudGardens Jigloo SWT/Swing GUI * Builder, which is free for non-commercial use. If Jigloo is being used * commercially (ie, by a corporation, company or business for any purpose * whatever) then you should purchase a license for each developer using Jigloo. * Please visit www.cloudgarden.com for details. Use of Jigloo implies * acceptance of these licensing terms. A COMMERCIAL LICENSE HAS NOT BEEN * PURCHASED FOR THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED LEGALLY FOR * ANY CORPORATE OR COMMERCIAL PURPOSE. */public class CurrencyConverter extends javax.swing.JFrame { private JPanel jPanel1; private JLabel jLabel3; private JButton jButton1; private JComboBox jComboBox1; private JButton jButton2; private JTextField jTextField2; private JTextField jTextField1; private JLabel jLabel2; private JLabel jLabel1; /** * Auto-generated main method to display this JFrame */ public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { CurrencyConverter inst = new CurrencyConverter(); inst.setLocationRelativeTo(null); inst.setVisible(true); } }); } public CurrencyConverter() { super(); initGUI(); } private void initGUI() { try { setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); { jPanel1 = new JPanel(); FormLayout jPanel1Layout = new FormLayout( "53dlu, 42dlu, 41dlu, 44dlu", "max(p;5dlu), max(p;5dlu), max(p;5dlu), max(p;5dlu)"); getContentPane().add(jPanel1, BorderLayout.CENTER); jPanel1.setLayout(jPanel1Layout); jPanel1.setPreferredSize(new java.awt.Dimension(182, 104)); { jLabel1 = new JLabel(); jPanel1.add(jLabel1, new CellConstraints( "1, 1, 1, 1, default, default")); jLabel1.setText("Currency"); } { jLabel2 = new JLabel(); jPanel1.add(jLabel2, new CellConstraints( "1, 2, 1, 1, default, default")); jLabel2.setText("Amount"); } { jLabel3 = new JLabel(); jPanel1.add(jLabel3, new CellConstraints( "1, 3, 1, 1, default, default")); jLabel3.setText("Value [Dollars] "); } { jTextField1 = new JTextField(); jPanel1.add(jTextField1, new CellConstraints( "2, 2, 1, 1, default, default")); } { jTextField2 = new JTextField();การพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 20 jPanel1.add(jTextField2, new CellConstraints( "2, 3, 1, 1, default, default")); } { jButton1 = new JButton(); jPanel1.add(jButton1, new CellConstraints( "1, 4, 1, 1, default, default")); jButton1.setText("Calculate"); jButton1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { jButton1ActionPerformed(evt); } }); } { jButton2 = new JButton(); jPanel1.add(jButton2, new CellConstraints( "2, 4, 1, 1, default, default")); jButton2.setText("Exit"); jButton2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { jButton2ActionPerformed(evt); } }); } { ComboBoxModel jComboBox1Model = new DefaultComboBoxModel( new String[] { "baht", "euro" }); jComboBox1 = new JComboBox(); jPanel1.add(getJComboBox1(), new CellConstraints("2, 1, 1, 1, default, default")); jComboBox1.setModel(jComboBox1Model); } } pack(); } catch (Exception e) { e.printStackTrace(); } } private void jButton2ActionPerformed(ActionEvent evt) { System.out.println("jButton2.actionPerformed, event=" + evt); System.exit(0); } public JComboBox getJComboBox1() { return jComboBox1; } private void jButton1ActionPerformed(ActionEvent evt) { System.out.println("jButton1.actionPerformed, event="+evt); try { Context ctx = getJBossNamingContext(); BLSessionRemote obj = (BLSessionRemote) ctx.lookup("SessionBeanForClient"); int index = jComboBox1.getSelectedIndex(); String currency = (String) jComboBox1.getItemAt(index); String amtStr = jTextField1.getText(); double amt = Double.parseDouble(amtStr); double usDollar = obj.currencyConvertor(currency, amt); jTextField2.setText(usDollar + ""); } catch (Exception ex) { ex.printStackTrace(); } } public Context getJBossNamingContext() throws NamingException{ Hashtable<String, String> env = new Hashtable<String, String>(); env.put("java.naming.factory.initial","org.jboss.naming.NamingContextFactory"); env.put("java.naming.provider.url", "localhost:1099"); return new InitialContext(env); }}การพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 21 Exercise 2 Stateful Session Bean Using EJB 3.0เน#อห้ Web Pาที่ ตองศึกษาก่อ-กษาก%อน Session Bean Using EJB 3.0 แบบ/.กหด้วย Entในบทนเป0นการพัฒนฒนา Stateful Session Bean ส4าหรบ Shopping Cart โด้วย Entยใช้ในการป EJB 3.0โด้วย Entยก4าหนด้วย Entให Session Bean มช้ในการป)*อเป0น Cart แลักสูตร ะม Business Methods สามเมธอด้วย Entค)อ ● void putItem(String itemId, int quantity) ● void removeItem(String itemId) ● Hashtable getItems() นอกจากนจะม เมธอด้วย Entเท*ถกเรยกจาก @PostConstruct ค)อ ● void initialize() แลักสูตร ะ Bean Class จะมตวแปรของออปเจ0ค (instance variable) สองตวค)อ ● String customerId ● Hashtable cart ในแบบ/.กหด้วย Entนเราจะเขยน Java Servlet ข.นมาเพัฒน)*อเรยกใช้ในการป Cart Session Bean ท*ช้ในการป)*อCartManager.java เพัฒน)*อใช้ในการปในการเพัฒน*ม/ลักสูตร บรายการออกจาก Cart แลักสูตร ะ เพัฒน)*อแสด้วย Entงรายการท*อย1ใน Cart โด้วย Entย,ท*เรยก 1ใช้ในการป CartManager จะตองส1 งพัฒนารามเตอร(ท*ช้ในการป)*อ action มาเพัฒน)อระบวาตองการท4าอะไรกบ Cart โด้วย Entยม action ด้วย Entงน ● add เพัฒน)*อเพัฒน*มรายการลักสูตร งใน Cart ● remove เพัฒน)*อลักสูตร บรายการออกจาก Cart ● list เพัฒน)*อแสด้วย Entงรายการใน Cart [หมายเหต ถาเราสราง Servlet หลักสูตร ายๆไฟลักสูตร (เพัฒน)*อท4าหนาท*ต1างกน เช้ในการป1น AddCartServlet,RemoveCartServlet แลักสูตร ะ ListCartServlet โปรแกรม Stateful Session Bean จะสราง bean instanceส4าหรบ Servlet แต1ลักสูตร ะตวท4าใหใช้ในการป Session ท*ต1างกน]ขนตอนในการพัฒนฒนาโปรแกรม 1. พัฒนฒนา Stateful Session Bean 2. พัฒนฒนาโปรแกรม CartManager.java 3. พัฒนฒนาโปรแกรม CartList.java2.1 ก รพัฒนฒนำ โปรแกรม Stateful Session Bean แบบ/.กหด้วย Entนจะใช้ในการปโปรเจ0คเด้วย Entม (SessionBeanDemo) ท*สรางในแบบ/.กโปรแกรม Session Bean UsingEJB 3.0 ในการสราง Stateful Session Bean โด้วย Entยมขนตอนในการพัฒนฒนาโปรแกรมนได้วย Entด้วย Entงนการพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 22 1. คลักสูตร 7กขวาท* SessionBeanDemoEJB → New → Session Bean(EJB 3.x) 2. ก4าหนด้วย Ent Java package = ejb , Class Name = Cart แลักสูตร ะ State Type = Stateful รปที่ 2.1 การก!าห้ Web Pนดค%าของ Cart Stateful Session Bean 3. ท4าการ Add Business Method โด้วย Entยเร*มจากสราง Signature Method ใน Interface CartLocal แลักสูตร ะ CartRemote ด้วย Entงน Declare Method Signature 3 methods ท* Interface CartLocal , CartRemote Method Name ช้ในการป)*อ putItem Input Parameter 1 = itemId เป0น String Input Parameter 2 = quantity เป0น int Method Name ช้ในการป)*อ removeItem Input Parameter = itemId เป0น String Method Name ช้ในการป)*อ getItems Return Type : Hashtableการพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 23 4. จะได้วย Ent Business Method อย1ใน Interface ทงสอง (local,remote) 3 Methods ค)อ void putItem(String itemId , int quantity); void removeItem(String itemId); Hashtable getItems(); Implement source code ตาม Listing 2.1 แลักสูตร ะ 2.2Listing 2.1 โปรแกรม CartLocal.java package ejb; import java.util.Hashtable; import javax.ejb.Local; @Local public interface CartLocal { void putItem(String itemId, int quantity); void removeItem(String itemId); Hashtable getItems(); }Listing 2.2 โปรแกรม CartRemote.java package ejb; import java.util.Hashtable; import javax.ejb.Remote; @Remote public interface CartRemote { void putItem(String itemId, int quantity); void removeItem(String itemId); Hashtable getItems(); }การพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 24 จากนน Fix Error ของ Class Cart.java โด้วย Entย Implement source code ตาม Listing 2.3 ด้วย Entงน 5.Listing 2.3 โปรแกรม Cart.java package ejb; import java.util.Hashtable; import javax.annotation.PostConstruct; import javax.ejb.Stateful; @Stateful public class Cart implements CartRemote, CartLocal { Hashtable<String, Integer> cart; @PostConstruct public void initialize(){ cart = new Hashtable<String, Integer>(); } @Override public void putItem(String itemId, int quantity) { cart.put(itemId, quantity); } @Override public void removeItem(String itemId) { cart.remove(itemId); } @Override public Hashtable getItems() { return cart; } }2.2 ก รพัฒนฒนำ โปรแกรม CartManager.java โปรแกรม CartManager.java เป0นโปรแกรม Java Servlet เพัฒน)*อเรยกใช้ในการป Business Method ของ CartBean ในการเพัฒน*มรายการลักสูตร งใน Cart โด้วย Entยก4าหนด้วย Entให,ใช้ในการปส1 งพัฒนารามเตอร(มายงโปรแกรมด้วย Entงน ● itemId ค)อหมายเลักสูตร ขของรายการสนคา ● quantity ค)อจ4านวนของรายการสนคา ● method ถามค1าเป0น add ค)อเพัฒนมรายการ แลักสูตร ะถามค1าเป0น remove ค)อลักสูตร บรายการ * ช้ในการปด้วย Entค4าสงต1างๆ ภายใน CartManager อธบายได้วย Entด้วย Entงน * 1. ประกาศตวแปร cart เป0นช้ในการปนด้วย Ent CartLocal โด้วย Entยใช้ในการป annotation ท*ช้ในการป)*อ @EJB ด้วย Entงน @EJB private CartLocal cart;การพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 25 2. ค4าสงอ1านค1าพัฒนารามเตอร(ต1างๆ * โด้วย Entยก4าหนด้วย Entใหมพัฒนารามเตอร(ส1ง,1านมาจาก request ค)อ action, item แลักสูตร ะ quantity โด้วย Entยมค4าสงด้วย Entงน * String action = request.getParameter("action"); String item = request.getParameter("item"); String quantity = request.getParameter("quantity"); cart.putItem(item, Integer.parseInt(quantity)); 3. ค4าสงการเรยก Enterprise Bean ตาม action ท*ต1างกนด้วย Entงน * if (action.equals("add")) { cart.putItem(item, Integer.parseInt(quantity)); } else if (action.equals("remove")) { cart.removeItem(item); } else if (action.equals("list")) { Hashtable items = cart.getItems(); ……… } ขนตอนการพัฒนฒนา Class CartManager 1. เลักสูตร )อกหนาต1าง Projects แลักสูตร วคลักสูตร 7กขวาท*โหนด้วย Ent SessionBeanDemoWeb จากนนเลักสูตร )อกค4าสง New → Servlet * ก4าหนด้วย Ent Package = controller , Class Name = CartManager 2. ในหนาต1าง Editor ใหเพัฒน*ม Source code ในการเรยก EJB ด้วย Entงน ประกาศ instant variable เป0นช้ในการปนด้วย Ent CartLocal เพัฒนราะเราจะส)*อสารกบ EJB ,1าน Interface CartLocal @EJB private CartLocal cart; 3. Implement source code ของ Method processRequest( ) ด้วย EntงนListing 2.4 โปรแกรม CartManager.javapackage controller;import java.io.IOException;import java.io.PrintWriter;import java.util.Enumeration;import java.util.Hashtable;import javax.ejb.EJB;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import ejb.CartLocal;public class CartManager extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); }การพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 26 @EJB privateCartLocal cart; protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("TIS-620"); response.setContentType("TIS-620"); PrintWriter out = response.getWriter(); String action = request.getParameter("action"); String item = request.getParameter("item"); String quantity = request.getParameter("quantity"); out.println("<html><body><h1>Cart Manager</h1>"); if (action.equals("add")) { cart.putItem(item, Integer.parseInt(quantity)); } else if (action.equals("remove")) { cart.removeItem(item); } else if (action.equals("list")) { Hashtable items = cart.getItems(); Enumeration itemNames = items.keys(); while (itemNames.hasMoreElements()) { String itemId = (String) itemNames.nextElement(); out.println("Item id: " + itemId + " Quantity : " + items.get(itemId)); out.println("<BR>"); } } out.println("</body></html>"); }}2.3 ก รทดสอบโปรแกรม 1. ท4าการ Publish เพัฒน)*อใหทก Project ท4าการ Synchronized กน รปที่ 2.2 การ Publish เพัฒนาโปร#อ Synchronized Project ใน Enterprise Application 2. ท4าการใส1 รายการโด้วย Entยเลักสูตร )อก URL ของ Web Browser เป0น http://localhost:8080/SessionBeanDemoWeb/CartManager?action=add&item=125&quantity=3 ท4าการใส1 รายการเพัฒน*มเตมโด้วย Entยเลักสูตร )อก URL ของ Web Browser เป0น http://localhost:8080/SessionBeanDemoWeb/CartManager?action=add&item=123&quantity=2 3. แสด้วย Entงรายการใน Cart โด้วย Entยเลักสูตร )อก URL เป0น http://localhost:8080/SessionBeanDemoWeb/CartManager?action=list 4. ทด้วย Entลักสูตร องลักสูตร บรายการโด้วย Entยเลักสูตร )อก URL ของ Web Browser เป0น http://localhost:8080/SessionBeanDemoWeb/CartManager?action=remove&item=123 5. แสด้วย Entงรายการใน Cart ใหม1โด้วย Entยเลักสูตร )อก URL เป0น http://localhost:8080/SessionBeanDemoWeb/CartManager?action=listการพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 27 Exercise 3 Entity Class (JPA) แบบ/.กหด้วย Entในบทนเป0นการพัฒนฒนาโปรแกรม Enterprise Java Bean (EJB) โด้วย Entยจะเป0นการพัฒนฒนาโปรแกรมตด้วย Entต1อกบฐานขอมลักสูตร MySQL โด้วย Entยใช้ในการป EJB3.0 บน JBoss Application Server จะประกอบด้วย EntวยEntity Class ท*เช้ในการป)*อมโยงกบตารางท*ช้ในการป)*อ books แลักสูตร ะ Session Bean เพัฒน)*อใช้ในการปในการจด้วย Entการเพัฒน*ม แกไข แลักสูตร ะลักสูตร บขอมลักสูตร ใน table books ได้วย Entขนตอนในการพัฒนาโปรฒนาโปรแกรม 1. สราง Enterprise Application Project 2. พัฒนฒนา Entity Class 3. พัฒนฒนา Session Bean 4. พัฒนฒนา Web Application3.1 ก รสร ง Enterprise Application Project สราง Enterprise Application Project โด้วย Entยม EJB Module แลักสูตร ะ Web Module อย1ภายใน Project 1. เลักสูตร )อกเมน File → New → Enterprise Application Project ก4าหนด้วย Ent Project Name = BookApp 2. สราง Module ใหม1 รปที่ 3.1 สราง Module EJB แล็อกการสะ Web ใน Enterprise Applicationการพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 283.2 ก ร Config ให้ Proje Project ใช้งาน JPง นำ JPA เพัฒนอเช้งาน JPอมติดต่อกัอกบ Database ได Java EE 5 จะใช้ในการปคลักสูตร าสประเภท Entity เพัฒน)*อเป0นออปเจ0คท*สอด้วย Entคลักสูตร องกบตารางในฐานขอมลักสูตร ในท*นเราจะสราง Entity Class ท*ช้ในการป)*อ Books.java จากตารางท*ช้ในการป)*อ books ซึ่งมี E.*งมการสรางมาก1อนแลักสูตร ว โด้วย Entยมขนตอนการพัฒนฒนาโปรแกรมนมด้วย Entงน 1. Copy EclipseLink , MySQLConnection (.jar file) ไปท* %JBOSS_HOMEcommonlib 2. คลักสูตร กขวาท* BookAppEJB เลักสูตร )อก Build path → Configure Build path... 3. เลักสูตร )อก Project Facets → JPA ท4าการ Config ด้วย Entงรปการพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 29การพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 30 รปที่ 3.2 Configuration ส%วนของ EclipseLink ใน EJB Project 4. สราง JNDI DataSource ให JBoss (คลักสูตร ายกบการเพัฒน*ม file context.xml ใน Tomcat6) เปด้วย Ent Folder $JBOSS_HOMEdocsexamplesjca แลักสูตร ว copy file mysql-ds.xml ไปท* $JBOSS_HOMEserverdefaultdeploy 5. ท4าการ config file mysql-ds.xml ด้วย Entงรป รปที่ 3.3 Config JNDI Context ให้ Web P JBossการพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 31 6. Config persistence.xml ใน BookAppEJB เพัฒน)*อให JPA ใช้ในการป Database ท*ระบ รปที่ 3.4 Config persistence.xml 7. ท4าการเพัฒน*ม JVM Arguments -Djava.endorsed.dirs=$JBOSS_HOME/lib/endorsed รปที่ 3.5 Config persistence.xml 8. Add (Deploy) BookApp ลักสูตร ง JBoss แลักสูตร ะท4าการ Start JBoss Application Server Monitor ด้วย Ent log ท* Console ตองไม1พัฒนบ ERRORการพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 323.3 ก รพัฒนฒนำ โปรแกรม Entity Class สราง Entity Classes โด้วย Entย คลักสูตร กขวาท* BookAppEJB → New → Entities from Tables รปที่ 3.6 แสดงการสราง Entity Class จะได้วย Ent Entity Class ช้ในการป)*อ Books.java ท*ม Getter/Setter ของทก Field ใน table books เพัฒน*มส1 วนของ statement การ Query ขอมลักสูตร ไปท*บรรทด้วย Entด้วย Entานลักสูตร 1างของ @Table(name = "books") ด้วย Entงน @NamedQuery (name = "Books.findByIsbn", query = "SELECT b FROM Books b WHERE b.isbn = :isbn")การพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 33Listing 3.1 โปรแกรม Books.javapackage entity;import java.io.Serializable;import javax.persistence.*;@Entity@Table(name="books")@NamedQuery (name = "Books.findByIsbn", query = "SELECT b FROM Books b WHERE b.isbn = :isbn")public class Books implements Serializable { private static final long serialVersionUID = 1L; @Id @Column(name="ISBN") private String isbn; @Column(name="AUTHOR") private String author; @Column(name="PRICE") private float price; @Column(name="TITLE") private String title; public String getIsbn() { return this.isbn; } public void setIsbn(String isbn) { this.isbn = isbn; } public String getAuthor() { return this.author; } public void setAuthor(String author) { this.author = author; } public float getPrice() { return this.price; } public void setPrice(float price) { this.price = price; } public String getTitle() { return this.title; } public void setTitle(String title) { this.title = title; }}การพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 343.4 ก รพัฒนฒนำ โปรแกรม Session Bean โปรแกรม EJB จะใช้ในการป Session Bean ในการตด้วย Entต1อกบโปรแกรมอ)*นๆ ภายนอก EJB Container โด้วย Entยโปรแกรมเหลักสูตร 1านนจะตด้วย Entต1อกบ Entity Class โด้วย Entย,1าน Session Bean แบบ/.กหด้วย Entนจะสราง Session Bean ท*ช้ในการป)*อBooksFacade.java ท*ม Business method ในการ เรยกด้วย Entขอมลักสูตร ของตารางท*ช้ในการป)*อ books โด้วย Entยใช้ในการป Entity Class ช้ในการป)*อBooks.java แลักสูตร ะ EntityManager โด้วย Entยจะมขนตอนการพัฒนฒนาด้วย Entงน 1. คลักสูตร กขวาท*โหนด้วย Ent BookAppEJB เลักสูตร )อก New → SessionBean (EJB 3.x) รปที่ 3.7 แสดงการสราง Session Bean 2. ก4าหนด้วย Ent Package = sb Class name = BookFacade eclipse จะสราง Interface BookFacadeLocal.java ให 3. เพัฒนม Signature method ท* interface ของการคนหาหนงส)อ แลักสูตร ะ รบช้ในการป)*อ String isbn เพัฒน)*อไปประมวลักสูตร ,ลักสูตร * Books find(String isbn);การพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 35Listing 3.2 โปรแกรม BookLocal.javapackage sb;import javax.ejb.Local;import entity.Books;@Localpublic interface BookFacadeLocal { Books find(String isbn);} 4. Fix Error ท* class BookFacade.java implements concrete class โด้วย Entยระบช้ในการป)*อ JPA ท*ใช้ในการปค)อ BookAppEJB แลักสูตร วใช้ในการปงานโด้วย Entยส1 ง Books.class (Books Entity Class) ไปให entity manager → em.find(Books.class, id);Listing 3.3 โปรแกรม BookFacade.javapackage sb;import javax.ejb.Stateless;import javax.persistence.EntityManager;import javax.persistence.PersistenceContext;import entity.Books;@Statelesspublic class BookFacade implements BookFacadeLocal { @PersistenceContext(unitName = "BookAppEJB") private EntityManager em; @Override public Books find(String isbn) { return em.find(Books.class, isbn); }}3.5 ก รพัฒนฒนำ โปรแกรม Web Application โปรแกรม EJB จะเป0นส1 วนของ Business Logic เท1านน การพัฒนฒนาส1 วนของ Presentation จะตองใช้ในการปโปรแกรม Web Application (หร)อ Java SE) แบบ/.กหด้วย Entนจะพัฒนฒนาโปรแกรม Web Application เพัฒน)*อให,ใช้ในการปปอน isbn ของหนงส)อในหนาเว0บ findBook.html แลักสูตร วโปรแกรมจะเรยกโปรแกรม Servlet ท*ช้ในการป)*อShowBook.java เพัฒน)*อแสด้วย Entงรายลักสูตร ะเอยด้วย Entของหนงส)อด้วย Entงกลักสูตร 1าวออกมา โด้วย Entยมขนตอนการพัฒนฒนาด้วย Entงนการพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 363.5.1 การพัฒนฒนาโปรแกรม findBook.html โปรแกรม findBook.html เป0นเว0บเพัฒนจท*ใช้ในการปแสด้วย Entงฟอร(มส4าหรบให,ใช้ในการปปอน isbn ของหนงส)อโด้วย Entยมขนตอนการพัฒนฒนาด้วย Entงน 1. คลักสูตร กขวาท*โหนด้วย Ent BookAppWeb เลักสูตร )อกค4าสง New → HTML * 2. ก4าหนด้วย Ent HTML File Name: เป0น findBook แลักสูตร วกด้วย Ent Finish 3. เขยน source code ของไฟลักสูตร ( findBook.html ตาม Listing ท* 3.4Listing 3.4 โปรแกรม findBook.html<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body> <form action="ShowBook" method="POST"> <h2>Search Book from ISBN</h2> Enter ISBN <input type="text" name="isbn" /> <input type="submit" value="Find" /> </form></body></html>3.5.2 การพัฒนฒนาโปรแกรม ShowBook.java โปรแกรม ShowBook.java เป0นโปรแกรม Java Servlet ท*จะอ1านหมายเลักสูตร ข ISBN ท*,ใช้ในการปปอนมาจากหนา findBook.html แลักสูตร ะจะเรยกเมธอด้วย Ent find() ของ session bean ท*ช้ในการป)*อ BooksFacade เพัฒน)*อแสด้วย Entงรายลักสูตร ะเอยด้วย Entของหนงส)อ โด้วย Entยมขนตอนการพัฒนฒนาโปรแกรมด้วย Entงน 1. คลักสูตร กขวาท*โหนด้วย Ent BookAppWeb เลักสูตร )อก New → Servlet Package = servlets File Name = ShowBook 2. เพัฒนม source code ในการเรยก EJB (ประกาศเป0น Instance Varible) * @EJB private BooksFacadeLocal booksFacade; Eclipse จะแจง Error เพัฒนราะ Web ไม1เห0น EJB Projectการพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 37 ใหท4าการเพัฒนม Build path ใหม Library ของ EJB Project โด้วย Entยเลักสูตร )อกท* Fix Project Setup * แลักสูตร ะ set Build path ใหด้วย Entงรป รปที่ 3.8 แสดงการ Fix Project Setupการพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 38 ใหปรบปรง Source code ในเมธอด้วย Ent processRequest ด้วย Entง Listing ด้วย Entานลักสูตร 1าง 3.Listing 3.5 โปรแกรม ShowBook.javapackage servlets;import java.io.IOException;import java.io.PrintWriter;import javax.ejb.EJB;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import sb.BookFacadeLocal;import entity.Books;public class ShowBook extends HttpServlet { private static final long serialVersionUID = 1L; @EJB private BookFacadeLocal bookFacade; public ShowBook() { super(); } protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } protected void processRequest(HttpServletRequest request,HttpServletResponseresponse) throws ServletException, IOException { request.setCharacterEncoding("TIS-620"); response.setContentType("TIS-620"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>Servlet ShowBook</title>"); out.println("</head>"); out.println("<body>"); String isbn = request.getParameter("isbn"); Books book = bookFacade.find(isbn); out.println("Title: " + book.getTitle() + "<BR>"); out.println("Author: " + book.getAuthor() + "<BR>"); out.println("Price: " + book.getPrice() + "<BR>"); out.println("</body>"); out.println("</html>"); out.close(); }}การพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 393.6 ก รทดสอบโปรแกรม 1. Re-Publish JBoss Server 2. เรยก http://localhost:8080/BookAppWeb/findBook.html 3. กรอก isbn ท*มใน table books แลักสูตร วกด้วย Ent Find หนาจอก0จะแสด้วย Entงรายลักสูตร ะเอยด้วย Entของหนงส)อออกมาการพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 40 Exercise 4 ก รพัฒนฒนำ JSP เพัฒนอเรยกใช้งาน JP EJB 3.0เน#อห้ Web Pาที่ ตองศึกษาก่อ-กษาก%อน Entity Class แบบ/.กหด้วย Entนเป0นการพัฒนฒนาโปรแกรม JSP เพัฒน)*อเรยกใช้ในการป Entity Class ท*ช้ในการป)*อ Books แลักสูตร ะ Session Bean ท*ช้ในการป)*อ BooksFacade ซึ่งมี E.*งพัฒนฒนามาจากแบบ/.กหด้วย Entเร)*อง Entity Class แลักสูตร วจะเรยกใช้ในการป Stateful Session Bean ท*ช้ในการป)*อCart แลักสูตร ะโปรแกรม Servlet ท*ช้ในการป)*อ CartManager.java ท*พัฒนฒนามาจากแบบ/.กหด้วย Entเร)*อง Stateful Session Bean 1Using EJB 3.0 เพัฒน)*อใส1 รายช้ในการปอหนงส)อลักสูตร งใน Cart แลักสูตร ะเพัฒน)*อแสด้วย Entงรายการท*อย1ใน Cart โด้วย Entยใช้ในการป Project ท*,านมา )*ช้ในการป)*อ SessionBeanDemoWeb โปรแกรม showBook.jsp เป0นโปรแกรม JSP ท*จะเรยกใช้ในการป Custom Tag ท*ช้ในการป)*อ <EJBTags:GetBooks>ซึ่งมี E.*งจะเป0น Tag ท*เรยกใช้ในการป เมธอด้วย Ent findAll() ของ BooksFacade Session Bean แลักสูตร วเก0บ List ของหนงส)อทงหมด้วย Entไวใน session โปรแกรม showBook.jsp ก0จะแสด้วย Entงรายช้ในการป)*อหนงส)อทงหมด้วย Entมาให,ใช้ในการปเลักสูตร )อกลักสูตร งใน Cart โปรแกรมนตองพัฒนฒนาไฟลักสูตร (ต1างๆ ค)อ ● Tag Library Descriptor ● Tag Handler ● JSP File โด้วย Entยมขนตอนการพัฒนฒนาด้วย Entงน4.1.1 สราง Tag Library Descriptor ไฟลักสูตร (นจะใช้ในการปเก0บ รายช้ในการปอ Tag ต1างๆท*มอย1เพัฒน)*อสามารถน4า tag ต1างๆ มาใช้ในการปในโปรแกรม JSP โด้วย Entยใช้ในการปค4าสง )* *<%@taglib ...%> การสราง Tag Library Descriptor จะมขนตอนด้วย Entงน 1. คลักสูตร กขวาท*โหนด้วย Ent BookAppWeb 2. สรางโฟลักสูตร เด้วย Entอร( Web PagesWEB-INFtlds 3. สรางไฟลักสูตร (ท*ช้ในการป)*อ EJBTags.tld แลักสูตร ะ implements ด้วย Entงนการพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 41Listing 4.1 โปรแกรม EJBTags.tld<?xml version="1.0" encoding="UTF-8"?><taglib xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" id="WebApp_ID"version="2.1"> <tlib-version>1.2</tlib-version> <short-name>EJBTags</short-name> <uri>/WEB-INF/tlds/EJBTags</uri> <tag> <name>GetBooks</name> <tag-class>tags.GetBooks</tag-class> <body-content>scriptless</body-content> </tag></taglib>4.1.2 สรางไฟลักสูตร ( Tag Handler 1 ไฟลักสูตร ( Tag Handler จะเป0นโปรแกรมจาวาท*พัฒนฒนาข.นเพัฒน)*อระบวา เม)*อเรยกใช้ในการป tag แลักสูตร วจะตองท4าค4าสง *อย1างไร ในท*นจะก4าหนด้วย Entช้ในการป)*อ Tag เป0น GetBook โด้วย Entยมขนตอนการพัฒนฒนาด้วย Entงน 1. คลักสูตร 7กขวาท* Project BookAppWeb จากนนเลักสูตร )อกค4าสง New → Class * ก4าหนด้วย Ent Package = tags , Class Name = GetBooks เลักสูตร )อก SuperClass = SimpleTagSupport 2. ท4าการ Implement Method ช้ในการป)*อ doTag( ) : Call Enterprise Bean โด้วย Entยใช้ในการป annotation @EJB @EJB private BooksFacadeLocal booksFacade; ใหเพัฒนม Signature Method => List<Books> findAll(); ท* interface BookFacadeLocal 3. *Listing 4.2 โปรแกรม BooksFacadeLocal.java package sb; import java.util.List; import entity.Books; @Local public interface BookFacadeLocal { Books find(String isbn); List<Books> findAll(); } 4. Fix Error โด้วย Entยการ Implements BooksFacade.java ด้วย Entงน public List<Books> findAll() { CriteriaQuery cq = em.getCriteriaBuilder().createQuery(); cq.select(cq.from(Books.class)); return em.createQuery(cq).getResultList(); }การพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 42 5. แกไข Books.java โด้วย Entยลักสูตร บของเด้วย Entมออกแลักสูตร วใส1 ช้ในการปด้วย Ent Query statement ลักสูตร งไป@NamedQueries({@NamedQuery(name = "Books.findAll", query = "SELECT b FROM Books b"),@NamedQuery(name = "Books.findByIsbn", query = "SELECT b FROM Books b WHEREb.isbn = :isbn")})Listing 4.3 โปรแกรม Books.javapackage entity;import java.io.Serializable;import javax.persistence.*;@Entity@Table(name = "books")@NamedQueries({@NamedQuery(name ="Books.findAll",query="SELECT b FROM Books b"),@NamedQuery(name ="Books.findByIsbn",query="SELECT b FROM Books b WHERE b.isbn = :isbn")})public class Books implements Serializable { private static final long serialVersionUID = 1L; @Id @Column(name = "ISBN") private String isbn; @Column(name = "AUTHOR") private String author; @Column(name = "PRICE") private float price; @Column(name = "TITLE") private String title; public String getIsbn() { return this.isbn; } public void setIsbn(String isbn) { this.isbn = isbn; } public String getAuthor() { return this.author; } public void setAuthor(String author) { this.author = author; } public float getPrice() { return this.price; } public void setPrice(float price) { this.price = price; } public String getTitle() { return this.title; } public void setTitle(String title) { this.title = title; }}การพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 43 6. Implement source code ใน class GetBooks.java ท*เมธอด้วย Ent doTag() ด้วย Entงน public void doTag() throws JspException { JspWriter out = getJspContext().getOut(); try{ JspFragment f = getJspBody(); if (f != null)f.invoke(out); List<Books> books = bookFacade.findAll(); getJspContext().setAttribute("books",books,PageContext.SESSION_SCOPE); } catch (IOException ex) { throw new JspException(ex.getMessage()); } }Listing 4.4 โปรแกรม GetBooks.javapackage tags;import java.io.IOException;import java.util.List;import javax.ejb.EJB;import javax.servlet.jsp.JspException;import javax.servlet.jsp.JspWriter;import javax.servlet.jsp.PageContext;import javax.servlet.jsp.tagext.JspFragment;import javax.servlet.jsp.tagext.SimpleTagSupport;import entity.Books;import sb.BookFacadeLocal;public class GetBooks extends SimpleTagSupport { @EJB private BookFacadeLocal bookFacade; @Override public void doTag() throws JspException { JspWriter out = getJspContext().getOut(); try { JspFragment f = getJspBody(); if (f != null)f.invoke(out); List<Books> books = bookFacade.findAll(); getJspContext().setAttribute("books", books,PageContext.SESSION_SCOPE); } catch (IOException ex) { throw new JspException(ex.getMessage()); } }}การพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 444.1.3 เขยนโปรแกรม showBook.jsp 1. คลักสูตร กขวาท* BookAppWeb จากนนเลักสูตร )อกค4าสง New → JSP* ก4าหนด้วย Ent JSP File Name: เป0น showBook 2. ในหนาต1าง editor ใหแกไข source code ของไฟลักสูตร ( showBook.jsp ใหเป0นไปตาม Listing ท* 4.5 โปรแกรมนจะให,ลักสูตร ลักสูตร พัฒนธ(ด้วย Entงตวอย1างในรปท* 4.1 รปที่ 4.1 ผล็อกการสล็อกการสพัฒนาโปรธ์โปรแกรโปรแกรม showBook.jspการพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 45Listing 4.5 โปรแกรม showBook.jsp<%@page contentType="text/html"%><%@page pageEncoding="UTF-8"%><%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><%@taglib uri="/WEB-INF/tlds/EJBTags" prefix="EJB" %><html><body> <EJB:GetBooks/> <h1>Please Select Books</h1> <form action="http://localhost:8080/SessionBeanDemoWeb/CartManager" > <input type="HIDDEN" name="action" value="add" /> <table border="1"> <thead> <tr> <th></th> <th> Title </th> <th> Author </th> <th> Price </th> <th> Quantity </th> </tr> </thead> <tbody> <c:forEach var="book" items="${sessionScope.books}"> <tr> <td><input type="checkbox" name="item" value="${book.isbn}" /></td> <td>${book.title}</td><td>${book.author}</td> <td>${book.price}</td> <td><input type="text" name="${book.isbn}" value="0" size="3" /> </td> </tr> </c:forEach> </tbody> </table> <p> <input type="submit" value="Add" /> </form> </body></html>4.2 ก รปรบปร" งโปรแกรม CartManager.java โปรแกรม CartManager.java เด้วย Entมจะก4าหนด้วย Entใหอ1านขอมลักสูตร การใส1 รายการสนคาลักสูตร ง Cart ท*ลักสูตร ะรายการเพัฒน)*อใหโปรแกรมสามารถอ1านขอมลักสูตร รายการสนคาท*จะเก0บอย1ในตวแปรอะเรย(ช้ในการปนด้วย Ent String ท*อาจมหลักสูตร ายรายการซึ่งมี E.*งถกเลักสูตร )อกมาจาก checkbox ท*อย1ในหนา showBook.jsp ได้วย Ent โด้วย Entยใหแกไข source code ในไฟลักสูตร (CartManager.java ส1 วน Business Logic ของการเพัฒน*มขอมลักสูตร ด้วย Entงน if (action.equals("add")) { cart.putItem(item, Integer.parseInt(quantity)); } เป0น if (action.equals("add")) { String[] items = request.getParameterValues("item"); for (int i = 0; i < items.length; i++) { String qty = request.getParameter(items[i]); cart.putItem(items[i], Integer.parseInt(qty)); } }การพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 46Listing 4.6 โปรแกรม CartManager.javapackage controller;import java.io.IOException;import java.io.PrintWriter;import java.util.Enumeration;import java.util.Hashtable;import javax.ejb.EJB;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import ejb.CartLocal;public class CartManager extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } @EJB CartLocal cart; protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("TIS-620"); response.setContentType("TIS-620"); String action = request.getParameter("action"); String item = request.getParameter("item"); String quantity = request.getParameter("quantity"); PrintWriter out = response.getWriter(); out.println("<html><body><h1>Cart Manager</h1>"); if (action.equals("add")) { String[] items = request.getParameterValues("item"); for (int i = 0; i < items.length; i++) { String qty = request.getParameter(items[i]); cart.putItem(items[i], Integer.parseInt(qty)); } } else if (action.equals("remove")) { cart.removeItem(item); } else if (action.equals("list")) { Hashtable items = cart.getItems(); Enumeration itemNames = items.keys(); while (itemNames.hasMoreElements()) { String itemId = (String) itemNames.nextElement(); out.println("Item id: " + itemId + " Quantity : " + items.get(itemId)); out.println("<BR>"); } } out.println("</body></html>"); }}การพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
    • 474.3 ก รทดสอบโปรแกรม 1. ท4าการ Build แลักสูตร ะ Deploy โปรเจ0ค SessionBeanDemo แลักสูตร ะ BookApp 2. เปด้วย Ent URL http://localhost:8080/BookAppWeb/showBook.jsp ใหเราทด้วย Entลักสูตร องเลักสูตร )อกแลักสูตร ะใส1 ขอมลักสูตร 3. เม)*อกด้วย Entป1ม Add โปรแกรมก0จะเก0บหนงส)อท*เลักสูตร )อกลักสูตร ง Cart 4. แสด้วย Entงรายการใน Cart โด้วย Entยเลักสูตร )อก URL เป0น http://localhost:8080/SessionBeanDemoWeb/CartManager?action=listการพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan