Middleware Technology (J2EE/EJB) Entity Bean (JBoss EJB 3.0 tutorial)
Java EE Programming [EJB 3.0 and JPA] Using Eclipse and JBoss
-
Upload
imc-institute -
Category
Technology
-
view
2.197 -
download
5
description
Transcript of Java EE Programming [EJB 3.0 and JPA] Using Eclipse and JBoss
1
Hand-onExercises
การพัฒน�ฒนาโปรแกรมEJB 3.0 and JPA
โดยใช้� �Eclipse และ JBoss
Assoc.Prof.Dr.Thanachart NumnondaSoftware Park Thailand
andAsst Prof.Thanisa Kruawaisayawan
King Mongkut's Institute of Technology Ladkrabang
June 2011
�������������� ���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 !"��#!������������#$��%�������&����� ��& �!'"#������������������&'�����!(��)*��� +,� �����-� �� ��&%.���������������Java Enterprise Application #�*�� �Enterprise Java Bean 3.0 ��+Java Persistence API #��������/.�������� ���������!�)*���)�����������&����Eclipse ��������+JBoss Application Server
[email protected] twitter.com/thanachart
www.facebook.com/thanachart www.thaijavadev.com
��%'�����2554
�������������� ���Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
3
สารบัญ��ญExercise 1 Stateless Session Bean Using EJB 3.0................................................................................4Exercise 2 Stateful Session Bean Using EJB 3.0...............................................................................21Exercise 3 Entity Class (JPA).............................................................................................................26Exercise 4 การพัฒนาJSP เพื่อเ�ฒนา JSP เพัฒนาJSP เพื่อเอเร�ยกใช้ EJB 3.036��������x�����1�King � EJB 3.0.....................................................................................36Exercise 5 JPA : Entity Relationships................................................................................................41Exercise 6 JPA: Inheritance................................................................................................................60Exercise 7 Message Driven Bean.......................................................................................................70Exercise 8 EJB Security.....................................................................................................................75Exercise 9 Using Java Persistence API in Visual Web JSF applications...........................................83
�������������� ���Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
4
Exercise 1 Stateless Session Bean Using EJB 3.0
��/.������� �0���������������Enterprise Java Bean (EJB) ����� �EJB 3.0 �� ���Session
Bean ����� ����1������������ �Session Bean &���Web Application ����� �Java Servlet ��&��+Desktop Application ����� �Java SE
ข��นตอนในการพัฒนาโปรแกรม��ฒนาโปรแกรม1. �� ���Enterprise Application Project
2. ������Session Bean
3. ������Web Application
4. ������Desktop Application
1.1 ก�รสร�ง Enterprise Application Project
�� ���Project ���Enterprise Application 2.*����EJB Module ���Web Module 3���� ���Project
1. �� ���Project �����)�������File → New → Enterprise Application Project
�4�����Project Name �0��SessionBeanDemo
2. �� ���Server #�*&�����Click #�*'1��New Runtime...
�4�����Directory #�*���JBoss Application Server ���13. ���Next ��'1��New Module... ��)���EJB Module ���Web Module ���Finish &�&��Wizard
�������������� ���Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
5
ร�ปที่ �� 1.1 การสร�าง Enterprise Application Project
�������������� ���Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
6
1.2 ก�รพัฒน�ฒนำ��โปรแกรม Session Bean
������EJB &��� �Session Bean ����� �� 1����������)*�5�3������EJB Container
��� Session Bean &������� ���Business Method 1��5�����/.����&��� ���Session Bean #�*�)*�+BLSession #�*���Business method �����6��!)�
● String sayHi(String name)● double currencyConvert(String currency, double amt)
�����������%#�*&�������������� -� ������1. !��7����#�*�SessionBeanDemoEJB → New → Session Bean(EJB 3.x)
2. �4�����Java package = ejbClass Name = BLSession State Type = Stateless Create Business Interface ��)��#����Remote ���Local �����#�*�1.2
ร�ปที่ �� 1.2 ไดอะล็อกการสร้าง S�อกการสร�าง Session Bean
�������������� ���Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
7
3. � �����Finish �����&��� ��-8�( 1��5����� �����
ร�ปที่ �� 1.3 โครงสร�างของไฟล็อกการสร้าง S ของ Session Bean
4. Declare Method Signature 2 methods #�*�Interface BLSessionLocal , BLSessionRemote
Method Name �)*��sayHiReturn Type : StringInput Parameter = name �0� String
Method Name �)*�+ currencyConvertReturn Type : doubleInput Parameter 1 = currency �0��String
Input Parameter 2 = amt �0��double
#4�-� ��4�����Signature Method �� ����Interface? ���2 ��"��!)�1. ,� ������EJB ���1���Virtual Machine ������������EJB
,� �����&��� ��� Method #�*���'���Interface BLSessionLocal
2. ,� ��������1!��� Virtual Machine ��)�!����!�)*��,� �����&��� ��� Method #�*���'���Interface BLSessionRemote
�������������� ���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--------------------------------------------------------------@Localpublic interface BLSessionLocal {
public String sayHi(String name);public double currencyConvert(String currency,double amt);
}
--- File Remote-------------------------------------------------------------@Remotepublic interface BLSessionRemote {
public String sayHi(String name);public double currencyConvert(String currency,double amt);
}
5. &���0��1����Error �����.��#�*�BLSession.java (Concrete Class) �� �� �mouse ���#�*�Error
eclipse &�����1��� �implement method #�*�interface ���!��-� ����"��������)��#�*����#�����Add Unimplemented Methods ������+
ร�ปที่ �� 1.4 ที่ !าการ Implement source code ที่ �� concrete class : BLSession
6. �� �Implement source code �4������Business Method #������������ 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; } }
�������������� ���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 ����4������ ,� �� �1�������� ��(�String myName -�Servlet #�*�)*���SayHiServlet
1. !��7����#�*�SessionBeanDemoWeb ��)���New → Servlet
2. �4�����Package = controller Class Name = SayHiServlet
ร�ปที่ �� 1.5 สร�าง Servlet เพัฒนาโปรแกรม�#�อต$ดต%อก�บ EJB3
�������������� ���Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
10
3. Set �� ��Web Project �� &���EJB Project ���!������#�*�SessionBeanDemoWeb
��)���Build Path → Configure Build Path
ร�ปที่ �� 1.6 ที่ !าให้ Web Projec� Web Project มองเห้ Web Projec�น EJB Project
4. ���*��Source code �����������EJB #�*�Servlet ����Declare �0��Instant Variable
public class SayHiServlet extends HttpServlet {
@EJBprivate BLSessionLocal blSession;..............................
5. �� ����'���Source code ����6���processRequest ������protected void processRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException
{request.setCharacterEncoding("TIS-620");response.setContentType("TIS-620"); PrintWriter out = response.getWriter();out.println("<html><body>");out.println(blSession.sayHi(request.getParameter("myName")));out.println("</body></html>");out.close();
}
�������������� ���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 &����� �!����Hello Thana �����
�������������� ���Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
12
1.5 ก�รพัฒน�ฒนำ��โปรแกรม Desktop Application ติดต่อกับ EJB 3.0�姍�x�愭楬��2�โปรแกรม W�ดติดต่อกับ EJB 3.0�姍�x�愭楬��2�โปรแกรม W�อก�บ EJB 3.0
��������%#�*&������������Desktop Application ��)*�#�*&�������� �EJB ������ �����&��0���������������Java SE ��)*�������� ��Business Method ����BLSession ���&�#4������������������������������!)�������Main.java &��������6��#�*�)*��sayHi &���command prompt �1�������#�*���!)�������CurrencyConvertor.java &��������6��#�*�)*��currencyConvert ����4������ �����������GUI ��)*��� ,� �� ��� ������)*�� 4������'�������&4����������������� ����������������
1. !������#�*�SessionBeanDemo ��)���New → Application Client Module
�4�����Project Name = SessionBeanDemoClient
2. !�����)���check box �0� Add project to an EAR ��)���dropdown �)*��SessionBeanDemo
ร�ปที่ �� 1.7 การเพัฒนาโปรแกรม�$�ม Enterprise Application Client เข�าส�% Enterprise Application Project
�������������� ���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 -� &� ���Register �)*�����SessionBean �� ���1 �Context ��)�������1�����Mapping
-#�*�SessionBeanDemoEJB
#�*�@Stateless �� ���*������0��� ����Ctrl+Space &����hint ���� ��)���mappedName � ���1�)*�#�* �����
ร�ปที่ �� 1.8 การเพัฒนาโปรแกรม�$�มชื่อของ Session Bea#�อของ Session Bean เข�าส�% Context ของ JBoss Application Server
1.5.2 ��������������+ +Main.java+ +Implement Source code ����Main.java ������
import java.util.Hashtable;import javax.naming.Context;import javax.naming.InitialContext;import javax.naming.NamingException;import ejb.BLSessionRemote;public class Main { public static void main(String[] args) throws NamingException {
Context ctx = getJBossNamingContext();BLSessionRemote sb = (BLSessionRemote)ctx.lookup("SessionBeanForClient");String result = sb.sayHi("Thana");System.out.println(result);
}
public static Context getJBossNamingContext() throws NamingException{Hashtable<String, String> env = new Hashtable<String, String>();env.put("java.naming.factory.initial","org.jboss.naming.NamingContextFactory");env.put("java.naming.provider.url", "localhost:1099");return new InitialContext(env);
} }
#�*�Method getJBossNamingContext() ���1�������Config %.��host:port ����Naming Service
(�0�#�*5���&��� �-%�����Session Bean �)*��9SessionBeanForClient”) ���&� �����port ����Server #�*��+EJB ���1�2.*�#4�-� ����double click #�*�Server JBoss �����
�������������� ���Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
14
ร�ปที่ �� 1.9 การห้ Web Projecา JNDI port ของ Server ที่ �� EJB Project Deploy อยู่��t ���������A�Hashtable<String, String> env = new Hashta�%
&������#4��������Application &�-� ,����6(!)��Hello Thana print �����#�*�Console
�������������� ���Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
15
1.5.3 ��������������+ +CurrencyConvertor.java+ +
������Desktop Application &������:"����������&��� �GUI Designer (Jigloo) ����������
ร�ปที่ �� 1.10 GUI ของโปรแกรม CurrencyConvertor
1. !������#�*������SessionBeanDemoClient ��)���appClientModule → New → Other... → GUI Forms → Swing → Jframe &���-����0���.������4�����Package = swing ���Class Name = CurrencyConvertor
ร�ปที่ �� 1.11 สร�าง Swing GUI
�������������� ���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.
�������������� ���Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
17
5. ���-�!���Label ���Swing Controls &���Table Compoments Drag & Drop -#�*�� � 1��������� ��4����!1��
ร�ปที่ �� 1.14 การวาง Label ใน Components Windows
6. !��7���)���jLabel 1�� ��������*���property #�*�)*��text �0��currency, amount ���value
7. ���-�!���Combo Box ���� 4���1�#������)�����currency &���������property �� ��)���model
����4�����Item ����������� �0��baht ���euro �����
ร�ปที่ �� 1.15 การก!าห้ Web Projecนดค%า item ของ ComboBox
�������������� ���Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
18
8. #4�����implement sourcecode �����
9. Implement source code ��"�#�*�������'1��Calculate ���� -���source code ������
private void jButton1ActionPerformed(ActionEvent evt) {System.out.println("jButton1.actionPerformed, event="+evt); try {
Context ctx = getJBossNamingContext(); BLSessionRemote obj = (BLSessionRemote) ctx.lookup("SessionBeanForClient"); int index = jComboBox1.getSelectedIndex(); String currency = (String) jComboBox1.getItemAt(index); String amtStr = jTextField1.getText(); double amt = Double.parseDouble(amtStr); double usDollar = obj.currencyConvertor(currency, amt); jTextField2.setText(usDollar + ""); } catch (Exception ex) { ex.printStackTrace(); }}
public Context getJBossNamingContext() throws NamingException{ Hashtable<String, String> env = new Hashtable<String, String>();
env.put("java.naming.factory.initial","org.jboss.naming.NamingContextFactory"); env.put("java.naming.provider.url", "localhost:1099"); return new InitialContext(env);}
10. '1��Exit #4���1���������'1��Calculateprivate void jButton2ActionPerformed(ActionEvent evt) {
System.out.println("jButton2.actionPerformed, event=" + evt);System.exit(0);
}11. #�����������������)����'�������� ��&4���������� ���'1��Calculate
�������������� ���Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
19
Source Code #�*�Jigloo �� ���.�������#�*�������'�#������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();
�������������� ���Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
20
jPanel1.add(jTextField2, new CellConstraints("2, 3, 1, 1, default, default"));
}{
jButton1 = new JButton();jPanel1.add(jButton1, new CellConstraints(
"1, 4, 1, 1, default, default"));jButton1.setText("Calculate");jButton1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {jButton1ActionPerformed(evt);
}});
}{
jButton2 = new JButton();jPanel1.add(jButton2, new CellConstraints(
"2, 4, 1, 1, default, default"));jButton2.setText("Exit");jButton2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {jButton2ActionPerformed(evt);
}});
}{
ComboBoxModel jComboBox1Model = new DefaultComboBoxModel(
new String[] { "baht", "euro" });jComboBox1 = new JComboBox();jPanel1.add(getJComboBox1(), new CellConstraints("2, 1, 1, 1, default, default"));jComboBox1.setModel(jComboBox1Model);
}}pack();
} catch (Exception e) {e.printStackTrace();
}}
private void jButton2ActionPerformed(ActionEvent evt) {System.out.println("jButton2.actionPerformed, event=" + evt);System.exit(0);
}public JComboBox getJComboBox1() {
return jComboBox1;}
private void jButton1ActionPerformed(ActionEvent evt) {System.out.println("jButton1.actionPerformed, event="+evt);
try { Context ctx = getJBossNamingContext(); BLSessionRemote obj = (BLSessionRemote) ctx.lookup("SessionBeanForClient"); int index = jComboBox1.getSelectedIndex(); String currency = (String) jComboBox1.getItemAt(index); String amtStr = jTextField1.getText(); double amt = Double.parseDouble(amtStr); double usDollar = obj.currencyConvertor(currency, amt); jTextField2.setText(usDollar + ""); } catch (Exception ex) { ex.printStackTrace(); }}public Context getJBossNamingContext() throws NamingException{
Hashtable<String, String> env = new Hashtable<String, String>();env.put("java.naming.factory.initial","org.jboss.naming.NamingContextFactory");env.put("java.naming.provider.url", "localhost:1099");return new InitialContext(env);
} }
�������������� ���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 Projecาที่ ��ต�องศึกษาก่อน Ses-กษาก%อน+++Session Bean Using EJB 3.0
��/.�������#��� �0��������� Stateful Session Bean �4������Shopping Cart ����� �EJB 3.0
����4������ �Session Bean ���)*��0��Cart �����Business Methods �����6��!)�● void putItem(String itemId, int quantity)● void removeItem(String itemId)● Hashtable getItems()
���&����� &������6���#�*%�������&���@PostConstruct !)�● void initialize()
���Bean Class &��� ���������&0!�(instance variable) ��� ��!)�● String customerId● Hashtable cart
����/.������� ���&������ Java Servlet �.������)*�������� �Cart Session Bean #�*�)*�+CartManager.java ��)*��� ��������*�/�����������&���Cart �����)*����������#�*���1���Cart ���,� #�*������� �CartManager &� ���1�������� ��(#�*�)*��action ����)����'�1� �����#4���-�����Cart ������action ������
● add ��)*����*������������Cart
● remove ��)*������������&���Cart
● list ��)*�������������Cart
[������ '�% ������ �� Servlet ����5-8�(��)*�#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
��/.�������&��� ���&0!�����(SessionBeanDemo) #�*�� ������/.�������Session Bean Using
EJB 3.0 ������� ���Stateful Session Bean ��������� �������������������� -� ������
�������������� ���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�����Java package = ejb , Class Name = Cart ���State Type = Stateful
ร�ปที่ �� 2.1 การก!าห้ Web Projecนดค%าของ Cart Stateful Session Bean
3. #4���� Add Business Method ������*�&���� ���Signature Method ���Interface CartLocal ��+CartRemote ������
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 �)*��getItemsReturn Type : Hashtable
�������������� ���Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
23
4. &�-� �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;
@Localpublic 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;
@Remotepublic interface CartRemote {
void putItem(String itemId, int quantity);void removeItem(String itemId);Hashtable getItems();
}
�������������� ���Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
24
5. &�������Fix Error ����Class Cart.java ����Implement source code ���Listing 2.3 ������Listing 2.3 ������ Cart.java
package ejb;
import java.util.Hashtable;import javax.annotation.PostConstruct;import javax.ejb.Stateful;
@Statefulpublic class Cart implements CartRemote, CartLocal {
Hashtable<String, Integer> cart;@PostConstructpublic void initialize(){
cart = new Hashtable<String, Integer>();}@Overridepublic void putItem(String itemId, int quantity) {
cart.put(itemId, quantity);}
@Overridepublic void removeItem(String itemId) {
cart.remove(itemId);}
@Overridepublic Hashtable getItems() {
return cart;}
}
2.2 ก�รพัฒน�ฒนำ��โปรแกรม CartManager.java
������CartManager.java �0�������Java Servlet ��)*�������� ����Business Method ����Cart
Bean ��������*������������Cart ����4������ ,� �� �1�������� ��(����������������● itemId !)��������������������! �● quantity !)�&4����������������! �● method % ���!1��0��add !)����*����������% ���!1��0��remove !)���������
�'�!4���*� 1��5�3�����CartManager �6����-� ������
1. ����$ ����cart �0������CartLocal ����� �annotation #�*�)*��@EJB ������@EJB private CartLocal cart;
�������������� ���Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
25
2. !4���*��1��!1�������� ��( 1��5�����4������ ��������� ��(�1�,1����&���request !)��action, item ���quantity �����!4���*�������
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����������� �
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����#�*������SessionBeanDemoWeb
&��������)��!4���*��New → Servlet
�4�����Package = controller , Class Name = CartManager
2. ���� � 1���Editor �� ���*��Source code �����������EJB ����������$�instant variable �0������CartLocal ��������&��)*��������EJB ,1���Interface CartLocal
@EJB private CartLocal cart;
3. Implement source code ����Method processRequest( ) ������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); }
�������������� ���Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
26
@EJBprivateCartLocal cart;protected void processRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("TIS-620");response.setContentType("TIS-620");PrintWriter out = response.getWriter();
String action = request.getParameter("action");String item = request.getParameter("item");String quantity = request.getParameter("quantity");out.println("<html><body><h1>Cart Manager</h1>");
if (action.equals("add")) {cart.putItem(item, Integer.parseInt(quantity));
} else if (action.equals("remove")) {cart.removeItem(item);
} else if (action.equals("list")) {Hashtable items = cart.getItems();Enumeration itemNames = items.keys();while (itemNames.hasMoreElements()) {
String itemId = (String) itemNames.nextElement();out.println("Item id: " + itemId + " Quantity : "
+ items.get(itemId));out.println("<BR>");
}}out.println("</body></html>");
}}
2.3 ก�รทดสอบโปรแกรม
1. #4�����Publish ��)*��� #'��Project #4�����Synchronized ���+
ร�ปที่ �� 2.2 การ Publish เพัฒนาโปรแกรม�#�อ Synchronized Project ใน Enterprise Application
2. #4������1�����������)���URL ����Web Browser �0�http://localhost:8080/SessionBeanDemoWeb/CartManager?action=add&item=125&quantity=3������#4������1���������*�� �������)���URL ����Web Browser �0�+http://localhost:8080/SessionBeanDemoWeb/CartManager?action=add&item=123&quantity=23. ������������Cart �����)���URL �0�
++++++++++++http://localhost:8080/SessionBeanDemoWeb/CartManager?action=list4. #�����������������)���URL ����Web Browser �0�
++++++++++++http://localhost:8080/SessionBeanDemoWeb/CartManager?action=remove&item=1235. ������������Cart ���1�����)���URL �0�
+++++++++++http://localhost:8080/SessionBeanDemoWeb/CartManager?action=list
�������������� ���Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
27
Exercise 3 Entity Class (JPA)
��/.�������#��� �0���������������Enterprise Java Bean (EJB) ���&��0�������������� �� 1����;��� �����MySQL ����� �EJB3.0 ���JBoss Application Server &������� ���Entity Class #�*��)*�������� ����#�*�)*��books ���Session Bean ��)*��� �����&��������*��� -������� �������table books -� �
ข��นตอนในการพัฒนาโปรแกรม��ฒนาโปรแกรม1. �� ���Enterprise Application Project
2. ������Entity Class
3. ������Session Bean
4. ������Web Application
3.1 ก�รสร�ง Enterprise Application Project �� ���Enterprise Application Project ������EJB Module ���Web Module ���13�����Project
1. ��)�������File → New → Enterprise Application Project
�4�����Project Name = BookApp
2. �� ���Module ���1
ร�ปที่ �� 3.1 สร�าง Module EJB แล็อกการสร้าง Sะ Web ใน Enterprise Application
�������������� ���Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
28
3.2 ก�ร Config ให้ Project ใช Project ใช้งาน JPA เพื่อเชื่อมต่อกง�นำ� JPA เพัฒน��อเช้งาน JPA เพื่อเชื่อมต่อก��อมติดต่อกับ EJB 3.0�姍�x�愭楬��2�โปรแกรม W�อก�บ Database ได
Java EE 5 &��� !������3#�Entity ��)*��0����&0!#�*���!� ����� ������;��� �������#�*��� ���&��� ���Entity Class #�*�)*��Books.java &�� ����#�*�)*��books 2.*�������� �����1��� ����������� ��������������������������
1. Copy EclipseLink , MySQLConnection (.jar file) -#�*�%JBOSS_HOME\common\lib
2. !������#�*�BookAppEJB ��)���Build path → Configure Build path...
3. ��)���Project Facets → JPA #4�����Config �����
�������������� ���Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
29
�������������� ���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)
����Folder $JBOSS_HOME\docs\examples\jca\ � ��copy file mysql-ds.xml -#�*+$JBOSS_HOME\server\default\deploy\
5. #4�����config file mysql-ds.xml �����
ร�ปที่ �� 3.3 Config JNDI Context ให้ Web Projec� JBoss
�������������� ���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 ���log #�*�Console ��-�1���ERROR
�������������� ���Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
32
3.3 ก�รพัฒน�ฒนำ��โปรแกรม Entity Class �� �� Entity Classes ����!������#�*�BookAppEJB → New → Entities from Tables
ร�ปที่ �� 3.6 แสดงการสร�าง Entity Class
&�-� �Entity Class �)*�+++Books.java+ + #�*���Getter/Setter ���#'��Field ���table books
���*��1����� statement ����Query � ����-#�*���#��� ���1������@Table(name = "books") ������@NamedQuery (name = "Books.findByIsbn", query = "SELECT b FROM Books b WHERE b.isbn = :isbn")
�������������� ���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;
}
}
�������������� ���Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
34
3.4 ก�รพัฒน�ฒนำ��โปรแกรม Session Bean
������EJB &��� �Session Bean ����� �� 1����������)*�5�3������EJB Container �����������1�����&� �� 1�����Entity Class ���,1���Session Bean ��/.�������&��� ���Session Bean #�*�)*�+BooksFacade.java #�*���Business method �������������� ������� ����#�*�)*��books ����� �Entity Class �)*�+Books.java ���EntityManager ���&������� ����������������
1. !������#�*�����BookAppEJB ��)���New → SessionBean (EJB 3.x)
ร�ปที่ �� 3.7 แสดงการสร�าง Session Bean
2. �4�����Package = sbClass name = BookFacadeeclipse &��� ���Interface BookFacadeLocal.java ��
3. ���*��Signature method #�*�interface ������! ��������)���������)*��String isbn ��)*�-�����,� Books find(String isbn);
�������������� ���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;
@Localpublic interface BookFacadeLocal {
Books find(String isbn);}
4. Fix Error #�*�class BookFacade.java implements concrete class
������'�)*��JPA #�*�� !)��BookAppEJB � ��� �������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;
@Statelesspublic class BookFacade implements BookFacadeLocal {
@PersistenceContext(unitName = "BookAppEJB")private EntityManager em;@Overridepublic 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) ��/.������� &������������Web Application ��)*��� ,� �� ���isbn ��������)����� ���0��findBook.html � ������&������������Servlet #�*�)*�+ShowBook.java ��)*����������������������)������1����������������� ����������������
�������������� ���Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
36
3.5.1 ���������������+ +findBook.html+ +
������findBook.html �0���0���&#�*�� ���8��(��4������� ,� �� ���isbn ��������)����������� ����������������
1. !������#�*�����BookAppWeb ��)��!4���*��New → HTML
2. �4�����HTML File Name: �0��findBook � ����Finish
3. ������source code ���-8�(�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"><title>Insert title here</title></head><body> <form action="ShowBook" method="POST"> <h2>Search Book from ISBN</h2> Enter ISBN <input type="text" name="isbn" /> <input type="submit" value="Find" /> </form></body></html>
3.5.2 ��������������+ +ShowBook.java+ +
������ShowBook.java �0�������Java Servlet #�*&��1����������ISBN #�*,� �� ����&���� ��findBook.html ��&��������6���find() ����session bean #�*�)*��BooksFacade ��)*����������������������)����������� ���������������������
1. !������#�*�����BookAppWeb ��)���New → ServletPackage = servletsFile Name = ShowBook
2. ���*��source code �����������EJB (����$�0��Instance Varible)
@EJBprivate BooksFacadeLocal booksFacade;
Eclipse &�& ��Error ������Web -�1��0��EJB Project
�������������� ���Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
37
�� #4�������*��Build path �� ���Library ����EJB Project �����)��#�*�Fix Project Setup
���set Build path �� �����
ร�ปที่ �� 3.8 แสดงการ Fix Project Setup
�������������� ���Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
38
3. �� ����'��Source code ����6���processRequest ����Listing � ���1��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;
@EJBprivate 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("<title>Servlet ShowBook</title>");out.println("</head>");out.println("<body>");String isbn = request.getParameter("isbn");Books book = bookFacade.find(isbn);out.println("Title: " + book.getTitle() + "<BR>");out.println("Author: " + book.getAuthor() + "<BR>");out.println("Price: " + book.getPrice() + "<BR>");out.println("</body>");out.println("</html>");out.close();
}}
�������������� ���Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
39
3.6 ก�รทดสอบโปรแกรม
1. Re-Publish JBoss Server2. ������http://localhost:8080/BookAppWeb/findBook.html
3. �����isbn #�*�����table books � ����Find �� �&��0&����������������������)������
�������������� ���Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
40
Exercise 4 ก�รพัฒน�ฒนำ�� JSP เพัฒน��อเร ยกใช้งาน JPA เพื่อเชื่อมต่อก EJB 3.0
เน#�อห้ Web Projecาที่ ��ต�องศึกษาก่อน Ses-กษาก%อน+Entity Class
��/.������� �0���������������JSP ��)*�������� �Entity Class #�*�)*��Books ���Session Bean #�*�)*��BooksFacade 2.*��������&����/.������)*���Entity Class � �&�������� �Stateful Session Bean #�*�)*�+Cart ������� Servlet #�*�)*��CartManager.java #�*�������&����/.������)*���Stateful Session Bean
Using EJB 3.0 ��)*���1����)*������)������Cart ����)*����������#�*���1���Cart ����� ��Project #�*,1�����)*��SessionBeanDemoWeb
������showBook.jsp �0�������JSP #�*&�������� �Custom Tag #�*�)*��<EJBTags:GetBooks>
2.*�&��0��Tag #�*������� ���6���findAll() ����BooksFacade Session Bean � ���0��List ��������)�#������-� ���session ������showBook.jsp �0&��������)*������)�#���������� ,� �� ��)�������Cart �������� �������-8�( 1��5�!)�
● Tag Library Descriptor● Tag Handler● JSP File
��������� ����������������
4.1.1 �� ���+ +Tag Library Descriptor+ +
-8�(��� &��� ��0������)*��Tag 1��5#�*�����1��)*������%�4��tag 1��5����� ��������JSP ����� !4���*�+<%@taglib ...%> ����� ���Tag Library Descriptor &������� ��������
1. !������#�*�����BookAppWeb
2. �� ���8�����(�\Web Pages\WEB-INF\tlds3. �� ��-8�(#�*�)*��EJBTags.tld ���implements ������
�������������� ���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-version>1.2</tlib-version><short-name>EJBTags</short-name><uri>/WEB-INF/tlds/EJBTags</uri><tag>
<name>GetBooks</name><tag-class>tags.GetBooks</tag-class><body-content>scriptless</body-content>
</tag></taglib>
4.1.2 �� ��-8�(�+ +Tag Handler+ +
-8�(�Tag Handler &��0������&���#�*������.����)*����'�1����)*�������� �tag � �&� ��#4�!4���*���1��-����#�*���&��4�����)*��Tag �0��GetBook ��������� ����������������
1. !��7����#�*�Project BookAppWeb &��������)��!4���*��New → Class
�4�����Package = tags , Class Name = GetBooks��)���SuperClass = SimpleTagSupport
2. #4�����Implement Method �)*��doTag( ) : Call Enterprise Bean ����� �annotation @EJB @EJB private BooksFacadeLocal booksFacade;
3. �� ���*��Signature Method => List<Books> findAll(); #�*�interface BookFacadeLocal
Listing 4.2 ������ BooksFacadeLocal.java package sb;import java.util.List;import entity.Books;
@Localpublic interface BookFacadeLocal {
Books find(String isbn);List<Books> findAll();
}
4. Fix Error �������Implements BooksFacade.java ������++++ public List<Books> findAll() {
CriteriaQuery cq = em.getCriteriaBuilder().createQuery(); cq.select(cq.from(Books.class)); return em.createQuery(cq).getResultList();
}
�������������� ���Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
42
5. � -��Books.java ���������������� ���1�'��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;}
}
�������������� ���Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
43
6. Implement source code ���class GetBooks.java #�*��6���doTag() ������
public void doTag() throws JspException {JspWriter out = getJspContext().getOut();
try{JspFragment f = getJspBody();if (f != null)f.invoke(out);List<Books> books = bookFacade.findAll();getJspContext().setAttribute("books",books,PageContext.SESSION_SCOPE);
} catch (IOException ex) {throw new JspException(ex.getMessage());
}}
Listing 4.4 ������ GetBooks .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 {
@EJBprivate BookFacadeLocal bookFacade;@Overridepublic void doTag() throws JspException {
JspWriter out = getJspContext().getOut();
try {JspFragment f = getJspBody();if (f != null)f.invoke(out);List<Books> books = bookFacade.findAll();getJspContext().setAttribute("books",
books,PageContext.SESSION_SCOPE);} catch (IOException ex) {
throw new JspException(ex.getMessage());}
}}
�������������� ���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�����JSP File Name: �0��showBook
2. ���� � 1���editor �� � -��source code ���-8�(��showBook.jsp �� �0�- ���Listing #�*�4.5
��������&��� ,����6(��� ����1������#�*�4.1
ร�ปที่ �� 4.1 ผล็อกการสร้าง Sล็อกการสร้าง S�พัฒนาโปรแกรม�ธ์โปรแกรม showB โปรแกรม showBook.jsp
�������������� ���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" %><html><body> <EJB:GetBooks/> <h1>Please Select Books</h1> <form action="http://localhost:8080/SessionBeanDemoWeb/CartManager" > <input type="HIDDEN" name="action" value="add" /> <table border="1"> <thead> <tr> <th></th> <th> Title </th> <th> Author </th> <th> Price </th> <th> Quantity </th> </tr> </thead> <tbody> <c:forEach var="book" items="${sessionScope.books}"> <tr> <td><input type="checkbox" name="item" value="${book.isbn}" /></td> <td>${book.title}</td><td>${book.author}</td> <td>${book.price}</td> <td><input type="text" name="${book.isbn}" value="0" size="3" />
</td> </tr> </c:forEach> </tbody> </table> <p> <input type="submit" value="Add" /> </form> </body></html>
4.2 ก�รปร�บปร"งโปรแกรม CartManager.java
������+CartManager.java ����&��4������ �1��� ���������1���������! ����Cart #�*��������+��)*��� ����������%�1��� �������������! �#�*&���0����1�� ��������(�����String #�*��&������������2.*�%����)����&���checkbox #�*���1���� ��showBook.jsp -� ������ � -��source code ��-8�(+CartManager.java �1���+ +Business Logic + +���������*�� ����+ ++������
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)); } }
�������������� ���Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
46
Listing 4.6 โปรแกรม 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);
}
@EJBCartLocal cart;protected void processRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("TIS-620");response.setContentType("TIS-620");String action = request.getParameter("action");String item = request.getParameter("item");String quantity = request.getParameter("quantity");PrintWriter out = response.getWriter();out.println("<html><body><h1>Cart Manager</h1>");
if (action.equals("add")) { String[] items = request.getParameterValues("item"); for (int i = 0; i < items.length; i++)
{ String qty = request.getParameter(items[i]); cart.putItem(items[i], Integer.parseInt(qty)); }
} else if (action.equals("remove")) {cart.removeItem(item);
} else if (action.equals("list")) {Hashtable items = cart.getItems();Enumeration itemNames = items.keys();while (itemNames.hasMoreElements()) {
String itemId = (String) itemNames.nextElement();out.println("Item id: " + itemId + " Quantity : "
+ items.get(itemId));out.println("<BR>");
}}out.println("</body></html>");
}}
�������������� ���Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan
47
4.3 ก�รทดสอบโปรแกรม
1. #4������Build ���Deploy ���&0!�SessionBeanDemo ���BookApp
2. ��� URL http://localhost:8080/BookAppWeb/showBook.jsp �� ���#������)������1� ����3. ��)*���'1��Add ������0&���0������)�#�*��)�����Cart
4. ������������Cart �����)���URL �0�http://localhost:8080/SessionBeanDemoWeb/CartManager?action=list
�������������� ���Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan