SlideShare a Scribd company logo
1 of 47
Download to read offline
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 Mongkut's 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 Java
Technology คณะเทคโนโลักสูตร ยสารสนเทศ สถาบนพัฒนระจอมเกลักสูตร าเจาค'ณทหารลักสูตร าด้วย 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................................................................................4
Exercise 2 Stateful Session Bean Using EJB 3.0...............................................................................21
Exercise 3 Entity Class (JPA).............................................................................................................26
Exercise 4 การพัฒนาJSPฒนา JSP เพัฒนาJSPอเรยกใช้  EJB  EJB 3.0.....................................................................................36
Exercise 5 JPA : Entity Relationships................................................................................................41
Exercise 6 JPA: Inheritance................................................................................................................60
Exercise 7 Message Driven Bean.......................................................................................................70
Exercise 8 EJB Security.....................................................................................................................75
Exercise 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 สราง Session
Bean แลักสูตร ะแสด้วย 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 Application

1.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
6


1.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
8

Listing 1.1 ประกาศ Signature Method ท* Interface ทง Local แลักสูตร ะ Remote
--- File Local--------------------------------------------------------------
@Local
public interface BLSessionLocal {
      public String sayHi(String name);
      public double currencyConvert(String currency,double amt);
}

--- File Remote-------------------------------------------------------------
@Remote
public 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
9

1.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(htmlbody);
                    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
11

1.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
12


1.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
13


1.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 Server

1.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{
          HashtableString, String env = new HashtableString, 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
15


1.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{
                 HashtableString, String env = new HashtableString, 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
19

Source Code ท* Jigloo สรางข.นมา แลักสูตร ะท*เราปรบปร'งทงหมด้วย Ent
package 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 CloudGarden's 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{
                      HashtableString, String env = new HashtableString, 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.java

2.1       ก รพัฒนฒนำ โปรแกรม Stateful Session Bean

       แบบ/.กหด้วย Entนจะใช้ในการปโปรเจ0คเด้วย Entม (SessionBeanDemo) ท*สรางในแบบ/.กโปรแกรม Session Bean Using
EJB 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.2

Listing 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 {
                    HashtableString, Integer cart;

                            @PostConstruct
                            public void initialize(){
                                  cart = new HashtableString, 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 ของ Cart
Bean ในการเพัฒน*มรายการลักสูตร งใน 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.java
package 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(htmlbodyh1Cart 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=additem=125quantity=3
             ท4าการใส1 รายการเพัฒน*มเตมโด้วย Entยเลักสูตร )อก URL ของ Web Browser เป0น
       http://localhost:8080/SessionBeanDemoWeb/CartManager?action=additem=123quantity=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=removeitem=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 Application


3.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
28

3.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
32

3.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
33

Listing 3.1 โปรแกรม Books.java
package 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
34

3.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
35

Listing 3.2 โปรแกรม BookLocal.java
package sb;
import javax.ejb.Local;

import entity.Books;

@Local
public 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.java
package sb;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import entity.Books;

@Stateless
public 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
36

3.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.4

Listing 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
titleInsert title here/title
/head
body
      form action=ShowBook method=POST
          h2Search 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.java

package 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,HttpServletResponse
response) throws ServletException, IOException {

                            request.setCharacterEncoding(TIS-620);
                            response.setContentType(TIS-620);

                            PrintWriter out = response.getWriter();

                            out.println(html);
                            out.println(head);
                            out.println(titleServlet 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
39

3.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
                                                                                                                                            1
Using 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
41


Listing 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/javaee
http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd id=WebApp_ID
version=2.1
      tlib-version1.2/tlib-version
      short-nameEJBTags/short-name
      uri/WEB-INF/tlds/EJBTags/uri
      tag
            nameGetBooks/name
            tag-classtags.GetBooks/tag-class
            body-contentscriptless/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 = ListBooks 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);
                    ListBooks findAll();
              }

       4. Fix Error โด้วย Entยการ Implements BooksFacade.java ด้วย Entงน
                            public ListBooks 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 WHERE
b.isbn = :isbn)
})
Listing 4.3 โปรแกรม Books.java
package 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);
                            ListBooks books = bookFacade.findAll();
                            getJspContext().setAttribute(books,books,PageContext.SESSION_SCOPE);
                                           } catch (IOException ex) {
                                                  throw new JspException(ex.getMessage());
                                       }
              }
Listing 4.4 โปรแกรม GetBooks.java

package 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);
                                  ListBooks 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
44

4.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
45

Listing 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 %
htmlbody
       EJB:GetBooks/
        h1Please 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
                      tdinput type=checkbox name=item value=${book.isbn} //td
                      td${book.title}/tdtd${book.author}/td
                      td${book.price}/td
                      tdinput 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
EJB Programming Using Eclipse & JBoss
EJB Programming Using Eclipse & JBoss

More Related Content

Similar to EJB Programming Using Eclipse & JBoss

Java EE Programming [EJB 3.0 and JPA] Using Eclipse and JBoss
Java EE Programming [EJB 3.0 and JPA] Using  Eclipse and JBossJava EE Programming [EJB 3.0 and JPA] Using  Eclipse and JBoss
Java EE Programming [EJB 3.0 and JPA] Using Eclipse and JBossIMC Institute
 
Eclipse
EclipseEclipse
Eclipsegzxc
 
Java Web Services and SOA Using GlassFish openESB and NetBeans
Java Web Services and SOA Using GlassFish openESB and NetBeansJava Web Services and SOA Using GlassFish openESB and NetBeans
Java Web Services and SOA Using GlassFish openESB and NetBeansSoftware Park Thailand
 
Hand on Exercises Java Web Services and SOA using GlassFish ESB and NetBeans
Hand on Exercises Java Web Services and SOA using GlassFish ESB and NetBeansHand on Exercises Java Web Services and SOA using GlassFish ESB and NetBeans
Hand on Exercises Java Web Services and SOA using GlassFish ESB and NetBeansIMC Institute
 
Java Web Programming (JSP/Servlet) Using Eclipse and Tomcat
Java Web Programming (JSP/Servlet) Using  Eclipse and TomcatJava Web Programming (JSP/Servlet) Using  Eclipse and Tomcat
Java Web Programming (JSP/Servlet) Using Eclipse and TomcatIMC Institute
 
โครงงานคอมพิวเตอร์ เผยแพร่ความรู้ออนไลน์2
โครงงานคอมพิวเตอร์ เผยแพร่ความรู้ออนไลน์2โครงงานคอมพิวเตอร์ เผยแพร่ความรู้ออนไลน์2
โครงงานคอมพิวเตอร์ เผยแพร่ความรู้ออนไลน์2fulk123
 
โจทย์ปัญหา Pbl 3
โจทย์ปัญหา Pbl 3โจทย์ปัญหา Pbl 3
โจทย์ปัญหา Pbl 3siriyaporn20099
 
โจทย์ปัญหา Pbl 3
โจทย์ปัญหา Pbl 3โจทย์ปัญหา Pbl 3
โจทย์ปัญหา Pbl 3siriyaporn20099
 
โจทย์ปัญหา Pbl3
โจทย์ปัญหา Pbl3โจทย์ปัญหา Pbl3
โจทย์ปัญหา Pbl3siriyaporn20099
 
โจทย์ปัญหา PBL 3 เรื่อง ขั้นตอนการพัฒนาโปรแกรม
โจทย์ปัญหา PBL 3 เรื่อง ขั้นตอนการพัฒนาโปรแกรม โจทย์ปัญหา PBL 3 เรื่อง ขั้นตอนการพัฒนาโปรแกรม
โจทย์ปัญหา PBL 3 เรื่อง ขั้นตอนการพัฒนาโปรแกรม nattapon Arsapanom
 

Similar to EJB Programming Using Eclipse & JBoss (20)

Java EE Programming [EJB 3.0 and JPA] Using Eclipse and JBoss
Java EE Programming [EJB 3.0 and JPA] Using  Eclipse and JBossJava EE Programming [EJB 3.0 and JPA] Using  Eclipse and JBoss
Java EE Programming [EJB 3.0 and JPA] Using Eclipse and JBoss
 
Eclipse
EclipseEclipse
Eclipse
 
Java Web Services and SOA Using GlassFish openESB and NetBeans
Java Web Services and SOA Using GlassFish openESB and NetBeansJava Web Services and SOA Using GlassFish openESB and NetBeans
Java Web Services and SOA Using GlassFish openESB and NetBeans
 
Hand on Exercises Java Web Services and SOA using GlassFish ESB and NetBeans
Hand on Exercises Java Web Services and SOA using GlassFish ESB and NetBeansHand on Exercises Java Web Services and SOA using GlassFish ESB and NetBeans
Hand on Exercises Java Web Services and SOA using GlassFish ESB and NetBeans
 
ใบความรู้ที่ 3.2
ใบความรู้ที่ 3.2ใบความรู้ที่ 3.2
ใบความรู้ที่ 3.2
 
webprogramming eclipse-jsp
webprogramming eclipse-jspwebprogramming eclipse-jsp
webprogramming eclipse-jsp
 
Java Web programming Using Eclipse
Java Web programming Using EclipseJava Web programming Using Eclipse
Java Web programming Using Eclipse
 
Java Web Programming (JSP/Servlet) Using Eclipse and Tomcat
Java Web Programming (JSP/Servlet) Using  Eclipse and TomcatJava Web Programming (JSP/Servlet) Using  Eclipse and Tomcat
Java Web Programming (JSP/Servlet) Using Eclipse and Tomcat
 
1236363
12363631236363
1236363
 
Ch17
Ch17Ch17
Ch17
 
โครงงานคอมพิวเตอร์ เผยแพร่ความรู้ออนไลน์2
โครงงานคอมพิวเตอร์ เผยแพร่ความรู้ออนไลน์2โครงงานคอมพิวเตอร์ เผยแพร่ความรู้ออนไลน์2
โครงงานคอมพิวเตอร์ เผยแพร่ความรู้ออนไลน์2
 
โจทย์ปัญหา Pbl 3
โจทย์ปัญหา Pbl 3โจทย์ปัญหา Pbl 3
โจทย์ปัญหา Pbl 3
 
โจทย์ปัญหา Pbl 3
โจทย์ปัญหา Pbl 3โจทย์ปัญหา Pbl 3
โจทย์ปัญหา Pbl 3
 
โจทย์ปัญหา Pbl3
โจทย์ปัญหา Pbl3โจทย์ปัญหา Pbl3
โจทย์ปัญหา Pbl3
 
ประวัติความเป็นมาภาษาซี
ประวัติความเป็นมาภาษาซีประวัติความเป็นมาภาษาซี
ประวัติความเป็นมาภาษาซี
 
Pbl 3
Pbl 3Pbl 3
Pbl 3
 
โจทย์ปัญหา PBL 3 เรื่อง ขั้นตอนการพัฒนาโปรแกรม
โจทย์ปัญหา PBL 3 เรื่อง ขั้นตอนการพัฒนาโปรแกรม โจทย์ปัญหา PBL 3 เรื่อง ขั้นตอนการพัฒนาโปรแกรม
โจทย์ปัญหา PBL 3 เรื่อง ขั้นตอนการพัฒนาโปรแกรม
 
Pbl 3
Pbl 3Pbl 3
Pbl 3
 
Java 7&12 6 2
Java 7&12 6 2Java 7&12 6 2
Java 7&12 6 2
 
Exe2[1]
Exe2[1]Exe2[1]
Exe2[1]
 

More from Software Park Thailand

Software Park Thailand Newsletter (Thai) Vol2/2556
Software Park Thailand Newsletter (Thai) Vol2/2556Software Park Thailand Newsletter (Thai) Vol2/2556
Software Park Thailand Newsletter (Thai) Vol2/2556Software Park Thailand
 
Software Park Newsletter Thai Vol 3/25561
Software Park Newsletter Thai Vol 3/25561Software Park Newsletter Thai Vol 3/25561
Software Park Newsletter Thai Vol 3/25561Software Park Thailand
 
Solfware park Newsletter Vol 3/2013 Eng Version
Solfware park Newsletter Vol 3/2013 Eng VersionSolfware park Newsletter Vol 3/2013 Eng Version
Solfware park Newsletter Vol 3/2013 Eng VersionSoftware Park Thailand
 
Software Park Thailand Newsletter Vol 3/2556
Software Park Thailand Newsletter Vol 3/2556Software Park Thailand Newsletter Vol 3/2556
Software Park Thailand Newsletter Vol 3/2556Software Park Thailand
 
Software Park Thailand Newsletter (Eng) Vol3/2012
Software Park Thailand Newsletter (Eng) Vol3/2012Software Park Thailand Newsletter (Eng) Vol3/2012
Software Park Thailand Newsletter (Eng) Vol3/2012Software Park Thailand
 
Software Park Thailand Newsletter (Eng) Vol5/2013
Software Park Thailand Newsletter (Eng) Vol5/2013Software Park Thailand Newsletter (Eng) Vol5/2013
Software Park Thailand Newsletter (Eng) Vol5/2013Software Park Thailand
 
Software Park Thailand Newsletter (Thai) Vol4/2555
Software Park Thailand Newsletter (Thai) Vol4/2555Software Park Thailand Newsletter (Thai) Vol4/2555
Software Park Thailand Newsletter (Thai) Vol4/2555Software Park Thailand
 
Thai ICT Trad Mission CommunicAsia 2013 (18-21 June 2013)
Thai ICT Trad Mission CommunicAsia 2013 (18-21 June 2013)Thai ICT Trad Mission CommunicAsia 2013 (18-21 June 2013)
Thai ICT Trad Mission CommunicAsia 2013 (18-21 June 2013)Software Park Thailand
 
Smart Industry Vo.22/2556"E-transaction กระตุ้นธุรกิจอีคอมเมิร์สโต"
Smart Industry Vo.22/2556"E-transaction กระตุ้นธุรกิจอีคอมเมิร์สโต"Smart Industry Vo.22/2556"E-transaction กระตุ้นธุรกิจอีคอมเมิร์สโต"
Smart Industry Vo.22/2556"E-transaction กระตุ้นธุรกิจอีคอมเมิร์สโต"Software Park Thailand
 
Software Park Newsletter 2/2554 "แท็บเล็ต สมาร์ทโพน โมบายแอพพลิเคชั่น ดาวเด่น...
Software Park Newsletter 2/2554 "แท็บเล็ต สมาร์ทโพน โมบายแอพพลิเคชั่น ดาวเด่น...Software Park Newsletter 2/2554 "แท็บเล็ต สมาร์ทโพน โมบายแอพพลิเคชั่น ดาวเด่น...
Software Park Newsletter 2/2554 "แท็บเล็ต สมาร์ทโพน โมบายแอพพลิเคชั่น ดาวเด่น...Software Park Thailand
 
Software Park Newsletter Vol. 4/2012 English Version
Software Park Newsletter Vol. 4/2012 English VersionSoftware Park Newsletter Vol. 4/2012 English Version
Software Park Newsletter Vol. 4/2012 English VersionSoftware Park Thailand
 
Thai IT Business Develop,emt Delegation to Tokyo, Japan, 2012
Thai IT Business Develop,emt Delegation to Tokyo, Japan, 2012Thai IT Business Develop,emt Delegation to Tokyo, Japan, 2012
Thai IT Business Develop,emt Delegation to Tokyo, Japan, 2012Software Park Thailand
 
Thai IT Trade Delegation to Tokyo, Japan 11-16 November 2012
Thai IT Trade Delegation to Tokyo, Japan 11-16 November 2012Thai IT Trade Delegation to Tokyo, Japan 11-16 November 2012
Thai IT Trade Delegation to Tokyo, Japan 11-16 November 2012Software Park Thailand
 
Thai IT Business Development Delegation to Tokyo, Japan: November 2012
Thai IT Business Development Delegation to Tokyo, Japan: November 2012 Thai IT Business Development Delegation to Tokyo, Japan: November 2012
Thai IT Business Development Delegation to Tokyo, Japan: November 2012 Software Park Thailand
 

More from Software Park Thailand (20)

Smart industry Vol.33/2561
Smart industry Vol.33/2561Smart industry Vol.33/2561
Smart industry Vol.33/2561
 
Softwarepark news Vol.7/2561
Softwarepark news Vol.7/2561Softwarepark news Vol.7/2561
Softwarepark news Vol.7/2561
 
Software Park Thailand Newsletter (Thai) Vol2/2556
Software Park Thailand Newsletter (Thai) Vol2/2556Software Park Thailand Newsletter (Thai) Vol2/2556
Software Park Thailand Newsletter (Thai) Vol2/2556
 
Software Park Newsletter Thai Vol 3/25561
Software Park Newsletter Thai Vol 3/25561Software Park Newsletter Thai Vol 3/25561
Software Park Newsletter Thai Vol 3/25561
 
Smart Industry Vol.23
Smart Industry Vol.23Smart Industry Vol.23
Smart Industry Vol.23
 
Solfware park Newsletter Vol 3/2013 Eng Version
Solfware park Newsletter Vol 3/2013 Eng VersionSolfware park Newsletter Vol 3/2013 Eng Version
Solfware park Newsletter Vol 3/2013 Eng Version
 
Software Park Thailand Newsletter Vol 3/2556
Software Park Thailand Newsletter Vol 3/2556Software Park Thailand Newsletter Vol 3/2556
Software Park Thailand Newsletter Vol 3/2556
 
Software Park Thailand Newsletter (Eng) Vol3/2012
Software Park Thailand Newsletter (Eng) Vol3/2012Software Park Thailand Newsletter (Eng) Vol3/2012
Software Park Thailand Newsletter (Eng) Vol3/2012
 
Software Park Thailand Newsletter (Eng) Vol5/2013
Software Park Thailand Newsletter (Eng) Vol5/2013Software Park Thailand Newsletter (Eng) Vol5/2013
Software Park Thailand Newsletter (Eng) Vol5/2013
 
Software Park Thailand Newsletter (Thai) Vol4/2555
Software Park Thailand Newsletter (Thai) Vol4/2555Software Park Thailand Newsletter (Thai) Vol4/2555
Software Park Thailand Newsletter (Thai) Vol4/2555
 
Thai ICT Trad Mission CommunicAsia 2013 (18-21 June 2013)
Thai ICT Trad Mission CommunicAsia 2013 (18-21 June 2013)Thai ICT Trad Mission CommunicAsia 2013 (18-21 June 2013)
Thai ICT Trad Mission CommunicAsia 2013 (18-21 June 2013)
 
Smart Industry Vo.22/2556"E-transaction กระตุ้นธุรกิจอีคอมเมิร์สโต"
Smart Industry Vo.22/2556"E-transaction กระตุ้นธุรกิจอีคอมเมิร์สโต"Smart Industry Vo.22/2556"E-transaction กระตุ้นธุรกิจอีคอมเมิร์สโต"
Smart Industry Vo.22/2556"E-transaction กระตุ้นธุรกิจอีคอมเมิร์สโต"
 
Software newsletter
Software newsletterSoftware newsletter
Software newsletter
 
Smart industry Vol. 21/2556
Smart industry Vol. 21/2556Smart industry Vol. 21/2556
Smart industry Vol. 21/2556
 
Software Park Newsletter 2/2554 "แท็บเล็ต สมาร์ทโพน โมบายแอพพลิเคชั่น ดาวเด่น...
Software Park Newsletter 2/2554 "แท็บเล็ต สมาร์ทโพน โมบายแอพพลิเคชั่น ดาวเด่น...Software Park Newsletter 2/2554 "แท็บเล็ต สมาร์ทโพน โมบายแอพพลิเคชั่น ดาวเด่น...
Software Park Newsletter 2/2554 "แท็บเล็ต สมาร์ทโพน โมบายแอพพลิเคชั่น ดาวเด่น...
 
Software Park Newsletter Vol. 4/2012 English Version
Software Park Newsletter Vol. 4/2012 English VersionSoftware Park Newsletter Vol. 4/2012 English Version
Software Park Newsletter Vol. 4/2012 English Version
 
Thai IT Delegation to Japan 2012
Thai IT Delegation to Japan 2012Thai IT Delegation to Japan 2012
Thai IT Delegation to Japan 2012
 
Thai IT Business Develop,emt Delegation to Tokyo, Japan, 2012
Thai IT Business Develop,emt Delegation to Tokyo, Japan, 2012Thai IT Business Develop,emt Delegation to Tokyo, Japan, 2012
Thai IT Business Develop,emt Delegation to Tokyo, Japan, 2012
 
Thai IT Trade Delegation to Tokyo, Japan 11-16 November 2012
Thai IT Trade Delegation to Tokyo, Japan 11-16 November 2012Thai IT Trade Delegation to Tokyo, Japan 11-16 November 2012
Thai IT Trade Delegation to Tokyo, Japan 11-16 November 2012
 
Thai IT Business Development Delegation to Tokyo, Japan: November 2012
Thai IT Business Development Delegation to Tokyo, Japan: November 2012 Thai IT Business Development Delegation to Tokyo, Japan: November 2012
Thai IT Business Development Delegation to Tokyo, Japan: November 2012
 

EJB Programming Using Eclipse & JBoss

  • 1. 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 Mongkut's Institute of Technology Ladkrabang June 2011 การพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
  • 2. 2 บทนำ เอกสารนใช้ในการปในการประกอบการสอนวช้ในการปา Java 301 : EJB 3.0 ของหลักสูตร กสตร Mini Master of Java Technology คณะเทคโนโลักสูตร ยสารสนเทศ สถาบนพัฒนระจอมเกลักสูตร าเจาค'ณทหารลักสูตร าด้วย 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. 3 สารบัญญ Exercise 1 Stateless Session Bean Using EJB 3.0................................................................................4 Exercise 2 Stateful Session Bean Using EJB 3.0...............................................................................21 Exercise 3 Entity Class (JPA).............................................................................................................26 Exercise 4 การพัฒนาJSPฒนา JSP เพัฒนาJSPอเรยกใช้ EJB EJB 3.0.....................................................................................36 Exercise 5 JPA : Entity Relationships................................................................................................41 Exercise 6 JPA: Inheritance................................................................................................................60 Exercise 7 Message Driven Bean.......................................................................................................70 Exercise 8 EJB Security.....................................................................................................................75 Exercise 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. 4 Exercise 1 Stateless Session Bean Using EJB 3.0 แบบ/.กหด้วย Entนเป0นการพัฒนฒนาโปรแกรม Enterprise Java Bean (EJB) โด้วย Entยใช้ในการป EJB 3.0 สราง Session Bean แลักสูตร ะแสด้วย 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 Application 1.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. 5 รปที่ 1.1 การสราง Enterprise Application Project การพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
  • 6. 6 1.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. 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
  • 8. 8 Listing 1.1 ประกาศ Signature Method ท* Interface ทง Local แลักสูตร ะ Remote --- File Local-------------------------------------------------------------- @Local public interface BLSessionLocal { public String sayHi(String name); public double currencyConvert(String currency,double amt); } --- File Remote------------------------------------------------------------- @Remote public 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
  • 9. 9 1.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. 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(htmlbody); 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
  • 11. 11 1.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
  • 12. 12 1.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
  • 13. 13 1.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 Server 1.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{ HashtableString, String env = new HashtableString, 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. 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
  • 15. 15 1.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. 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. 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. 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{ HashtableString, String env = new HashtableString, 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
  • 19. 19 Source Code ท* Jigloo สรางข.นมา แลักสูตร ะท*เราปรบปร'งทงหมด้วย Ent package 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 CloudGarden's 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. 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{ HashtableString, String env = new HashtableString, 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. 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.java 2.1 ก รพัฒนฒนำ โปรแกรม Stateful Session Bean แบบ/.กหด้วย Entนจะใช้ในการปโปรเจ0คเด้วย Entม (SessionBeanDemo) ท*สรางในแบบ/.กโปรแกรม Session Bean Using EJB 3.0 ในการสราง Stateful Session Bean โด้วย Entยมขนตอนในการพัฒนฒนาโปรแกรมนได้วย Entด้วย Entงน การพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
  • 22. 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. 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.2 Listing 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. 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 { HashtableString, Integer cart; @PostConstruct public void initialize(){ cart = new HashtableString, 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 ของ Cart Bean ในการเพัฒน*มรายการลักสูตร งใน 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. 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.java package 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. 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(htmlbodyh1Cart 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=additem=125quantity=3 ท4าการใส1 รายการเพัฒน*มเตมโด้วย Entยเลักสูตร )อก URL ของ Web Browser เป0น http://localhost:8080/SessionBeanDemoWeb/CartManager?action=additem=123quantity=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=removeitem=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. 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 Application 3.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
  • 28. 28 3.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. 29 การพัฒนฒนาโปรแกรมด้วย Entวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
  • 30. 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. 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
  • 32. 32 3.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
  • 33. 33 Listing 3.1 โปรแกรม Books.java package 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
  • 34. 34 3.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
  • 35. 35 Listing 3.2 โปรแกรม BookLocal.java package sb; import javax.ejb.Local; import entity.Books; @Local public 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.java package sb; import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import entity.Books; @Stateless public 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
  • 36. 36 3.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.4 Listing 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 titleInsert title here/title /head body form action=ShowBook method=POST h2Search 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. 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. 38 ใหปรบปร'ง Source code ในเมธอด้วย Ent processRequest ด้วย Entง Listing ด้วย Entานลักสูตร 1าง 3. Listing 3.5 โปรแกรม ShowBook.java package 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,HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding(TIS-620); response.setContentType(TIS-620); PrintWriter out = response.getWriter(); out.println(html); out.println(head); out.println(titleServlet 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
  • 39. 39 3.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. 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 1 Using 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
  • 41. 41 Listing 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/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd id=WebApp_ID version=2.1 tlib-version1.2/tlib-version short-nameEJBTags/short-name uri/WEB-INF/tlds/EJBTags/uri tag nameGetBooks/name tag-classtags.GetBooks/tag-class body-contentscriptless/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 = ListBooks 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); ListBooks findAll(); } 4. Fix Error โด้วย Entยการ Implements BooksFacade.java ด้วย Entงน public ListBooks 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. 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 WHERE b.isbn = :isbn) }) Listing 4.3 โปรแกรม Books.java package 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. 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); ListBooks books = bookFacade.findAll(); getJspContext().setAttribute(books,books,PageContext.SESSION_SCOPE); } catch (IOException ex) { throw new JspException(ex.getMessage()); } } Listing 4.4 โปรแกรม GetBooks.java package 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); ListBooks 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
  • 44. 44 4.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
  • 45. 45 Listing 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 % htmlbody EJB:GetBooks/ h1Please 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 tdinput type=checkbox name=item value=${book.isbn} //td td${book.title}/tdtd${book.author}/td td${book.price}/td tdinput 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