EJB Programming Using Eclipse & JBoss

47
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 การฒนาโปรแกรมวย Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan

description

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

Transcript of EJB Programming Using Eclipse & JBoss

Page 1: EJB Programming Using Eclipse & 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

Page 2: EJB Programming Using Eclipse & JBoss

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

Page 3: EJB Programming Using Eclipse & JBoss

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

Page 4: EJB Programming Using Eclipse & JBoss

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

Page 5: EJB Programming Using Eclipse & JBoss

5

ร�ปที่ �� 1.1 การสร�าง Enterprise Application Project

�������������� ���Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan

Page 6: EJB Programming Using Eclipse & JBoss

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

Page 7: EJB Programming Using Eclipse & JBoss

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

Page 8: EJB Programming Using Eclipse & JBoss

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

Page 9: EJB Programming Using Eclipse & JBoss

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

Page 10: EJB Programming Using Eclipse & JBoss

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

Page 11: EJB Programming Using Eclipse & JBoss

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

Page 12: EJB Programming Using Eclipse & JBoss

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

Page 13: EJB Programming Using Eclipse & JBoss

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

Page 14: EJB Programming Using Eclipse & JBoss

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

Page 15: EJB Programming Using Eclipse & JBoss

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

Page 16: EJB Programming Using Eclipse & JBoss

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

Page 17: EJB Programming Using Eclipse & JBoss

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

Page 18: EJB Programming Using Eclipse & JBoss

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

Page 19: EJB Programming Using Eclipse & JBoss

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

Page 20: EJB Programming Using Eclipse & JBoss

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

Page 21: EJB Programming Using Eclipse & JBoss

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

Page 22: EJB Programming Using Eclipse & JBoss

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

Page 23: EJB Programming Using Eclipse & JBoss

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

Page 24: EJB Programming Using Eclipse & JBoss

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

Page 25: EJB Programming Using Eclipse & JBoss

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

Page 26: EJB Programming Using Eclipse & JBoss

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

Page 27: EJB Programming Using Eclipse & JBoss

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

Page 28: EJB Programming Using Eclipse & JBoss

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

Page 29: EJB Programming Using Eclipse & JBoss

29

�������������� ���Enterprise Java Bean 3.0 Assoc.Prof.Dr.Thanachart Numnonda/ Asst Prof.Thanisa Kruawaisayawan

Page 30: EJB Programming Using Eclipse & JBoss

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

Page 31: EJB Programming Using Eclipse & JBoss

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

Page 32: EJB Programming Using Eclipse & JBoss

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

Page 33: EJB Programming Using Eclipse & JBoss

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

Page 34: EJB Programming Using Eclipse & JBoss

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

Page 35: EJB Programming Using Eclipse & JBoss

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

Page 36: EJB Programming Using Eclipse & JBoss

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

Page 37: EJB Programming Using Eclipse & JBoss

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

Page 38: EJB Programming Using Eclipse & JBoss

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

Page 39: EJB Programming Using Eclipse & JBoss

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

Page 40: EJB Programming Using Eclipse & JBoss

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

Page 41: EJB Programming Using Eclipse & JBoss

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

Page 42: EJB Programming Using Eclipse & JBoss

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

Page 43: EJB Programming Using Eclipse & JBoss

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

Page 44: EJB Programming Using Eclipse & JBoss

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

Page 45: EJB Programming Using Eclipse & JBoss

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

Page 46: EJB Programming Using Eclipse & JBoss

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

Page 47: EJB Programming Using Eclipse & JBoss

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