More Related Content
Similar to EJB Programming Using Eclipse & JBoss (20)
More from Software Park Thailand (20)
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
- 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