Bengkel J2EE/Linux APLIKASI ENTERPRISE DENGAN JAVA
|
|
|
- Surya Sudjarwadi
- 8 tahun lalu
- Tontonan:
Transkripsi
1 Bengkel J2EE/Linux APLIKASI ENTERPRISE DENGAN JAVA By Version Last update 22 Oct 2003 Untuk release terbaru, question, troubleshoot dan feedback kami undang Anda bergabung dengan Masyarakat J2EE/Linux Indonesia Bisa dilakukan dengan mengirim ke
2 PENGANTAR Bagaimana membuat aplikasi enterprise dengan teknologi Java? Table of Contents 1 JBoss... 3 CS CS CS CS CS CS CS CS Enterprise Java Bean Teknologi Pendukung Tipe EJB Source Code dan Deployment Descriptor Cara Kerja EJB Stateless Session Bean CS CS Statefull Session Bean CS CS Bean Managed Persistence Entity Bean CS CS CS Container Managed Persistence Entity Bean CS Message Driven Bean Life cycle Environment Variable Transaction Security CS CS CS CS CS
3 1JBoss JBoss adalah enterprise application server di mana Anda bisa men-deploy EJB. Setelah di-deploy di JBoss, EJB Anda akan siap bekerja di dalam JBoss melayani client. Untuk bisa menjalankan JBoss, Anda membutuhkan Java Development Kit. Untuk meng-install JBoss, Anda bisa men-download binary dari Anda bisa men-download installation file dalam format.zip atau.tar.gz. Yang Anda perlu lakukan adalah men-decompress file ini ke sebuah directory. Directory di mana JBoss di-install dikenal sebagai JBOSS_HOME.
4 CS Sebuah praktikum dengan Stateless Session Bean. Bean menyediakan sebuah method yang jika di-invoke akan mengembalikan satu String. Persiapan Jalankan JBoss jika belum Buat sebuah directory untuk bekerja misalnya /home/lab/myjava Langkah Langkah ke-1 Tulis SalamKeadilanHome.java, simpan di-directory yang sudah dipersiapkan. SalamKeadilanHome.java import java.rmi.remoteexception; import javax.ejb.createexception; import javax.ejb.ejbhome; public interface SalamKeadilanHome extends EJBHome public SalamKeadilan create() throws RemoteException, CreateException; Langkah ke-2 Tulis SalamKeadilan.java, simpan di directory yang sudah dipersiapkan SalamKeadilan.java import javax.ejb.ejbobject; import java.rmi.remoteexception; public interface SalamKeadilan extends EJBObject public String getpesan() throws RemoteException;
5 Langkah ke-3 Tulis SalamKeadilanBean.java, simpan di directory yang sudah disiapkan SalamKeadilanBean.java import java.rmi.remoteexception; import javax.ejb.sessionbean; import javax.ejb.sessioncontext; public class SalamKeadilanBean implements SessionBean public String getpesan() return "Salam Keadilan!"; public void ejbcreate() public void ejbremove() public void ejbactivate() public void ejbpassivate() public void setsessioncontext(sessioncontext sc) Langkah ke-4 Buka sebuah terminal dan change directory ke directory di atas Langkah ke-5 Compile...
6 $ export CLASSPATH=.:/home/lab/jboss-3.0.4/client/jbossall-client.jar $ javac *.java $ ls *.class SalamKeadilanBean.class SalamKeadilan.class SalamKeadilanHome.class Langkah ke-6 Buat sub-directory META-INF Langkah ke-7 Tulis ejb-jar.xml, simpan ke sub directory META-INF META-INF/ejb-jar.xml <?xml version="1.0" encoding="utf-8"?> <ejb-jar> <description>enterprise Java Lab</description> <display-name>enterprise Java Lab</display-name> <enterprise-beans> <session> <ejb-name>salamkeadilan</ejb-name> <home>salamkeadilanhome</home> <remote>salamkeadilan</remote> <ejb-class>salamkeadilanbean</ejb-class> <session-type>stateless</session-type> <transaction-type>bean</transaction-type> </session> </enterprise-beans> </ejb-jar> Langkah ke-8 Gabungkan ke dalam sebuah jar $ jar cvf salamkeadilan.jar SalamKeadilan.class SalamKeadilanHome.class adding: META-INF/ (in=0) (out=0) (stored 0%) adding: META-INF/MANIFEST.MF (in=56) (out=56) (stored 0%) adding: SalamKeadilan.class (in=229) (out=176) (deflated 23%) adding: SalamKeadilanHome.class (in=263) (out=184) (deflated 30%) adding: SalamKeadilanBean.class (in=634) (out=323) (deflated 49%) adding: META-INF/ (in=0) (out=0) (stored 0%) adding: META-INF/ejb-jar.xml (in=538) (out=217) (deflated 59%) Total:
7 (in = 1709) (out = 1745) (deflated -2%) Langkah ke-9 Copy ke dalam deployment directory dari jboss $ cp salamkeadilan.jar /home/lab/jboss-3.0.4/server/default/deploy/ Terpantau di log dari JBoss : 05:26:44,252 INFO [MainDeployer] Starting deployment of package: file:/home/lab/jboss-3.0.4/server/default/deploy/salamkeadilan.jar 05:26:44,333 INFO [EjbModule] Creating 05:26:44,376 INFO [EjbModule] Deploying SalamKeadilan 05:26:44,417 INFO [EjbModule] Created 05:26:44,419 INFO [EjbModule] Starting 05:26:44,511 INFO [EjbModule] Started 05:26:44,512 INFO [MainDeployer] Deployed package: file:/home/lab/jboss-3.0.4/server/default/deploy/salamkeadilan.jar Module EJB telah di-deploy di atas JBoss enterprise application server dan siap melayani request dari client.
8 CS untuk mengakses Stateless Session Bean dari sebuah stand alone Java application... Persiapan Buat sebuah directory untuk bekerja, misalnya /home/lab/myjava Langkah Langkah ke-1 Tulis SalamKeadilanApp.java, simpan di-directory yang sudah dipersiapkan. SalamKeadilanApp.java import java.util.properties; import javax.naming.initialcontext; import javax.rmi.portableremoteobject; public class SalamKeadilanApp public static void main(string[] args) try Properties props = new Properties(); props.setproperty( "java.naming.factory.initial", "org.jnp.interfaces.namingcontextfactory" ); props.setproperty( "java.naming.provider.url", "localhost:1099" ); InitialContext jndicontext = new InitialContext(props); Object ref = jndicontext.lookup("salamkeadilan"); SalamKeadilanHome home = (SalamKeadilanHome) PortableRemoteObject.narrow (ref, SalamKeadilanHome.class); SalamKeadilan ejb = home.create(); String pesan = ejb.getpesan(); System.out.println(pesan); catch(exception e) e.printstacktrace(); Langkah ke-2 Buka sebuah terminal, dan change directory ke directory kerja tersebut Langkah ke-3 Compile...
9 $ export CLASSPATH=. $ export CLASSPATH=$CLASSPATH:/home/lab/jboss-3.0.4/client/jbossallclient.jar $ export CLASSPATH=$CLASSPATH:/home/lab/jboss-3.0.4/client/log4j.jar $ export CLASSPATH=$CLASSPATH:salamkeadilan.jar $ javac SalamKeadilanApp.java akan dihasilkan SalamKeadilanApp.class Langkah ke-4 Launch... $ java SalamKeadilanApp Salam keadilan!
10 CS untuk mengakses Stateless Session Bean dari sebuah aplikasi Swing... Persiapan Buat sebuah directory untuk bekerja, misalnya /home/lab/myjava Langkah Langkah ke-1 Tulis SalamKeadilanJFrame.java, simpan di-directory yang sudah dipersiapkan. SalamKeadilanJFrame.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.properties; import javax.naming.initialcontext; import javax.rmi.portableremoteobject; public class SalamKeadilanJFrame extends JFrame implements ActionListener JLabel labelpesan; public SalamKeadilanJFrame() JButton tombolpesan = new JButton("Tombol Pesan"); tombolpesan.addactionlistener(this); getcontentpane().add(tombolpesan, BorderLayout.NORTH); labelpesan = new JLabel(); getcontentpane().add(labelpesan, BorderLayout.CENTER); WindowListener wlsalamkeadilanframe = new WindowAdapter() public void windowclosing(windowevent we) System.exit(0); ; addwindowlistener(wlsalamkeadilanframe); public void actionperformed(actionevent ae) try Properties props = new Properties(); props.setproperty( "java.naming.factory.initial", "org.jnp.interfaces.namingcontextfactory" ); props.setproperty(
11 "java.naming.provider.url", "localhost:1099" ); InitialContext jndicontext = new InitialContext(props); Object ref = jndicontext.lookup("salamkeadilan"); SalamKeadilanHome home = (SalamKeadilanHome) PortableRemoteObject.narrow (ref, SalamKeadilanHome.class); SalamKeadilan ejb = home.create(); String pesan = ejb.getpesan(); labelpesan.settext(pesan); catch(exception e) e.printstacktrace(); Langkah ke-2 Tulis SalamKeadilanSwingApp.java, simpan di-directory yang sudah dipersiapkan. SalamKeadilanSwingApp.java import javax.swing.*; public class SalamKeadilanSwingApp public static void main(string[] args) JFrame frame = new SalamKeadilanJFrame(); String lookandfeel = "javax.swing.plaf.metal.metallookandfeel"; if(args.length>0) if(args[0].equals("metal")) // else if(args[0].equals("window")) lookandfeel = "com.sun.java.swing.plaf.windows.windowslookandfeel"; else if(args[0].equals("motif")) lookandfeel = "com.sun.java.swing.plaf.motif.motiflookandfeel"; try UIManager.setLookAndFeel(lookAndFeel);
12 SwingUtilities.updateComponentTreeUI(frame); catch (Exception e) e.printstacktrace(); frame.setlocation(300, 300); frame.setsize(300, 200); frame.show(); Langkah ke-3 Buka sebuah terminal, dan change directory ke directory kerja tersebut Langkah ke-4 Compile... $ export CLASSPATH=. $ export CLASSPATH=$CLASSPATH:/home/lab/jboss-3.0.4/client/jbossallclient.jar $ export CLASSPATH=$CLASSPATH:/home/lab/jboss-3.0.4/client/log4j.jar $ export CLASSPATH=$CLASSPATH:salamkeadilan.jar $ javac SalamKeadilanApp.java akan dihasilkan SalamKeadilanApp.class Langkah ke-4 Launch... $ java SalamKeadilanSwingApp
13 CS Mengakses EJB dari Servlet! Prasyarat Anda harus melakukan praktikum CS terlebih dahulu... Langkah Langkah ke-1 Copy library yang diperlukan ke Context myjava... $ cp /home/lab/jboss-3.0.4/client/jbossall-client.jar /home/lab/myjava/web-inf/lib/ $ cp salamkeadilan.jar /home/lab/myjava/web-inf/lib/ Langkah ke-2 Tulis SalamKeadilanServlet.java, simpan di-directory yang sudah dipersiapkan WEB-INF/classes SalamKeadilanServlet.java import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.properties; import javax.naming.initialcontext; import javax.rmi.portableremoteobject; public class SalamKeadilanServlet extends HttpServlet public void service(httpservletrequest request, HttpServletResponse response) throws IOException, ServletException response.setcontenttype("text/html"); PrintWriter out = response.getwriter(); try Properties props = new Properties(); props.setproperty( "java.naming.factory.initial", "org.jnp.interfaces.namingcontextfactory" ); props.setproperty( "java.naming.provider.url", "localhost:1099" ); InitialContext jndicontext = new InitialContext(props); Object ref = jndicontext.lookup("salamkeadilan"); SalamKeadilanHome home = (SalamKeadilanHome) PortableRemoteObject.narrow (ref, SalamKeadilanHome.class); SalamKeadilan ejb = home.create();
14 String pesan = ejb.getpesan(); out.println("<html><body>"); out.println(pesan); out.println("</body></html>"); catch(exception e) e.printstacktrace(); Langkah ke-3 Compile... $ export CLASSPATH=. $ export CLASSPATH=$CLASSPATH:/home/lab/jboss-3.0.4/client/jbossallclient.jar $ export CLASSPATH=$CLASSPATH:/home/lab/jboss-3.0.4/client/log4j.jar $ export CLASSPATH=$CLASSPATH:/home/lab/jakarta-tomcat /common/lib/servlet.jar $ export CLASSPATH=$CLASSPATH:salamkeadilan.jar $ javac WEB-INF/classes/SalamKeadilanServlet.java Langkah ke-4 Tulis web.xml yang baru... WEB-INF/web.xml <?xml version="1.0" encoding="iso "?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" " <web-app> <servlet> <servlet-name>salamkeadilanservlet</servlet-name> <servlet-class> SalamKeadilanServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>salamkeadilanservlet</servlet-name> <url-pattern>/salamkeadilanservlet</url-pattern> </servlet-mapping> </web-app> Langkah ke-5 Terpantau di log dari Tomcat : :45:04 StandardContext[/myjava]: Stopping :45:04 StandardContext[/myjava]: Stopping filters :45:04 StandardContext[/myjava]: Processing standard container shutdown :45:04 ContextConfig[/myjava]: ContextConfig: Processing STOP :45:04 StandardContext[/myjava]: Sending application stop events :45:04 StandardContext[/myjava]: Stopping complete
15 :45:04 StandardContext[/myjava]: Starting :45:04 StandardContext[/myjava]: Processing start(), current available=false :45:04 StandardContext[/myjava]: Processing standard container startup :45:04 WebappLoader[/myjava]: Deploying class repositories to work directory /home/lab/jakarta-tomcat /work/Standalone/localhost/myjava :45:04 WebappLoader[/myjava]: Deploy class files /WEB- INF/classes to /home/lab/myjava/web-inf/classes :45:04 WebappLoader[/myjava]: Deploy JAR /WEB- INF/lib/mm.mysql bin.jar to /home/lab/myjava/web-inf/lib/mm.mysql bin.jar :45:04 WebappLoader[/myjava]: Reloading checks are enabled for this Context :45:04 Authenticator[/myjava]: No SingleSignOn Valve is present :45:04 ContextConfig[/myjava]: ContextConfig: Processing START :45:04 StandardContext[/myjava]: Setting deployment descriptor public ID to -//Sun Microsystems, Inc.//DTD Web Application 2.3//EN :45:04 StandardContext[/myjava]: Setting deployment descriptor public ID to -//Sun Microsystems, Inc.//DTD Web Application 2.3//EN :45:04 ContextConfig[/myjava]: Accumulating TLD resource paths :45:04 ContextConfig[/myjava]: Scanning JAR at resource path /WEB-INF/lib/mm.mysql bin.jar :45:04 ContextConfig[/myjava]: Pipline Configuration: :45:04 ContextConfig[/myjava]: org.apache.catalina.authenticator.basicauthenticator/ :45:04 ContextConfig[/myjava]: org.apache.catalina.core.standardcontextvalve/ :45:04 ContextConfig[/myjava]: ====================== :45:04 NamingContextListener[/Standalone/localhost/myjava]: Creating JNDI naming context :45:04 StandardManager[/myjava]: Seeding random number generator class java.security.securerandom :45:04 StandardManager[/myjava]: Seeding of random number generator has been completed :45:04 StandardContext[/myjava]: Posting standard context attributes :45:04 StandardContext[/myjava]: Configuring application event listeners :45:04 StandardContext[/myjava]: Sending application start events :45:04 StandardContext[/myjava]: Starting filters :45:04 StandardWrapper[/myjava:default]: Loading container servlet default :45:04 StandardWrapper[/myjava:invoker]: Loading container servlet invoker :45:04 StandardContext[/myjava]: Starting completed Langkah ke-6 Servlet telah di-deploy di atas Tomcat web application server, siap melayani request dari browser. melalui URL :
16
17 CS Contoh lain tentang Stateless Session Bean Persiapan Jalankan JBoss jika belum Buat sebuah directory untuk bekerja misalnya /home/lab/myjava Langkah Langkah ke-1 Tulis MyCalculatorHome.java, simpan di sub-directory calculator di bawah directory yang sudah dipersiapkan. calculator/mycalculatorhome.java package calculator; import java.rmi.remoteexception; import javax.ejb.createexception; import javax.ejb.ejbhome; public interface MyCalculatorHome extends EJBHome public MyCalculator create() throws RemoteException, CreateException; Langkah ke-2 Tulis MyCalculator.java, simpan di sub-directory calculator di bawah directory yang sudah dipersiapkan. calculator/mycalculator.java package calculator; import javax.ejb.ejbobject; import java.rmi.remoteexception; public interface MyCalculator extends EJBObject public double add(double x, double y) throws RemoteException; public double subscribe(double x, double y) throws RemoteException; public double multiply(double x, double y) throws RemoteException; public double divide(double x, double y) throws RemoteException; Langkah ke-3
18 Tulis MyCalculatorBean.java, simpan di sub-directory calculator di bawah directory yang sudah dipersiapkan. calculator/mycalculatorbean.java package calculator; import java.rmi.remoteexception; import javax.ejb.sessionbean; import javax.ejb.sessioncontext; public class MyCalculatorBean implements SessionBean public double add(double x, double y) return x + y; public double subscribe(double x, double y) return x - y; public double multiply(double x, double y) return x * y; public double divide(double x, double y) return x / y; public void ejbcreate() public void ejbremove() public void ejbactivate() public void ejbpassivate() public void setsessioncontext(sessioncontext sc) Langkah ke-4 Buka sebuah terminal dan change directory ke directory di atas Langkah ke-5 Compile... $ export CLASSPATH=.:/home/lab/jboss-3.0.4/client/jbossall-client.jar $ javac calculator/*.java Langkah ke-6 Buat sub-directory META-INF Langkah ke-7 Tulis ejb-jar.xml, simpan ke sub directory META-INF META-INF/ejb-jar.xml <?xml version="1.0" encoding="utf-8"?> <ejb-jar> <description>enterprise Java Lab</description> <display-name>enterprise Java Lab</display-name>
19 <enterprise-beans> <session> <ejb-name>mycalculator</ejb-name> <home>calculator.mycalculatorhome</home> <remote>calculator.mycalculator</remote> <ejb-class>calculator.mycalculatorbean</ejb-class> <session-type>stateless</session-type> <transaction-type>bean</transaction-type> </session> </enterprise-beans> </ejb-jar> Langkah ke-8 Gabungkan ke dalam sebuah jar $ jar cvf calculator.jar calculator/*.class META-INF adding: META-INF/ (in=0) (out=0) (stored 0%) adding: META-INF/MANIFEST.MF (in=56) (out=56) (stored 0%) adding: calculator/mycalculator.class (in=304) (out=206) (deflated 32%) adding: calculator/mycalculatorbean.class (in=760) (out=358) (deflated 52%) adding: calculator/mycalculatorhome.class (in=282) (out=195) (deflated 30%) adding: META-INF/ (in=0) (out=0) (stored 0%) adding: META-INF/ejb-jar.xml (in=568) (out=228) (deflated 59%) Total: (in = 1959) (out = 1892) (deflated 3%) Langkah ke-9 Copy ke dalam deployment directory dari jboss $ cp calculator.jar /home/lab/jboss-3.0.4/server/default/deploy/ Terpantau di log dari JBoss : 1:05:06,744 INFO [MainDeployer] Starting deployment of package: file:/home/lab/jboss-3.0.4/server/default/deploy/calculator.jar 01:05:06,943 INFO [EjbModule] Creating 01:05:07,049 INFO [EjbModule] Deploying MyCalculator 01:05:07,094 INFO [EjbModule] Created 01:05:07,098 INFO [EjbModule] Starting 01:05:07,261 INFO [EjbModule] Started 01:05:07,264 INFO [MainDeployer] Deployed package: file:/home/lab/jboss-3.0.4/server/default/deploy/calculator.jar Module EJB telah di-deploy di atas JBoss enterprise application server dan siap melayani request dari client.
20 CS untuk mengakses Stateless Session Bean dari sebuah stand alone Java application... Persiapan Buat sebuah directory untuk bekerja, misalnya /home/lab/myjava Langkah Langkah ke-1 Tulis CalculatorApp.java, simpan di sub-directory app di bawah directory yang sudah dipersiapkan. app/calculatorapp.java package app; import java.util.properties; import javax.naming.initialcontext; import javax.rmi.portableremoteobject; import calculator.*; public class CalculatorApp public static void main(string[] args) try Properties props = new Properties(); props.setproperty( "java.naming.factory.initial", "org.jnp.interfaces.namingcontextfactory" ); props.setproperty( "java.naming.provider.url", "localhost:1099" ); InitialContext jndicontext = new InitialContext(props); Object ref = jndicontext.lookup("mycalculator"); MyCalculatorHome home = (MyCalculatorHome) PortableRemoteObject.narrow (ref, MyCalculatorHome.class); MyCalculator calc = home.create(); double x = 7.5; double y = 3.3; System.out.println("x = " + x); System.out.println("y = " + y); System.out.println("x + y = " + calc.add(x,y)); System.out.println("x - y = " + calc.subscribe(x,y)); System.out.println("x * y = " + calc.multiply(x,y)); System.out.println("x / y = " + calc.divide(x,y)); catch(exception e) e.printstacktrace();
21 Langkah ke-2 Buka sebuah terminal, dan change directory ke directory kerja tersebut Langkah ke-3 Compile... $ export CLASSPATH=. $ export CLASSPATH=$CLASSPATH:/home/lab/jboss-3.0.4/client/jbossallclient.jar $ export CLASSPATH=$CLASSPATH:/home/lab/jboss-3.0.4/client/log4j.jar $ export CLASSPATH=$CLASSPATH:calculator.jar $ javac app/calculatorapp.java akan dihasilkan CalculatorApp.class Langkah ke-4 Launch... $ java app.calculatorapp x = 7.5 y = 3.3 x + y = 10.8 x - y = 4.2 x * y = x / y =
22 CS untuk mengakses Stateless Session Bean dari sebuah aplikasi Swing... Persiapan Buat sebuah directory untuk bekerja, misalnya /home/lab/myjava Langkah Langkah ke-1 Tulis CalculatorJFrame.java, simpan di sub-directory swing di bawah directory yang sudah dipersiapkan. swing/calculatorjframe.java package swing; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.properties; import javax.naming.initialcontext; import javax.rmi.portableremoteobject; import calculator.*; public class CalculatorJFrame extends JFrame implements ActionListener JLabel resultlbl; JTextField xtxt; JTextField ytxt; public CalculatorJFrame() xtxt = new JTextField(); ytxt = new JTextField(); JPanel textpnl = new JPanel(); textpnl.setlayout(new GridLayout(2,2)); textpnl.add(new JLabel("x = ")); textpnl.add(xtxt); textpnl.add(new JLabel("y = ")); textpnl.add(ytxt); getcontentpane().add(textpnl, BorderLayout.NORTH); JButton addbtn = new JButton("+"); JButton subscribebtn = new JButton("-"); JButton multiplybtn = new JButton("*"); JButton dividebtn = new JButton("/"); addbtn.addactionlistener(this); subscribebtn.addactionlistener(this); multiplybtn.addactionlistener(this); dividebtn.addactionlistener(this); JPanel buttonpnl = new JPanel();
23 buttonpnl.add(addbtn); buttonpnl.add(subscribebtn); buttonpnl.add(multiplybtn); buttonpnl.add(dividebtn); getcontentpane().add(buttonpnl, BorderLayout.SOUTH); resultlbl = new JLabel(); getcontentpane().add(resultlbl, BorderLayout.CENTER); WindowListener wlsalamkeadilanframe = new WindowAdapter() public void windowclosing(windowevent we) System.exit(0); ; addwindowlistener(wlsalamkeadilanframe); public void actionperformed(actionevent ae) double result = 0; try String xstr = xtxt.gettext(); double x = Double.parseDouble(xStr); String ystr = ytxt.gettext(); double y = Double.parseDouble(yStr); Properties props = new Properties(); props.setproperty( "java.naming.factory.initial", "org.jnp.interfaces.namingcontextfactory" ); props.setproperty( "java.naming.provider.url", "localhost:1099" ); InitialContext jndicontext = new InitialContext(props); Object ref = jndicontext.lookup("mycalculator"); MyCalculatorHome home = (MyCalculatorHome) PortableRemoteObject.narrow (ref, MyCalculatorHome.class); MyCalculator calc = home.create(); String command = ae.getactioncommand(); if(command.equals("+")) result = calc.add(x, y); else if(command.equals("-")) result = calc.subscribe(x, y); else if(command.equals("*")) result = calc.multiply(x, y);
24 else if(command.equals("/")) result = calc.divide(x, y); catch(exception e) e.printstacktrace(); resultlbl.settext(double.tostring(result)); Langkah ke-2 Tulis CalculatorApp.java, simpan di sub-directory app di bawah directory yang sudah dipersiapkan. app/calculatorswingapp.java package app; import javax.swing.*; import swing.*; public class CalculatorSwingApp public static void main(string[] args) JFrame frame = new CalculatorJFrame(); frame.setlocation(300, 300); frame.setsize(300, 200); frame.show(); Langkah ke-3 Buka sebuah terminal, dan change directory ke directory kerja tersebut Langkah ke-4 Compile... $ export CLASSPATH=. $ export CLASSPATH=$CLASSPATH:/home/lab/jboss-3.0.4/client/jbossallclient.jar $ export CLASSPATH=$CLASSPATH:/home/lab/jboss-3.0.4/client/log4j.jar $ export CLASSPATH=$CLASSPATH:calculator.jar $ javac -sourcepath. app/calculatorswingapp.java Langkah ke-5 Launch... $ java app.calculatorswingapp
25
26 CS Mengakses EJB dari Servlet! Prasyarat Anda harus melakukan praktikum CS terlebih dahulu... Langkah Langkah ke-1 Jika belum, copy library yang diperlukan ke Context myjava $ cp /home/lab/jboss-3.0.4/client/jbossall-client.jar /home/lab/myjava/web-inf/lib/ $ cp calculator.jar /home/lab/myjava/web-inf/lib/ Langkah ke-2 Tulis calculatorform.html, simpan di-directory yang sudah dipersiapkan. calculatorform.html <html> <body> <script language=javascript> function onadd() document.calculatorform.command.value = + ; document.calculatorform.submit(); function onsubscribe() document.calculatorform.command.value = - ; document.calculatorform.submit(); function onmultiply() document.calculatorform.command.value = * ; document.calculatorform.submit(); function ondivide() document.calculatorform.command.value = / ; document.calculatorform.submit(); </script> <form name=calculatorform method=post action=calculatorservlet> <input type=hidden name=command> <table> <tr> <td>x = </td> <td><input type=text name=x> </tr> <tr> <td>y = </td>
27 <td><input type=text name=y> </tr> <tr> <td colspan=2> <input type=button value= + onclick="javascript:onadd()"> <input type=button value= - onclick="javascript:onsubscribe()"> <input type=button value= * onclick="javascript:onmultiply()"> <input type=button value= / onclick="javascript:ondivide()"> </td> </tr> </table> </form> </body> </html> Langkah ke-3 Tulis CalculatorServlet.java, simpan di-directory yang sudah dipersiapkan WEB- INF/classes/servlet servlet/calculationservlet.java package servlet; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.properties; import javax.naming.initialcontext; import javax.rmi.portableremoteobject; import calculator.*; public class CalculatorServlet extends HttpServlet public void service(httpservletrequest request, HttpServletResponse response) throws IOException, ServletException response.setcontenttype("text/html"); PrintWriter out = response.getwriter(); try String xstr = request.getparameter("x"); double x = Double.parseDouble(xStr); String ystr = request.getparameter("y"); double y = Double.parseDouble(yStr); Properties props = new Properties(); props.setproperty( "java.naming.factory.initial", "org.jnp.interfaces.namingcontextfactory" ); props.setproperty( "java.naming.provider.url", "localhost:1099" ); InitialContext jndicontext = new InitialContext(props);
28 Object ref = jndicontext.lookup("mycalculator"); MyCalculatorHome home = (MyCalculatorHome) PortableRemoteObject.narrow (ref, MyCalculatorHome.class); MyCalculator calc = home.create(); String command = request.getparameter("command"); double result = 0; switch(command.charat(0)) case + : result = calc.add(x,y); break; case - : result = calc.subscribe(x,y); break; case * : result = calc.multiply(x,y); break; case / : result = calc.divide(x,y); break; out.println("<html><body>"); out.println(result); out.println("</body></html>"); catch(exception e) e.printstacktrace(); Langkah ke-4 Compile... $ export CLASSPATH=. $ export CLASSPATH=$CLASSPATH:/home/lab/jboss-3.0.4/client/jbossallclient.jar $ export CLASSPATH=$CLASSPATH:/home/lab/jboss-3.0.4/client/log4j.jar $ export CLASSPATH=$CLASSPATH:/home/lab/jakarta-tomcat /common/lib/servlet.jar $ export CLASSPATH=$CLASSPATH:calculator.jar $ javac -d WEB-INF/classes/ WEB- INF/classes/servlet/CalculatorServlet.java Langkah ke-5 Tulis web.xml yang baru... WEB-INF/web.xml <?xml version="1.0" encoding="iso "?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" " <web-app> <servlet> <servlet-name>calculatorservlet</servlet-name> <servlet-class> servlet.calculatorservlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>calculatorservlet</servlet-name> <url-pattern>/calculatorservlet</url-pattern>
29 </servlet-mapping> </web-app> Langkah ke-6 Terpantau di log dari Tomcat adanya redeployment... Langkah ke-7 Servlet telah di-deploy di atas Tomcat web application server, siap melayani request dari browser. melalui URL :
30 2Enterprise Java Bean Enterprise Java Bean (EJB) adalah teknologi untuk mengembangkan komponen di sisi server yang transactional, scalable dan secure untuk aplikasi enterprise. EJB dirancang untuk mendukung transaction, di mana satu rentetan perubahan data diperlakukan sebagai satu kesatuan. Sebagai contoh, dalam aplikasi e-banking, di mana user melakukan transfer uang dari satu account ke account lain. Dalam operasi ini terdapat dua buah perubahan data setidaknya yaitu pengurangan jumlah uang dari account pengirim, dan penambahan jumlah uang ke account penerima. Dua buah perubahan data ini dipandang sebagai satu kesatuan. Jika salah satu gagal, maka keduanya dibatalkan. EJB dirancang untuk bisa scalable, yaitu untuk bisa menangani jumlah concurent user yang membesar. Scalability bisa dicapai dengan vertical scalability yaitu dengan menambahkan memory maupun processor dari sebuah mesin, atau dengan membuat cluster di mana EJB dideploy di beberapa mesin. EJB juga bisa dirancang untuk secure, dengan menerapkan Role-Based Access Control di mana user-user dengan role tertentu saja yang bisa mengakses komponen-komponen EJB tertentu. Sebagai sebuah teknologi untuk aplikasi enterprise, EJB juga mendukung location transparancy, di mana EJB bisa di-deploy di enterprise application server yang lokasinya bisa di mana saja. Client dari EJB akan menemukan EJB ini dengan melakukan lookup ke directory server. Dalam sistem enterprise, bisa terdapat banyak enterprise application server. Sebagai contoh, sebuah server bisa digunakan untuk men-deploy EJB untuk aplikasi finance di divisi keuangan yang berada di New York. Server lain untuk men-deploy EJB untuk aplikasi inventory di cabang di Singapura. Server lain untuk men-deploy EJB untuk aplikasi order management di Jepang. Untuk mengembangkan EJB, Anda menulis source code, lalu meng-compile-nya. Kemudian Anda menuliskan deployment descriptor. Terakhir Anda men-deploy ke application server. Berbeda dengan Swing atau JSP yang menyediakan user interface, EJB bekerja di back-end. EJB menyediakan service yang dipanggil oleh client. Client dari EJB bisa berupa stand alone application dengan Swing, ataupun web-based application dengan JSP.
31 3Teknologi Pendukung RMI Remote Method Invocation (RMI) digunakan untuk mengembangkan aplikasi terdistribusi dengan Java. Dengan RMI, sebuah obyek yang berada di sebuah JVM, dapat memanggil obyek lain yang berada di JVM yang terpisah. JNDI Java Naming and Directory Interface (JNDI) dalam arsitektur EJB digunakan oleh client untuk menemukan komponen EJB. JDBC Java Database Connectivity (JDBC) digunakan untuk berinteraksi dengan Database. JTS Java Transaction Service (JTS) digunakan untuk menyediakan transaction dalam arsitektur EJB
32 4Tipe EJB Terdapat 3 tipe utama EJB, yaitu SessionBean, EntityBean dan MessageDriven Bean. Entity Bean digunakan untuk merepresentasikan business obyek. Contohnya, entity bean digunakan untuk merepresentasikan Product, Order, Student, Course, Employee, dan To Do. Entity Bean tersimpan di database, jika server mengalami crash dia akan survive. Terdapat dua strategi penyimpanan yaitu Bean Managed Persistence dan Container Managed Persistence. Entity Bean adalah di-share oleh banyak client dan transactional. Session Bean digunakan untuk mereprsentasikan proses, kendali dan alur kerja. Contohnya, session bean digunakan untuk melakukan validasi credit card, mencari ketersediaan jadwal penerbangan, dan menyimpan shopping cart. Session Bean bisa Stateless atau Stateful. SessionBean tidak disimpan di dalam database, dan tidak akan survive jika server mengalami crash. Session bean hanya diakses oleh satu client, dan transactional. MessageDriven Bean digunakan untuk menyediakan layanan asynchronous messaging.
33 5Source Code dan Deployment Descriptor Untuk mengembangkan sebuah Enterprise Java Bean, Anda wajib menuliskan source code untuk Home interface, Remote interface, dan bean implementation. Anda juga wajib menyediakan Deployment descriptor. Home interface ditulis dengan meng-extends EJBHome. Di home interface, Anda mendeklarasikan method untuk meng-create EJB object. Home interface akan diimplementasikan oleh enterprise application server, dan dikenal sebagai EJB home. Remote interface ditulis dengan meng-extends EJBObject. Di remote interface, Anda mendeklarasikan method-method yang disediakan untuk melayani client. Di Session Bean, method-method ini bisa berupa business method. Di Entity Bean, method-method ini bisa berupa setter dan getter method. Remote interface juga akan diimplementasikan oleh enterprise application server. Dalam implementasinya, yang dikenal sebagai EJB object, masing-masing method akan meng-invoke method yang bersesuaian di bean implementation. EJB object menyediakan service-service tambahan seperti security, dan transaction. Bean implementation adalah Java class di mana Anda mengimplementasikan method-method yang telah Anda deklarasikan di Remote interface, sebagaimana juga di Home interface.
34 6Cara Kerja EJB Dalam aplikasi EJB, Anda akan bekerja dengan EJB home, EJB object dan bean implementation. EJB home menyediakan method-method create, finder dan remove untuk EJB Object. EJB Object adalah jembatan antara client dengan bean implementation. Dari sisi client, client tidak bisa meng-create secara langsung bean implementation. Dan client juga tidak pernah berhubungan langsung dengan bean implementation. Client bisa me-lookup Home object menggunakan Java Naming and Directory Interface. Home object adalah class yang di-generate oleh enterprise application server, yang meng-implement Home interface. Melalui Home object ini, client meng-create EJB Object. Untuk Entity Bean, Home object juga mempunyai finder method dan remove method. Selanjutnya client bisa meng-invoke method-method di EJB Object. EJB Object adalah class yang di-generate oleh enterprise application server, yang meng-implement Remote interface. Dalam implementasi dari method-method yang dideklarasikan di Remote interface, akan diinvoke method bersesuaian di bean implementation.
35 7Stateless Session Bean Stateless Session Bean dirancang untuk menyediakan layanan kepada client, tanpa kemampuan memegang conversational state. Layanan disediakan dengan menuliskan method-method yang akan di-invoke oleh client. Stateless Session Bean disediakan oleh enterprise application server dari sebuah pool. Saat sebuah client meng-create Stateless Session Bean, ia tidak bermakna sebuah instance baru dicreate. Enterprise application server bisa saja menggunakan instance yang tersedia di pool. Dan instance ini selalu ada di dalam pool, kecuali saat menjalankan sebuah method untuk sebuah client. Setiap kali sebuah client memanggil sebuah method dari Stateless Session Bean, maka sebuah instance akan bekerja secara khusus untuk client tsb. Saat method tsb selesai dijalankan, instance tsb akan dikembalikan ke pool. Jika sebuah client memanggil dua method secara berurutan, tidak bisa dipastikan bahwa keduanya dilayani oleh instance yang sama. Stateless Session Bean tidak akan menyimpan conversational-state. Secara sederhana ini bermakna, instance variable dari Stateless Session Bean tidak bisa digunakan untuk memegang data yang bersifat spesifik untuk sebuah client. Jika sebuah client memanggil sebuah method, dan di method tersebut memberi nilai ke sebuah instance variable, maka bisa saja terjadi, saat memanggil method berikutnya, client akan menemukan nilai dari instance variable tsb berbeda. Ini bisa dipahami, karena dua method tersebut bisa saja dilayani oleh dua instance yang berbeda. Untuk mengembangkan sebuah Stateless Session Bean, Anda wajib menuliskan source code untuk Home interface, Remote interface, dan bean implementation. Anda juga wajib menyediakan Deployment descriptor.
36 CS Sebuah praktikum yang menunjukkan tingkah laku Stateless Session Bean Persiapan Jalankan JBoss jika belum Buat sebuah directory untuk bekerja misalnya /home/lab/myjava Langkah Langkah ke-1 Tulis MyFruitHome.java, simpan di-directory yang sudah dipersiapkan. MyFruitHome.java import java.rmi.remoteexception; import javax.ejb.createexception; import javax.ejb.ejbhome; public interface MyFruitHome extends EJBHome public MyFruit create() throws RemoteException, CreateException; Langkah ke-2 Tulis MyFruit.java, simpan di directory yang sudah dipersiapkan MyFruit.java import javax.ejb.ejbobject; import java.rmi.remoteexception; public interface MyFruit extends EJBObject public void setfruit(string fruit) throws RemoteException; public String getfruit() throws RemoteException; Langkah ke-3 Tulis MyFruitBean.java, simpan di directory yang sudah disiapkan MyFruitBean.java import java.rmi.remoteexception; import javax.ejb.sessionbean; import javax.ejb.sessioncontext; public class MyFruitBean implements SessionBean public String fruit; public void setfruit(string fruit)
37 this.fruit = fruit; public String getfruit() return this.fruit; public void ejbcreate() public void ejbremove() public void ejbactivate() public void ejbpassivate() public void setsessioncontext(sessioncontext sc) Langkah ke-4 Buka sebuah terminal dan change directory ke directory di atas Langkah ke-5 Compile... $ export CLASSPATH=.:/home/lab/jboss-3.0.4/client/jbossall-client.jar $ javac *.java Langkah ke-6 Buat sub-directory META-INF Langkah ke-7 Tulis ejb-jar.xml, simpan ke sub directory META-INF META-INF/ejb-jar.xml <?xml version="1.0" encoding="utf-8"?> <ejb-jar> <description>enterprise Java Lab</description> <display-name>enterprise Java Lab</display-name> <enterprise-beans> <session> <ejb-name>mystatelessfruit</ejb-name> <home>myfruithome</home> <remote>myfruit</remote> <ejb-class>myfruitbean</ejb-class> <session-type>stateless</session-type> <transaction-type>bean</transaction-type> </session> </enterprise-beans> </ejb-jar> Langkah ke-8 Gabungkan ke dalam sebuah jar $ jar cvf myfruit.jar MyFruitHome.class MyFruit.class MyFruitBean.class META-INF/ adding: META-INF/ (in=0) (out=0) (stored 0%) adding: META-INF/MANIFEST.MF (in=56) (out=56) (stored 0%) adding: MyFruitHome.class (in=245) (out=180) (deflated 26%) adding: MyFruit.class (in=270) (out=186) (deflated 31%)
38 adding: MyFruitBean.class (in=732) (out=352) (deflated 51%) adding: META-INF/ (in=0) (out=0) (stored 0%) adding: META-INF/ejb-jar.xml (in=524) (out=224) (deflated 57%) Total: (in = 1816) (out = 1751) (deflated 3%) Langkah ke-9 Copy ke dalam deployment directory dari jboss $ cp myfruit.jar /home/lab/jboss-3.0.4/server/default/deploy/ Terpantau di log dari JBoss : 04:46:41,925 INFO [MainDeployer] Starting deployment of package: file:/home/lab/jboss-3.0.4/server/default/deploy/myfruit.jar 04:46:42,071 INFO [EjbModule] Creating 04:46:42,167 INFO [EjbModule] Deploying MyStatelessFruit 04:46:42,239 INFO [EjbModule] Created 04:46:42,240 INFO [EjbModule] Starting 04:46:42,445 INFO [EjbModule] Started 04:46:42,446 INFO [MainDeployer] Deployed package: file:/home/lab/jboss-3.0.4/server/default/deploy/myfruit.jar Module EJB telah di-deploy di atas JBoss enterprise application server dan siap melayani request dari client.
39 CS untuk mengamati tingkah laku Stateless Session Bean... Persiapan Buat sebuah directory untuk bekerja, misalnya /home/lab/myjava Langkah Langkah ke-1 Tulis FruitApp.java, simpan di-directory yang sudah dipersiapkan. FruitApp.java public class FruitApp public static void main(string[] args) for(int i=0;i<1000;i++) MyThread thread = new MyThread(i); thread.start(); Langkah ke-2 Tulis MyThread.java, simpan di-directory yang sudah dipersiapkan. MyThread.java import java.util.properties; import javax.naming.initialcontext; import javax.rmi.portableremoteobject; public class MyThread extends Thread private static final String[] fruitarray = "Apple", "Avocado", "Banana", "Durian", "Grape", "Lychee", "Mango", "Orange", "Starfruit", "Soursop" ; private int threadno; public MyThread(int threadno) super("thread-" + threadno); this.threadno = threadno; public void run() try Properties props = new Properties(); props.setproperty( "java.naming.factory.initial", "org.jnp.interfaces.namingcontextfactory" );
40 props.setproperty( "java.naming.provider.url", "localhost:1099" ); InitialContext jndicontext = new InitialContext(props); Object ref = jndicontext.lookup("mystatelessfruit"); MyFruitHome home = (MyFruitHome) PortableRemoteObject.narrow (ref, MyFruitHome.class); MyFruit ejb = home.create(); String fruitinthread = fruitarray[threadno%10]; ejb.setfruit(fruitinthread); yield(); try int t = (int)(100*math.random()); sleep(t); catch(interruptedexception ie) ie.printstacktrace(); String fruitinejb = ejb.getfruit(); System.out.println(getName() + " : in Thread value = " + fruitinthread + " in EJB value = " + fruitinejb + (fruitinejb.equals(fruitinthread)? "":" FRUIT IS CHANGED")); catch(exception e) e.printstacktrace(); Langkah ke-3 Buka sebuah terminal, dan change directory ke directory kerja tersebut Langkah ke-4 Compile... $ export CLASSPATH=. $ export CLASSPATH=$CLASSPATH:/home/lab/jboss-3.0.4/client/jbossallclient.jar $ export CLASSPATH=$CLASSPATH:/home/lab/jboss-3.0.4/client/log4j.jar $ export CLASSPATH=$CLASSPATH:myfruit.jar $ javac FruitApp.java akan dihasilkan FruitApp.class dan MyThread.class Langkah ke-5 Launch... $ java FruitApp
41 Thread-3 : in Thread value = Durian in EJB value = Durian Thread-5 : in Thread value = Lychee in EJB value = Durian FRUIT IS CHANGED Thread-2 : in Thread value = Banana in EJB value = Banana Thread-82 : in Thread value = Banana in EJB value = Grape FRUIT IS CHANGED Thread-84 : in Thread value = Grape in EJB value = Grape Thread-85 : in Thread value = Lychee in EJB value = Grape FRUIT IS CHANGED Thread-83 : in Thread value = Durian in EJB value = Starfruit FRUIT IS CHANGED Thread-88 : in Thread value = Starfruit in EJB value = Starfruit Thread-87 : in Thread value = Orange in EJB value = Grape FRUIT IS CHANGED Thread-72 : in Thread value = Banana in EJB value = Banana
42 8Statefull Session Bean Statefull Session Bean dirancang untuk menyediakan layanan kepada client, dengan kemampuan memegang converstational state. Layanan disediakan dengan menuliskan method-method yang akan di-invoke oleh client. Conversational state bisa ditangani melalui member variable di bean implementation. Statefull Session Bean tidak dikelola oleh enterprise application server dalam sebuah pool. Sebuah Statefull Session Bean selalu di-create untuk sebuah client, dan hanya diperuntukkan untuk sebuah client tertentu. Ia akan di-destroy jika dibuang oleh client. Saat client memanggil method dari Statefull Session Bean ia bisa menyimpan data ke member variable. Dan data ini akan tetap dipegang oleh Stateful Session Bean. Untuk mengembangkan sebuah Statefull Session Bean, Anda wajib menuliskan source code untuk Home interface, Remote interface, dan bean implementation. Anda juga wajib menyediakan Deployment descriptor.
43 CS Sebuah praktikum yang menunjukkan tingkah laku Statefull Session Bean Persiapan Jalankan JBoss jika belum Buat sebuah directory untuk bekerja misalnya /home/lab/myjava Langkah Langkah ke-1 Tulis MyFruitHome.java, simpan di-directory yang sudah dipersiapkan. MyFruitHome.java import java.rmi.remoteexception; import javax.ejb.createexception; import javax.ejb.ejbhome; public interface MyFruitHome extends EJBHome public MyFruit create() throws RemoteException, CreateException; Langkah ke-2 Tulis MyFruit.java, simpan di directory yang sudah dipersiapkan MyFruit.java import javax.ejb.ejbobject; import java.rmi.remoteexception; public interface MyFruit extends EJBObject public void setfruit(string fruit) throws RemoteException; public String getfruit() throws RemoteException; Langkah ke-3 Tulis MyFruitBean.java, simpan di directory yang sudah disiapkan MyFruitBean.java import java.rmi.remoteexception; import javax.ejb.sessionbean; import javax.ejb.sessioncontext; public class MyFruitBean implements SessionBean public String fruit; public void setfruit(string fruit)
44 this.fruit = fruit; public String getfruit() return this.fruit; public void ejbcreate() public void ejbremove() public void ejbactivate() public void ejbpassivate() public void setsessioncontext(sessioncontext sc) Langkah ke-4 Buka sebuah terminal dan change directory ke directory di atas Langkah ke-5 Compile... $ export CLASSPATH=.:/home/lab/jboss-3.0.4/client/jbossall-client.jar $ javac *.java Langkah ke-6 Buat sub-directory META-INF Langkah ke-7 Tulis ejb-jar.xml, simpan ke sub directory META-INF META-INF/ejb-jar.xml <?xml version="1.0" encoding="utf-8"?> <ejb-jar> <description>enterprise Java Lab</description> <display-name>enterprise Java Lab</display-name> <enterprise-beans> <session> <ejb-name>mystatefulfruit</ejb-name> <home>myfruithome</home> <remote>myfruit</remote> <ejb-class>myfruitbean</ejb-class> <session-type>stateful</session-type> <transaction-type>bean</transaction-type> </session> </enterprise-beans> </ejb-jar> Langkah ke-8 Gabungkan ke dalam sebuah jar $ jar cvf myfruit.jar MyFruitHome.class MyFruit.class MyFruitBean.class META-INF/ adding: META-INF/ (in=0) (out=0) (stored 0%) adding: META-INF/MANIFEST.MF (in=56) (out=56) (stored 0%) adding: MyFruitHome.class (in=245) (out=180) (deflated 26%) adding: MyFruit.class (in=270) (out=186) (deflated 31%)
45 adding: MyFruitBean.class (in=732) (out=352) (deflated 51%) adding: META-INF/ (in=0) (out=0) (stored 0%) adding: META-INF/ejb-jar.xml (in=522) (out=224) (deflated 57%) Total: (in = 1814) (out = 1751) (deflated 3%) Langkah ke-9 Copy ke dalam deployment directory dari jboss $ cp myfruit.jar /home/lab/jboss-3.0.4/server/default/deploy/ Terpantau di log dari JBoss : 04:51:53,440 INFO [MainDeployer] Starting deployment of package: file:/home/lab/jboss-3.0.4/server/default/deploy/myfruit.jar 04:51:53,512 INFO [EjbModule] Creating 04:51:53,546 INFO [EjbModule] Deploying MyStatefulFruit 04:51:53,873 INFO [EjbModule] Created 04:51:53,874 INFO [EjbModule] Starting 04:51:54,056 INFO [EjbModule] Started 04:51:54,057 INFO [MainDeployer] Deployed package: file:/home/lab/jboss-3.0.4/server/default/deploy/myfruit.jar Module EJB telah di-deploy di atas JBoss enterprise application server dan siap melayani request dari client.
46 CS untuk mengamati tingkah laku Statefull Session Bean... Persiapan Buat sebuah directory untuk bekerja, misalnya /home/lab/myjava Langkah Langkah ke-1 Tulis FruitApp.java, simpan di-directory yang sudah dipersiapkan. FruitApp.java public class FruitApp public static void main(string[] args) for(int i=0;i<1000;i++) MyThread thread = new MyThread(i); thread.start(); Langkah ke-2 Tulis MyThread.java, simpan di-directory yang sudah dipersiapkan. MyThread.java import java.util.properties; import javax.naming.initialcontext; import javax.rmi.portableremoteobject; public class MyThread extends Thread private static final String[] fruitarray = "Apple", "Avocado", "Banana", "Durian", "Grape", "Lychee", "Mango", "Orange", "Starfruit", "Soursop" ; private int threadno; public MyThread(int threadno) super("thread-" + threadno); this.threadno = threadno; public void run() try Properties props = new Properties(); props.setproperty( "java.naming.factory.initial", "org.jnp.interfaces.namingcontextfactory" ); props.setproperty(
47 "java.naming.provider.url", "localhost:1099" ); InitialContext jndicontext = new InitialContext(props); Object ref = jndicontext.lookup("mystatefulfruit"); MyFruitHome home = (MyFruitHome) PortableRemoteObject.narrow (ref, MyFruitHome.class); MyFruit ejb = home.create(); String fruitinthread = fruitarray[threadno%10]; ejb.setfruit(fruitinthread); yield(); try int t = (int)(100*math.random()); sleep(t); catch(interruptedexception ie) ie.printstacktrace(); String fruitinejb = ejb.getfruit(); System.out.println(getName() + " : in Thread value = " + fruitinthread + " in EJB value = " + fruitinejb + (fruitinejb.equals(fruitinthread)? "":" FRUIT IS CHANGED")); catch(exception e) e.printstacktrace(); Langkah ke-3 Buka sebuah terminal, dan change directory ke directory kerja tersebut Langkah ke-4 Compile... $ export CLASSPATH=. $ export CLASSPATH=$CLASSPATH:/home/lab/jboss-3.0.4/client/jbossallclient.jar $ export CLASSPATH=$CLASSPATH:/home/lab/jboss-3.0.4/client/log4j.jar $ export CLASSPATH=$CLASSPATH:myfruit.jar $ javac FruitApp.java akan dihasilkan FruitApp.class dan MyThread.class Langkah ke-5 Launch... $ java FruitApp
48 Thread-233 : in Thread value = Durian in EJB value = Durian Thread-9 : in Thread value = Soursop in EJB value = Soursop Thread-235 : in Thread value = Lychee in EJB value = Lychee Thread-11 : in Thread value = Avocado in EJB value = Avocado Thread-241 : in Thread value = Avocado in EJB value = Avocado Thread-237 : in Thread value = Orange in EJB value = Orange Thread-240 : in Thread value = Apple in EJB value = Apple Thread-61 : in Thread value = Avocado in EJB value = Avocado
49 9Bean Managed Persistence Entity Bean Entity Bean dikembangkan untuk merepresentasikan obyek bisnis. Obyek bisnis ini lumrahnya disimpan di dalam database. Sebuah Entity Bean merepresentasikan sebuah table dalam database. Untuk Bean Managed Persistence, Entity Bean bertanggung jawab untuk menyimpan dan membaca data dari database, sehingga data yang dipegang oleh Entity Bean selalu synch dengan yang ada di database. Untuk mengembangkan sebuah Statefull Session Bean, Anda wajib menuliskan source code untuk Home interface, Remote interface, dan bean implementation. Anda juga wajib menyediakan Deployment descriptor. Di dalam bean implementation, mesti dituliskan code-code untuk mengakses dengan database.
50 CS Sebuah praktikum dengan Entity Bean yang menggunakan Bean Managed Persistence... Persiapan Jalankan JBoss jika belum Buat sebuah directory untuk bekerja misalnya /home/lab/myjava Langkah Langkah ke-1 Tulis EmployeeHome.java, simpan di sub-directory employee di bawah directory yang sudah dipersiapkan. employee/employeehome.java package employee; import java.util.*; import java.rmi.remoteexception; import javax.ejb.*; public interface EmployeeHome extends EJBHome public Employee create(string id, String name, String department, String jobtitle, Date hiredate, boolean ispermanentemployee, double salary) throws RemoteException, CreateException; public Employee create(string id, String name) throws RemoteException, CreateException; public Employee findbyprimarykey(string id) throws RemoteException, FinderException; public Enumeration findbydepartment(string department) throws RemoteException, FinderException; Langkah ke-2 Tulis Employee.java, simpan di sub-directory employee di bawah directory yang sudah dipersiapkan. employee/employee.java package employee; import java.util.*; import java.rmi.*; import javax.ejb.*; public interface Employee extends EJBObject public String getid()
51 throws RemoteException; public void setname(string name) throws RemoteException; public String getname() throws RemoteException; public void setdepartment(string department) throws RemoteException; public String getdepartment() throws RemoteException; public void setjobtitle(string jobtitle) throws RemoteException; public String getjobtitle() throws RemoteException; public void sethiredate(date hiredate) throws RemoteException; public Date gethiredate() throws RemoteException; public void setpermanentemployee(boolean permanentemployee) throws RemoteException; public boolean getpermanentemployee() throws RemoteException; public void setsalary(double salary) throws RemoteException; public double getsalary() throws RemoteException; Langkah ke-3 Tulis EmployeeBean.java, simpan di sub-directory employee di bawah directory yang sudah dipersiapkan. employee/employeebean.java package employee; import javax.ejb.*; import java.rmi.*; import java.sql.connection; import java.sql.preparedstatement; import java.sql.sqlexception; import java.sql.resultset; import java.util.*; import javax.sql.*; import javax.naming.*; public class EmployeeBean implements EntityBean /* DATA */ private String id; private String name; private String department; private String jobtitle; private Date hiredate; private boolean permanentemployee; private double salary; public String getid() return this.id;
52 public void setname(string name) this.name = name; public String getname() return this.name; public void setdepartment(string department) this.department = department; public String getdepartment() return this.department; public void setjobtitle(string jobtitle) this.jobtitle = jobtitle; public String getjobtitle() return this.jobtitle; public void sethiredate(date hiredate) this.hiredate = hiredate; public Date gethiredate() return this.hiredate; public void setpermanentemployee(boolean permanentemployee ) this.permanentemployee = permanentemployee; public boolean getpermanentemployee() return this.permanentemployee; public void setsalary(double salary) this.salary = salary; public double getsalary() return this.salary; /* PROCESS */ 0); public String ejbcreate(string id, String name) throws CreateException return ejbcreate(id, name, null, null, null, false, public String ejbcreate(string id, String name,
53 salary) throws CreateException String department, String jobtitle, Date hiredate, boolean permanentemployee, double this.id = id; this.name = name; this.department = department; this.jobtitle = jobtitle; this.hiredate=hiredate; this.permanentemployee = permanentemployee; this.salary = salary; Connection conn = null; try conn = getconnection(); String sqlinsert = "INSERT INTO EMPLOYEE_TBL VALUES(?,?,?,?,?,?,?)"; PreparedStatement stmt = conn.preparestatement(sqlinsert); stmt.setstring(1, this.id); stmt.setstring(2, this.name); stmt.setstring(3, this.department); stmt.setstring(4, this.jobtitle); stmt.setdate(5, new java.sql.date(this.hiredate.gettime())); stmt.setboolean(6, this.permanentemployee); stmt.setdouble(7, this.salary); stmt.executeupdate(); return new String(id); catch(exception e) throw new CreateException(e.toString()); finally try if(conn!=null)conn.close(); catch(sqlexception sqle) sqle.printstacktrace(); public void ejbpostcreate(string id, String name) throws CreateException public void ejbpostcreate(string id, String name, String department, String jobtitle, Date hiredate, boolean permanentemployee, double salary) throws CreateException
54 public String ejbfindbyprimarykey(string id) throws FinderException String pk = null; Connection conn = null; try conn = getconnection(); String sqlselect = "SELECT * FROM EMPLOYEE_TBL " + "WHERE ID =?"; PreparedStatement stmt = conn.preparestatement(sqlselect); stmt.setstring(1, id); ResultSet rs = stmt.executequery(); if(rs.next()) pk = rs.getstring("id"); return pk; catch(exception e) throw new FinderException(e.toString()); finally try if(conn!=null)conn.close(); catch(sqlexception sqle) sqle.printstacktrace(); public Enumeration ejbfindbydepartment(string department) throws FinderException Vector pks = new Vector(); Connection conn = null; try conn = getconnection(); String sqlselect = "SELECT * FROM EMPLOYEE_TBL " + "WHERE DEPARTMENT =?"; PreparedStatement stmt = conn.preparestatement(sqlselect); stmt.setstring(1, department); ResultSet rs = stmt.executequery(); while(rs.next()) String pk = rs.getstring("id"); pks.addelement(pk); return pks.elements();
55 catch(exception e) throw new FinderException(e.toString()); finally try if(conn!=null)conn.close(); catch(sqlexception sqle) sqle.printstacktrace(); public void ejbremove() throws RemoveException String pk = (String)entityContext.getPrimaryKey(); Connection conn = null; try conn = getconnection(); String sqldelete = "DELETE FROM EMPLOYEE_TBL " + "WHERE " + "ID =?"; PreparedStatement stmt = conn.preparestatement(sqldelete); stmt.setstring(1, pk); stmt.executeupdate(); catch(exception e) throw new RemoveException(e.toString()); finally try if(conn!=null)conn.close(); catch(sqlexception sqle) sqle.printstacktrace(); public void ejbstore() throws RemoteException String pk = (String)entityContext.getPrimaryKey(); Connection conn = null; try conn = getconnection(); String sqlupdate = "UPDATE EMPLOYEE_TBL " + "SET " + "NAME =?,"
56 + "DEPARTMENT =?," + "JOB_TITLE =?," + "HIRE_DATE =?," + "PERMANENT_EMPLOYEE =?," + "SALARY =? " + "WHERE " + "ID =?"; PreparedStatement stmt = conn.preparestatement(sqlupdate); stmt.setstring(7, pk); stmt.setstring(1, this.name); stmt.setstring(2, this.department); stmt.setstring(3, this.jobtitle); stmt.setdate(4, new java.sql.date(this.hiredate.gettime())); stmt.setboolean(5, this.permanentemployee); stmt.setdouble(6, this.salary); stmt.executeupdate(); catch(exception e) throw new RemoteException(e.toString()); finally try if(conn!=null)conn.close(); catch(sqlexception sqle) sqle.printstacktrace(); public void ejbload() throws RemoteException String id = (String)entityContext.getPrimaryKey(); Connection conn = null; try conn = getconnection(); String sqlselect = "SELECT * FROM EMPLOYEE_TBL " + "WHERE ID =?"; PreparedStatement stmt = conn.preparestatement(sqlselect); stmt.setstring(1, id); ResultSet rs = stmt.executequery(); if(rs.next()) this.id = rs.getstring("id"); this.name = rs.getstring("name"); this.department = rs.getstring("department"); this.jobtitle = rs.getstring("job_title"); this.hiredate = rs.getdate("hire_date"); this.permanentemployee = rs.getboolean("permanent_employee"); this.salary = rs.getdouble("salary");
57 catch(exception e) throw new RemoteException(e.toString()); finally try if(conn!=null)conn.close(); catch(sqlexception sqle) sqle.printstacktrace(); /* CONTROL */ public void ejbactivate() public void ejbpassivate() transient private EntityContext entitycontext = null; transient private DataSource datasource = null; private Connection getconnection() throws SQLException Connection conn = datasource.getconnection(); return conn; public void setentitycontext(entitycontext entitycontext) this.entitycontext = entitycontext; try Context context = new InitialContext(); datasource = (DataSource)context.lookup("java:/MySqlDS"); catch (NamingException e) e.printstacktrace(); public void unsetentitycontext() this.entitycontext = null; this.datasource = null; Langkah ke-4 Buka sebuah terminal dan change directory ke directory di atas Langkah ke-5 Compile... $ export CLASSPATH=.:/home/lab/jboss-3.0.4/client/jbossall-client.jar
58 $ javac employee/* Langkah ke-6 Buat sub-directory META-INF Langkah ke-7 Tulis ejb-jar.xml, simpan ke sub directory META-INF META-INF/ejb-jar.xml <?xml version="1.0"?> <!DOCTYPE ejb-jar PUBLIC -//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN > <ejb-jar> <description>enterprise Java Lab</description> <display-name>enterprise Java Lab</display-name> <enterprise-beans> <entity> <ejb-name>employee</ejb-name> <home>employee.employeehome</home> <remote>employee.employee</remote> <ejb-class>employee.employeebean</ejb-class> <persistence-type>bean</persistence-type> <prim-key-class>java.lang.string</prim-key-class> <reentrant>false</reentrant> </entity> </enterprise-beans> </ejb-jar> Langkah ke-8 Gabungkan ke dalam sebuah jar $ jar cvf employee.jar employee/*.class META-INF/ adding: META-INF/ (in=0) (out=0) (stored 0%) adding: META-INF/MANIFEST.MF (in=56) (out=56) (stored 0%) adding: employee/employeebean.class (in=5662) (out=2763) (deflated 51%) adding: employee/employee.class (in=711) (out=341) (deflated 52%) adding: employee/employeehome.class (in=728) (out=312) (deflated 57%) adding: META-INF/ (in=0) (out=0) (stored 0%) adding: META-INF/ejb-jar.xml (in=717) (out=325) (deflated 54%) Total: (in = 7863) (out = 4610) (deflated 41%) Langkah ke-9 Copy ke dalam deployment directory dari jboss $ cp employee.jar /home/lab/jboss-3.0.4/server/default/deploy/ Terpantau di log dari JBoss : 22:12:08,768 INFO [MainDeployer] Starting deployment of package: file:/home/lab/jboss-3.0.4/server/default/deploy/employee.jar 22:12:08,922 INFO [EjbModule] Creating 22:12:08,952 INFO [EjbModule] Deploying Employee 22:12:09,085 INFO [EjbModule] Created 22:12:09,086 INFO [EjbModule] Starting
59 22:12:09,176 INFO [EjbModule] Started 22:12:09,177 INFO [MainDeployer] Deployed package: file:/home/lab/jboss-3.0.4/server/default/deploy/employee.jar Module EJB telah di-deploy di atas JBoss enterprise application server dan siap melayani request dari client.
60 CS untuk mendeploy Datasource ke mysql... Persiapan Buat sebuah directory untuk bekerja, misalnya /home/lab/myjava Langkah Langkah ke-1 Buka sebuah terminal. Lalu melalui terminal tersebut jalankan mysql client $ mysql -uekobs -pj2ee MYAPP_DB Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 to server version: Type help; or \h for help. Type \c to clear the buffer. mysql> Langkah ke-2 melalui mysql client, create table yang dibutuhkan... mysql> create table EMPLOYEE_TBL(ID varchar(10) primary key, NAME varchar(40), DEPARTMENT varchar(20),job_title varchar(30), HIRE_DATE date, PERMANENT_EMPLOYEE bool, SALARY float); Query OK, 0 rows affected (0.00 sec) Langkah ke-3 Tulis mysql-service.xml mysql-service.xml <?xml version="1.0" encoding="utf-8"?> <server> <mbean code="org.jboss.resource.connectionmanager.localtxconnectionmanager" name="jboss.jca:service=localtxcm,name=mysqlds"> <depends optional-attribute-name="managedconnectionfactoryname"> <!--embedded mbean--> <mbean code="org.jboss.resource.connectionmanager.rardeployment" name="jboss.jca:service=localtxds,name=mysqlds"> <attribute name="jndiname">mysqlds</attribute> <attribute name="managedconnectionfactoryproperties"> <properties> <config-property name="connectionurl" type="java.lang.string"> jdbc:mysql://localhost:3306/myapp_db </config-property> <config-property name="driverclass" type="java.lang.string">
61 org.gjt.mm.mysql.driver </config-property> <config-property name="username" type="java.lang.string"> ekobs </config-property> <config-property name="password" type="java.lang.string"> j2ee </config-property> </properties> </attribute> <depends optional-attribute-name="oldrardeployment"> jboss.jca:service=rardeployment,name=jboss LocalTransaction JDBC Wrapper </depends> </mbean> </depends> <depends optional-attribute-name="managedconnectionpool"> <mbean code="org.jboss.resource.connectionmanager.jbossmanagedconnectionpool" name="jboss.jca:service=localtxpool,name=mysqlds"> <attribute name="minsize">0</attribute> <attribute name="maxsize">50</attribute> <attribute name="blockingtimeoutmillis">5000</attribute> <attribute name="idletimeoutminutes">15</attribute> <attribute name="criteria">bycontainer</attribute> </mbean> </depends> <depends optional-attribute-name="cachedconnectionmanager"> jboss.jca:service=cachedconnectionmanager </depends> <attribute name="transactionmanager">java:/transactionmanager</attribute> </mbean> </server> Langkah ke-4 Copy ke dalam deployment directory dari jboss, termasuk JDBC driver yang dibutuhkan... $ cp /home/lab/mm.mysql-2.0.8/mm.mysql bin.jar /home/lab/jboss /server/default/deploy/ $ cp mysql-service.xml /home/lab/jboss-3.0.4/server/default/deploy/ Terpantau di log dari JBoss : 22:27:19,923 INFO [MainDeployer] Starting deployment of package: file:/home/lab/jboss-3.0.4/server/default/deploy/mysql-ser vice.xml 22:27:19,950 WARN [ServiceController] jboss.jca:service=localtxds,name=mysqlds does not implement any Service methods 22:27:19,951 INFO [JBossManagedConnectionPool] Creating 22:27:19,951 INFO [JBossManagedConnectionPool] Created 22:27:19,952 INFO [LocalTxConnectionManager] Creating 22:27:19,958 INFO [LocalTxConnectionManager] Created 22:27:19,959 INFO [JBossManagedConnectionPool] Starting
62 22:27:19,959 INFO [JBossManagedConnectionPool] Started 22:27:19,960 INFO [LocalTxConnectionManager] Starting 22:27:19,975 INFO [MySqlDS] Bound connection factory for resource adapter JBoss LocalTransaction JDBC Wrapper to JNDI nam e java:/mysqlds 22:27:19,976 INFO [LocalTxConnectionManager] Started 22:27:19,976 INFO [MainDeployer] Deployed package: file:/home/lab/jboss-3.0.4/server/default/deploy/mysql-service.xml
63 CS untuk mengakses Entity Bean... Persiapan Buat sebuah directory untuk bekerja, misalnya /home/lab/myjava Langkah Langkah ke-1 Tulis EmployeeApp.java, simpan di sub-directory app di bawah directory yang sudah dipersiapkan. app/employeeapp.java package app; import employee.*; import java.rmi.*; import java.util.*; import javax.ejb.*; import javax.naming.*; import javax.rmi.portableremoteobject; import java.io.*; import java.text.*; public class EmployeeApp public static void main(string[] args) try EmployeeApp app = new EmployeeApp(); char command; do System.out.println(); System.out.println("Press Enter to continue..."); app.readline(); System.out.println("Available command : "); System.out.println("C Create a new record"); System.out.println("I View by Id"); System.out.println("D View by Department"); System.out.println("M Modify a record"); System.out.println("R Remove a record"); System.out.println("X Exit"); System.out.println(); command = app.readline("press C, I, D, M, R or X").toUpperCase().charAt(0); System.out.println(); switch(command)
64 case C : app.create();break; case I : app.viewbyid();break; case D : app.viewbydepartment();break; case M : app.modify();break; case R : app.remove();break; case X : break; default : System.out.println("You press invalid key"); while(command!= X ); catch(exception e) System.out.println(e); private EmployeeHome home; public EmployeeApp() throws CreateException, NamingException, RemoteException Properties props = new Properties(); props.setproperty( "java.naming.factory.initial", "org.jnp.interfaces.namingcontextfactory" ); props.setproperty( "java.naming.provider.url", "localhost:1099" ); InitialContext jndicontext = new InitialContext(props); Object ref = jndicontext.lookup("employee"); home = (EmployeeHome) PortableRemoteObject.narrow (ref, EmployeeHome.class); in = new BufferedReader(new InputStreamReader(System.in)); private SimpleDateFormat format = new SimpleDateFormat("ddMMyyyy"); private BufferedReader in; private void readline() throws IOException in.readline(); private String readline(string parametername) throws IOException System.out.print(parameterName + " : "); return in.readline(); public void create() throws IOException, ParseException, CreateException, RemoteException System.out.println("Creating... ");
65 Employee employee = home.create ( readline("id"), readline("name"), readline("department"), readline("job Title"), format.parse(readline("hire Date (ddmmyyyy)")), Boolean.valueOf( readline("permanent Employee (True/False)")).booleanValue(), Double.parseDouble(readLine("Salary")) ); public void modify() throws IOException, ParseException, FinderException, RemoteException String id = readline("id"); Employee employee = home.findbyprimarykey(id); employee.setname(readline("name")); employee.setdepartment(readline("department")); employee.setjobtitle(readline("job Title")); employee.sethiredate(format.parse(readline("hire Date (ddmmyyyy)"))); employee.setpermanentemployee( Boolean.valueOf( readline("permanent Employee (True/False)")).booleanValue()); employee.setsalary(double.parsedouble(readline("salary"))); public void remove() throws IOException, ParseException, FinderException, RemoteException, RemoveException String id = readline("id"); Employee employee = home.findbyprimarykey(id); employee.remove(); public void viewbyid() throws IOException, FinderException, RemoteException String id = readline("id"); Employee employee = home.findbyprimarykey(id); System.out.println("Name : " + employee.getname()); System.out.println("Department : " + employee.getdepartment()); System.out.println("Job Title : " + employee.getjobtitle()); System.out.println("Hire Date : " + employee.gethiredate()); System.out.println("Permanent Employee : " + employee.getpermanentemployee()); System.out.println("Salary : " + employee.getsalary()); public void viewbydepartment() throws IOException, FinderException, RemoteException String department = readline("department"); Enumeration employees = home.findbydepartment(department); while(employees.hasmoreelements())
66 Employee employee = (Employee) employees.nextelement(); System.out.print("Name : " + employee.getname()); System.out.print(" "); System.out.println("Job Title : " + employee.getjobtitle()); Langkah ke-2 Buka sebuah terminal, dan change directory ke directory kerja tersebut Langkah ke-3 Compile... $ export CLASSPATH=. $ export CLASSPATH=$CLASSPATH:/home/lab/jboss-3.0.4/client/jbossallclient.jar $ export CLASSPATH=$CLASSPATH:/home/lab/jboss-3.0.4/client/log4j.jar $ export CLASSPATH=$CLASSPATH:employee.jar $ javac app/employeeapp.java akan dihasilkan app/employeeapp.class Langkah ke-4 Launch... $ java app.employeeapp Press Enter to continue... Available command : C Create a new record I View by Id D View by Department M Modify a record R Remove a record X Exit Press C, I, D, M, R or X :
67 10Container Managed Persistence Entity Bean Untuk Bean Managed Persistence, EJB container bertanggung jawab untuk menyimpan dan membaca data dari database, sehingga data yang dipegang oleh Entity Bean selalu synch dengan yang ada di database. Untuk mengembangkan sebuah CMP Entity Bean, Anda wajib menuliskan source code untuk Home interface, Remote interface, dan bean implementation. Anda juga wajib menyediakan Deployment descriptor.
68 CS Sebuah praktikum dengan Entity Bean yang menggunakan Container Managed Persistence... Persiapan Jalankan JBoss jika belum Buat sebuah directory untuk bekerja misalnya /home/lab/myjava Langkah Langkah ke-1 Tulis EmployeeHome.java, simpan di sub-directory employee di bawah directory yang sudah dipersiapkan. employee/employeehome.java package employee; import java.util.*; import java.rmi.remoteexception; import javax.ejb.*; public interface EmployeeHome extends EJBHome public Employee create(string id, String name, String department, String jobtitle, Date hiredate, boolean ispermanentemployee, double salary) throws RemoteException, CreateException; public Employee create(string id, String name) throws RemoteException, CreateException; public Employee findbyprimarykey(string id) throws RemoteException, FinderException; public Enumeration findbydepartment(string department) throws RemoteException, FinderException; Langkah ke-2 Tulis Employee.java, simpan di sub-directory employee di bawah directory yang sudah dipersiapkan. employee/employee.java package employee; import java.util.*; import java.rmi.*; import javax.ejb.*; public interface Employee extends EJBObject public String getid()
69 throws RemoteException; public void setname(string name) throws RemoteException; public String getname() throws RemoteException; public void setdepartment(string department) throws RemoteException; public String getdepartment() throws RemoteException; public void setjobtitle(string jobtitle) throws RemoteException; public String getjobtitle() throws RemoteException; public void sethiredate(date hiredate) throws RemoteException; public Date gethiredate() throws RemoteException; public void setpermanentemployee(boolean permanentemployee) throws RemoteException; public boolean getpermanentemployee() throws RemoteException; public void setsalary(double salary) throws RemoteException; public double getsalary() throws RemoteException; Langkah ke-3 Tulis EmployeeBean.java, simpan di sub-directory employee di bawah directory yang sudah dipersiapkan. employee/employeebean.java package employee; import javax.ejb.*; import java.rmi.*; import java.sql.connection; import java.sql.preparedstatement; import java.sql.sqlexception; import java.sql.resultset; import java.util.*; import javax.sql.*; import javax.naming.*; public abstract class EmployeeBean implements EntityBean /* DATA */ public abstract void setid(string id); public abstract String getid(); public abstract void setname(string name); public abstract String getname(); public abstract void setdepartment(string department); public abstract String getdepartment(); public abstract void setjobtitle(string jobtitle); public abstract String getjobtitle(); public abstract void sethiredate(date hiredate); public abstract Date gethiredate(); public abstract void setpermanentemployee(boolean permanentemployee ); public abstract boolean getpermanentemployee();
70 public abstract void setsalary(double salary); public abstract double getsalary(); /* PROCESS */ public String ejbcreate(string id, String name) throws CreateException return ejbcreate(id, name, null, null, null, false, 0); public String ejbcreate(string id, String name, String department, String jobtitle, Date hiredate, boolean permanentemployee, double salary) throws CreateException setid(id); setname(name); setdepartment(department); setjobtitle(jobtitle); sethiredate(hiredate); setpermanentemployee(permanentemployee); setsalary(salary); return new String(id); public void ejbpostcreate(string id, String name) throws CreateException public void ejbpostcreate(string id, String name, String department, String jobtitle, Date hiredate, boolean permanentemployee, double salary) throws CreateException public void ejbremove() public void ejbload() public void ejbstore() public void ejbactivate() public void ejbpassivate() public void setentitycontext(entitycontext entitycontext) public void unsetentitycontext() Langkah ke-4 Buka sebuah terminal dan change directory ke directory di atas Langkah ke-5 Compile... $ export CLASSPATH=.:/home/lab/jboss-3.0.4/client/jbossall-client.jar $ javac employee/* Langkah ke-6
71 Buat sub-directory META-INF Langkah ke-7 Tulis ejb-jar.xml, simpan ke sub directory META-INF META-INF/ejb-jar.xml <?xml version="1.0"?> <!DOCTYPE ejb-jar PUBLIC -//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN > <ejb-jar> <description>enterprise Java Lab</description> <display-name>enterprise Java Lab</display-name> <enterprise-beans> <entity> <ejb-name>employee</ejb-name> <home>employee.employeehome</home> <remote>employee.employee</remote> <ejb-class>employee.employeebean</ejb-class> <persistence-type>container</persistence-type> <prim-key-class>java.lang.string</prim-key-class> <reentrant>false</reentrant> <cmp-field><field-name>id</field-name></cmp-field> <cmp-field><field-name>name</field-name></cmp-field> <cmp-field><field-name>department</field-name></cmp-field> <cmp-field><field-name>jobtitle</field-name></cmp-field> <cmp-field><field-name>hiredate</field-name></cmp-field> <cmp-field><field-name>permanentemployee</field-name></cmpfield> <cmp-field><field-name>salary</field-name></cmp-field> <primkey-field><field-name>id</field-name></primkey-field> </entity> </enterprise-beans> </ejb-jar> Langkah ke-8 Tulis jbosscmp-jdbc.xml, simpan ke sub directory META-INF META-INF/jbosscmp-jdbc.xml <?xml version="1.0"?> <!DOCTYPE jbosscmp-jdbc PUBLIC -//JBoss//DTD JBOSSCMP-JDBC 3.0//EN > <jbosscmp-jdbc> <enterprise-beans> <entity> <ejb-name>employee</ejb-name> <datasource>java:/mysqlds</datasource> <datasource-mapping>mysql</datasource-mapping> <table-name>employee_tbl</table-name> <cmp-field> <field-name>id</field-name> <column-name>id</column-name>
72 </cmp-field> <cmp-field> <field-name>name</field-name> <column-name>name</column-name> </cmp-field> <cmp-field> <field-name>department</field-name> <column-name>department</column-name> </cmp-field> <cmp-field> <field-name>jobtitle</field-name> <column-name>job_title</column-name> </cmp-field> <cmp-field> <field-name>hiredate</field-name> <column-name>hire_date</column-name> </cmp-field> <cmp-field> <field-name>permanentemployee</field-name> <column-name>permanent_employee</column-name> </cmp-field> <cmp-field> <field-name>salary</field-name> <column-name>salary</column-name> </cmp-field> </entity> </enterprise-beans> </jbosscmp-jdbc> Langkah ke-9 Gabungkan ke dalam sebuah jar $ jar cvf employee.jar employee/*.class META-INF/ adding: META-INF/ (in=0) (out=0) (stored 0%) adding: META-INF/MANIFEST.MF (in=56) (out=56) (stored 0%) adding: employee/employeebean.class (in=1839) (out=754) (deflated 58%) adding: employee/employee.class (in=712) (out=339) (deflated 52%) adding: employee/employeehome.class (in=633) (out=292) (deflated 53%) adding: META-INF/ (in=0) (out=0) (stored 0%) adding: META-INF/ejb-jar.xml (in=1275) (out=416) (deflated 67%) adding: META-INF/jbosscmp-jdbc.xml (in=1523) (out=402) (deflated 73%) Total: (in = 6027) (out = 3200) (deflated 46%) Langkah ke-9 Copy ke dalam deployment directory dari jboss $ cp employee.jar /home/lab/jboss-3.0.4/server/default/deploy/ Terpantau di log dari JBoss : 05:19:11,472 INFO [MainDeployer] Starting deployment of package: file:/home/lab/jboss-3.0.4/server/default/deploy/employee.jar 05:19:11,629 WARN [EntityMetaData] Employee: The abstract-schema-name Element must be specified for CMP 2.x Beans 05:19:11,631 WARN [EntityMetaData] Employee: The abstract-schema-name must be a valid Java Identifier null 05:19:11,763 INFO [EJBDeployer] Bean : Employee Method : public abstract Enumeration findbydepartment(string) throws
73 RemoteException, FinderException Section: Warning: Every finder method except findbyprimarykey(key) must be associated with a query element in the deployment descriptor. 05:19:11,955 INFO [EjbModule] Creating 05:19:12,016 INFO [EjbModule] Deploying Employee 05:19:12,144 INFO [EjbModule] Created 05:19:12,146 INFO [EjbModule] Starting 05:19:14,901 INFO [Employee] Table EMPLOYEE_TBL already exists 05:19:14,963 INFO [EjbModule] Started 05:19:14,964 INFO [MainDeployer] Deployed package: file:/home/lab/jboss-3.0.4/server/default/deploy/employee.jar Module EJB telah di-deploy di atas JBoss enterprise application server dan siap melayani request dari client.
74 11Message Driven Bean Message Driven Bean adalah komponen EJB yang dirancang untuk bekerja dalam asynchronous messaging. Untuk mengembangkan sebuah Message Driven Bean... 12Life cycle Life cycle EJB adalah perjalanan bean instance, mulai di-create, di-invoke oleh client, dan sampai di-destroy. Life cycle EJB berbeda-beda untuk masing-masing tipe. 13Environment Variable Untuk variable-variable yang hanya bisa diketahui saat deployment, atau bisa diubah bergantung kepada lingkungan deployment, Anda bisa memanfaatkan kemampuan EJB untuk membaca environment variable. Environment variable ditulis di dalam deployment descriptor. 14Transaction Sebuah transaction adalah suatu rentetan operasi database yang bersifat ACID, yaitu Atomic, Consistency, Isolated dan Durable. Sebuah transaction adalah atomic, bermakna perubahan-perubahan yang terjadi dipandang sebagai satu kesatuan, semuanya disimpan dengan commit atau semuanya dibatalkan dengan rollback. Sebuah transaction adalah consistent, bermakna ia tidak melanggar aturan-aturan tertentu. Sebuah transaction adalah isolated, bermakna satu transaction terpisah dari transaction lainnya. Sebuah transaction adalah durable, bermakna setelah perubahan-perubahan yang terjadi akan tersimpan sesuai transaction berakhir. Di dalam EJB, Anda bisa mendeklarasikan transaction sebagai salah satu dari : TX_SUPPORTS, TX_REQUIRED, TX_REQUIRES_NEW, TX_MANDATORY, TX_NOT_SUPPORTED, TX_BEAN_MANAGED. Sebuah transaction harus mempunyai isolation, karena sebuah transaction akan mengubah data dimana transaction lain juga mengaksesnya. Di dalam EJB, dapat dideklarasikan transaction level salah satu dari ReadUncommitted, ReadCommited, RepeatableRead dan Serializable. Client... no transaction access a mandatory...
75 access to required new... access to required access to support access to notsupported Client with transaction to mandatory access to required new... access to required access to support To notsupported
76 15Security Sebuah enterpri application dapat dilindungi dalam satu security rule. Di mana EJB tertentu hanya bisa diakses oleh user dengan role tertentu. Experiment : SalamKeadilan dgn user... test dari client tanpa account... Experiment 2 : method memanggil method lain...
77 CS Sebuah praktikum untuk mengamankan EJB dengan security constraint... Persiapan Buat sebuah directory untuk bekerja misalnya /home/lab/myjava Langkah Langkah ke-1 Tulis login-config.xml simpan di /home/lab/jboss-3.0.4/server/default/conf JBOSS_HOME/server/default/conf/login-config.xml <?xml version= 1.0?> <!DOCTYPE policy PUBLIC "-//JBoss//DTD JBOSS Security Config 3.0//EN" " <policy> <application-policy name = "mydomain"> <authentication> <login-module code = "org.jboss.security.auth.spi.usersrolesloginmodule" flag = "required"> <module-option name ="usersproperties">users.properties</module-option> <module-option name ="rolesproperties">roles.properties</module-option> <module-option name="unauthenticatedidentity">guest</module-option> </login-module> </authentication> </application-policy> </policy> Langkah ke-2 Restart JBoss Langkah ke-3 Tulis SalamKeadilanHome.java, simpan di-directory yang sudah dipersiapkan. SalamKeadilanHome.java import java.rmi.remoteexception; import javax.ejb.createexception; import javax.ejb.ejbhome; public interface SalamKeadilanHome extends EJBHome public SalamKeadilan create() throws RemoteException, CreateException;
78 Langkah ke-4 Tulis SalamKeadilan.java, simpan di directory yang sudah dipersiapkan SalamKeadilan.java import javax.ejb.ejbobject; import java.rmi.remoteexception; public interface SalamKeadilan extends EJBObject public String getpesan() throws RemoteException; Langkah ke-5 Tulis SalamKeadilanBean.java, simpan di directory yang sudah disiapkan SalamKeadilanBean.java import java.rmi.remoteexception; import javax.ejb.sessionbean; import javax.ejb.sessioncontext; public class SalamKeadilanBean implements SessionBean public String getpesan() return "Salam Keadilan!"; public void ejbcreate() public void ejbremove() public void ejbactivate() public void ejbpassivate() public void setsessioncontext(sessioncontext sc) Langkah ke-6 Buka sebuah terminal dan change directory ke directory di atas Langkah ke-7 Compile... $ export CLASSPATH=.:/home/lab/jboss-3.0.4/client/jbossall-client.jar $ javac *.java $ ls *.class SalamKeadilanBean.class SalamKeadilan.class SalamKeadilanHome.class Langkah ke-8 Buat sub-directory META-INF Langkah ke-9 Tulis ejb-jar.xml, simpan ke sub directory META-INF
79 META-INF/ejb-jar.xml <?xml version="1.0" encoding="utf-8"?> <ejb-jar> <description>enterprise Java Lab</description> <display-name>enterprise Java Lab</display-name> <enterprise-beans> <session> <ejb-name>salamkeadilan</ejb-name> <home>salamkeadilanhome</home> <remote>salamkeadilan</remote> <ejb-class>salamkeadilanbean</ejb-class> <session-type>stateless</session-type> <transaction-type>bean</transaction-type> <security-role-ref> <role-name>consultant</role-name> <role-link>consultant</role-link> </security-role-ref> </session> </enterprise-beans> <assembly-descriptor> <security-role> <description>consultant</description> <role-name>consultant</role-name> </security-role> <method-permission> <role-name>consultant</role-name> <method> <ejb-name>salamkeadilan</ejb-name> <method-name>*</method-name> </method> </method-permission> </assembly-descriptor> </ejb-jar> Langkah ke-10 Tulis jboss.xml, simpan ke sub directory META-INF META-INF/jboss.xml <?xml version="1.0" encoding="utf-8"?> <jboss> <!-- All bean containers use this security manager by default --> <container-configurations> <container-configuration> <container-name> Standard Stateless SessionBean </container-name> <security-domain> java:/jaas/mydomain </security-domain> </container-configuration> </container-configurations> </jboss> Langkah ke-11 Tulis users.properties, simpan di-directory yang sudah dipersiapkan.
80 users.properties ekobs = j2ee fikri = oracle9i millati = j2me Langkah ke-12 Tulis roles.properties, simpan di-directory yang sudah dipersiapkan. roles.properties ekobs = executive fikri = engineer millati = consultant Langkah ke-13 Gabungkan ke dalam sebuah jar $ jar cvf salamkeadilan.jar *.class *.properties META-INF/ adding: META-INF/ (in=0) (out=0) (stored 0%) adding: META-INF/MANIFEST.MF (in=56) (out=56) (stored 0%) adding: SalamKeadilanBean.class (in=634) (out=324) (deflated 48%) adding: SalamKeadilan.class (in=229) (out=176) (deflated 23%) adding: SalamKeadilanHome.class (in=263) (out=184) (deflated 30%) adding: roles.properties (in=55) (out=52) (deflated 5%) adding: users.properties (in=45) (out=42) (deflated 6%) adding: META-INF/ (in=0) (out=0) (stored 0%) adding: META-INF/ejb-jar.xml (in=1144) (out=334) (deflated 70%) adding: META-INF/jboss.xml (in=451) (out=205) (deflated 54%) Total: (in = 2866) (out = 2490) (deflated 13%) Langkah ke-14 Copy ke dalam deployment directory dari jboss $ cp salamkeadilan.jar /home/lab/jboss-3.0.4/server/default/deploy/ Terpantau di log dari JBoss :
81 15:19:01,235 INFO [EjbModule] Creating 15:19:01,263 INFO [EjbModule] Deploying SalamKeadilan 15:19:01,305 INFO [EjbModule] Created 15:19:01,306 INFO [EjbModule] Starting 15:19:01,530 INFO [EjbModule] Started 15:19:01,570 INFO [MainDeployer] Deployed package: file:/home/lab/jboss-3.0.4/server/default/deploy/salamkeadilan.jar Module EJB telah di-deploy di atas JBoss enterprise application server dan siap melayani request dari client.
82 CS untuk menunjukkan bahwa tanpa authentication dan authorization, client tidak bisa mengakses EJB... Persiapan Buat sebuah directory untuk bekerja, misalnya /home/lab/myjava Langkah Langkah ke-1 Tulis SalamKeadilanApp.java, simpan di-directory yang sudah dipersiapkan. SalamKeadilanApp.java import java.util.properties; import javax.naming.initialcontext; import javax.rmi.portableremoteobject; public class SalamKeadilanApp public static void main(string[] args) try Properties props = new Properties(); props.setproperty( "java.naming.factory.initial", "org.jnp.interfaces.namingcontextfactory" ); props.setproperty( "java.naming.provider.url", "localhost:1099" ); InitialContext jndicontext = new InitialContext(props); Object ref = jndicontext.lookup("salamkeadilan"); SalamKeadilanHome home = (SalamKeadilanHome) PortableRemoteObject.narrow (ref, SalamKeadilanHome.class); SalamKeadilan ejb = home.create(); String pesan = ejb.getpesan(); System.out.println(pesan); catch(exception e) e.printstacktrace(); Langkah ke-2 Buka sebuah terminal, dan change directory ke directory kerja tersebut Langkah ke-3 Compile... $ export CLASSPATH=.
83 $ export CLASSPATH=$CLASSPATH:/home/lab/jboss-3.0.4/client/jbossallclient.jar $ export CLASSPATH=$CLASSPATH:/home/lab/jboss-3.0.4/client/log4j.jar $ export CLASSPATH=$CLASSPATH:salamkeadilan.jar $ javac SalamKeadilanApp.java akan dihasilkan SalamKeadilanApp.class Langkah ke-4 Launch... $ java SalamKeadilanApp java.rmi.serverexception: RemoteException occurred in server thread; nested exception is: java.rmi.serverexception: EJBException:; nested exception is: javax.ejb.ejbexception: checksecurityassociation; CausedByException is: Authentication exception, principal=null
84 CS mengakses EJB yang diamankan... Persiapan Buat sebuah directory untuk bekerja, misalnya /home/lab/myjava Langkah Langkah ke-1 Tulis SalamKeadilanApp.java, simpan di-directory yang sudah dipersiapkan. SalamKeadilanApp.java import java.util.properties; import javax.naming.*; import javax.rmi.portableremoteobject; import javax.security.auth.callback.*; import javax.security.auth.login.*; public class SalamKeadilanApp public static void main(string[] args) try Properties props = new Properties(); props.setproperty( Context.INITIAL_CONTEXT_FACTORY, //"org.jnp.interfaces.namingcontextfactory" "org.jboss.security.jndi.logininitialcontextfactory" ); props.setproperty( Context.PROVIDER_URL, "localhost:1099" ); String username = null; String password = null; if(args.length >= 1) username = args[0]; props.setproperty( Context.SECURITY_PRINCIPAL, username ); if(args.length >= 2) password = args[1]; props.setproperty( Context.SECURITY_CREDENTIALS, password ); InitialContext jndicontext = new InitialContext(props); Object ref = jndicontext.lookup("salamkeadilan"); SalamKeadilanHome home = (SalamKeadilanHome) PortableRemoteObject.narrow (ref, SalamKeadilanHome.class); SalamKeadilan ejb = home.create();
85 String pesan = ejb.getpesan(); System.out.println(pesan); catch(exception e) e.printstacktrace(); Langkah ke-2 Buka sebuah terminal, dan change directory ke directory kerja tersebut Langkah ke-3 Compile... $ export CLASSPATH=. $ export CLASSPATH=$CLASSPATH:/home/lab/jboss-3.0.4/client/jbossallclient.jar $ export CLASSPATH=$CLASSPATH:/home/lab/jboss-3.0.4/client/log4j.jar $ export CLASSPATH=$CLASSPATH:/home/lab/jboss /server/default/lib/jbosssx.jar $ export CLASSPATH=$CLASSPATH:salamkeadilan.jar $ javac SalamKeadilanApp.java akan dihasilkan SalamKeadilanApp.class Langkah ke-4 Tulis auth.conf, simpan di directory yang sudah dipersiapkan... auth.conf // The default client login module configuration that infects the // EJB transport layer with the application caller other // JBoss LoginModule org.jboss.security.clientloginmodule required ; ; // Put your login modules that need JBoss here Langkah ke-5 Launch... untuk kasus salah user/password... $ java -Djava.security.auth.login.config=auth.conf SalamKeadilanApp ekobs oracle9i java.rmi.serverexception: RemoteException occurred in server thread; nested exception is: java.rmi.serverexception: EJBException:; nested exception is: javax.ejb.ejbexception: checksecurityassociation; CausedByException is: Authentication exception, principal=ekobs
86 Langkah ke-5 Launch... untuk kasus tanpa access right... $ java -Djava.security.auth.login.config=auth.conf SalamKeadilanApp ekobs j2ee java.rmi.serverexception: RemoteException occurred in server thread; nested exception is: java.rmi.serverexception: EJBException:; nested exception is: javax.ejb.ejbexception: checksecurityassociation; CausedByException is: Insufficient method permissions, principal=ekobs, method=create, interface=home, requiredroles=[consultant], principalroles=[executive] Langkah ke-6 Launch... untuk kasus dengan access right... $ java -Djava.security.auth.login.config=auth.conf SalamKeadilanApp millati j2me Salam Keadilan!
87 CS Sebuah praktikum untuk mengamankan EJB dengan security constraint. Dengan menyimpan Access Control List di dalam database... Persiapan Buat sebuah directory untuk bekerja misalnya /home/lab/myjava Langkah Langkah ke-1 Tulis login-config.xml simpan di /home/lab/jboss-3.0.4/server/default/conf JBOSS_HOME/server/default/conf/login-config.xml <?xml version= 1.0?> <!DOCTYPE policy PUBLIC "-//JBoss//DTD JBOSS Security Config 3.0//EN" " <policy> <application-policy name = "mydomain"> <authentication> <login-module code = "org.jboss.security.auth.spi.databaseserverloginmodule" flag = "required"> <module-option name = "dsjndiname">java:/mysqlds</module-option> <module-option name = "principalsquery">select PASSWORD from USER_TBL where USER_NAME=?</module-option> <module-option name = "rolesquery">select ROLE_NAME, ROLE_GROUP from ROLE_TBL where USER_NAME=?</module-option> <module-option name = "debug">1</module-option> </login-module> </authentication> </application-policy> </policy> Langkah ke-2 Restart JBoss Langkah ke-3 Tulis mydomain.sql untuk meng-create dan meng-insert data : mydomain.sql create table USER_TBL(USER_NAME varchar(20) primary key, PASSWORD varchar(20)); create table ROLE_TBL(USER_NAME varchar(20), ROLE_NAME varchar(20), ROLE_GROUP varchar(20)); insert into USER_TBL values( sigitwk, php ); insert into ROLE_TBL values( sigitwk, consultant, null); insert into USER_TBL values( arisp, cisco ); insert into ROLE_TBL values( arisp, enterpreneur, null); commit;
88 Langkah ke-4 Buka sebuah terminal. Lalu melalui terminal tersebut jalankan mysql client untuk meng-execute mydomain.sql $ mysql -uekobs -pj2ee MYAPP_DB < mydomain.sql Langkah ke-5 Tulis SalamKeadilanHome.java, simpan di-directory yang sudah dipersiapkan. SalamKeadilanHome.java import java.rmi.remoteexception; import javax.ejb.createexception; import javax.ejb.ejbhome; public interface SalamKeadilanHome extends EJBHome public SalamKeadilan create() throws RemoteException, CreateException; Langkah ke-6 Tulis SalamKeadilan.java, simpan di directory yang sudah dipersiapkan SalamKeadilan.java import javax.ejb.ejbobject; import java.rmi.remoteexception; public interface SalamKeadilan extends EJBObject public String getpesan() throws RemoteException; Langkah ke-7 Tulis SalamKeadilanBean.java, simpan di directory yang sudah disiapkan SalamKeadilanBean.java import java.rmi.remoteexception; import javax.ejb.sessionbean;
89 import javax.ejb.sessioncontext; public class SalamKeadilanBean implements SessionBean public String getpesan() return "Salam Keadilan!"; public void ejbcreate() public void ejbremove() public void ejbactivate() public void ejbpassivate() public void setsessioncontext(sessioncontext sc) Langkah ke-8 Buka sebuah terminal dan change directory ke directory di atas Langkah ke-9 Compile... $ export CLASSPATH=.:/home/lab/jboss-3.0.4/client/jbossall-client.jar $ javac *.java $ ls *.class SalamKeadilanBean.class SalamKeadilan.class SalamKeadilanHome.class Langkah ke-10 Buat sub-directory META-INF Langkah ke-11 Tulis ejb-jar.xml, simpan ke sub directory META-INF META-INF/ejb-jar.xml <?xml version="1.0" encoding="utf-8"?> <ejb-jar> <description>enterprise Java Lab</description> <display-name>enterprise Java Lab</display-name> <enterprise-beans> <session> <ejb-name>salamkeadilan</ejb-name> <home>salamkeadilanhome</home> <remote>salamkeadilan</remote> <ejb-class>salamkeadilanbean</ejb-class> <session-type>stateless</session-type> <transaction-type>bean</transaction-type> <security-role-ref> <role-name>consultant</role-name> <role-link>consultant</role-link> </security-role-ref> </session> </enterprise-beans> <assembly-descriptor> <security-role> <description>consultant</description>
90 <role-name>consultant</role-name> </security-role> <method-permission> <role-name>consultant</role-name> <method> <ejb-name>salamkeadilan</ejb-name> <method-name>*</method-name> </method> </method-permission> </assembly-descriptor> </ejb-jar> Langkah ke-12 Tulis jboss.xml, simpan ke sub directory META-INF META-INF/jboss.xml <?xml version="1.0" encoding="utf-8"?> <jboss> <!-- All bean containers use this security manager by default --> <container-configurations> <container-configuration> <container-name> Standard Stateless SessionBean </container-name> <security-domain> java:/jaas/mydomain </security-domain> </container-configuration> </container-configurations> </jboss> Langkah ke-13 Gabungkan ke dalam sebuah jar $ jar cvf salamkeadilan.jar *.class META-INF/ adding: META-INF/ (in=0) (out=0) (stored 0%) adding: META-INF/MANIFEST.MF (in=56) (out=56) (stored 0%) adding: SalamKeadilanBean.class (in=634) (out=324) (deflated 48%) adding: SalamKeadilan.class (in=229) (out=176) (deflated 23%) adding: SalamKeadilanHome.class (in=263) (out=184) (deflated 30%) adding: META-INF/ (in=0) (out=0) (stored 0%) adding: META-INF/ejb-jar.xml (in=1144) (out=334) (deflated 70%) adding: META-INF/jboss.xml (in=369) (out=203) (deflated 44%) Total: (in = 2684) (out = 2178) (deflated 18%) Langkah ke-14 Copy ke dalam deployment directory dari jboss $ cp salamkeadilan.jar /home/lab/jboss-3.0.4/server/default/deploy/ Terpantau di log dari JBoss : 07:28:55,709 INFO [MainDeployer] Starting deployment of package: file:/home/lab/jboss-3.0.4/server/default/deploy/salamkeadilan.jar 07:28:55,845 INFO [EjbModule] Creating 07:28:55,907 INFO [EjbModule] Deploying SalamKeadilan
91 07:28:55,997 INFO [EjbModule] Created 07:28:55,998 INFO [EjbModule] Starting 07:28:56,334 INFO [EjbModule] Started 07:28:56,335 INFO [MainDeployer] Deployed package: file:/home/lab/jboss-3.0.4/server/default/deploy/salamkeadilan.jar Module EJB telah di-deploy di atas JBoss enterprise application server dan siap melayani request dari client.
92 CS mengakses EJB yang diamankan... Persiapan Buat sebuah directory untuk bekerja, misalnya /home/lab/myjava Langkah Langkah ke-1 Tulis SalamKeadilanApp.java, simpan di-directory yang sudah dipersiapkan. SalamKeadilanApp.java import java.util.properties; import javax.naming.*; import javax.rmi.portableremoteobject; import javax.security.auth.callback.*; import javax.security.auth.login.*; public class SalamKeadilanApp public static void main(string[] args) try Properties props = new Properties(); props.setproperty( Context.INITIAL_CONTEXT_FACTORY, //"org.jnp.interfaces.namingcontextfactory" "org.jboss.security.jndi.logininitialcontextfactory" ); props.setproperty( Context.PROVIDER_URL, "localhost:1099" ); String username = null; String password = null; if(args.length >= 1) username = args[0]; props.setproperty( Context.SECURITY_PRINCIPAL, username ); if(args.length >= 2) password = args[1]; props.setproperty( Context.SECURITY_CREDENTIALS, password ); InitialContext jndicontext = new InitialContext(props); Object ref = jndicontext.lookup("salamkeadilan"); SalamKeadilanHome home = (SalamKeadilanHome)
93 PortableRemoteObject.narrow (ref, SalamKeadilanHome.class); SalamKeadilan ejb = home.create(); String pesan = ejb.getpesan(); System.out.println(pesan); catch(exception e) e.printstacktrace(); Langkah ke-2 Buka sebuah terminal, dan change directory ke directory kerja tersebut Langkah ke-3 Compile... $ export CLASSPATH=. $ export CLASSPATH=$CLASSPATH:/home/lab/jboss-3.0.4/client/jbossallclient.jar $ export CLASSPATH=$CLASSPATH:/home/lab/jboss-3.0.4/client/log4j.jar $ export CLASSPATH=$CLASSPATH:/home/lab/jboss /server/default/lib/jbosssx.jar $ export CLASSPATH=$CLASSPATH:salamkeadilan.jar $ javac SalamKeadilanApp.java akan dihasilkan SalamKeadilanApp.class Langkah ke-4 Tulis auth.conf, simpan di directory yang sudah dipersiapkan... auth.conf // The default client login module configuration that infects the // EJB transport layer with the application caller other // JBoss LoginModule org.jboss.security.clientloginmodule required ; ; // Put your login modules that need JBoss here Langkah ke-5 Launch... untuk kasus salah user/password... $ java -Djava.security.auth.login.config=auth.conf SalamKeadilanApp millati j2me java.rmi.serverexception: RemoteException occurred in server thread; nested exception is: java.rmi.serverexception: EJBException:; nested exception is: javax.ejb.ejbexception: checksecurityassociation; CausedByException is: Authentication exception, principal=millati at sun.rmi.server.unicastserverref.dispatch(unicastserverref.java:292)
94 at sun.rmi.transport.transport$1.run(transport.java:148) at java.security.accesscontroller.doprivileged(native Method) at sun.rmi.transport.transport.servicecall(transport.java:144) at sun.rmi.transport.tcp.tcptransport.handlemessages(tcptransport.java:460) at sun.rmi.transport.tcp.tcptransport$connectionhandler.run(tcptransport.ja va:701) at java.lang.thread.run(thread.java:536) Langkah ke-5 Launch... untuk kasus tanpa access right... $ java -Djava.security.auth.login.config=auth.conf SalamKeadilanApp arisp cisco java.rmi.serverexception: RemoteException occurred in server thread; nested exception is: java.rmi.serverexception: EJBException:; nested exception is: javax.ejb.ejbexception: checksecurityassociation; CausedByException is: Insufficient method permissions, principal=arisp, method=create, interface=home, requiredroles=[consultant], principalroles=[enterpreneur] at sun.rmi.server.unicastserverref.dispatch(unicastserverref.java:292) at sun.rmi.transport.transport$1.run(transport.java:148) at java.security.accesscontroller.doprivileged(native Method) at sun.rmi.transport.transport.servicecall(transport.java:144) at sun.rmi.transport.tcp.tcptransport.handlemessages(tcptransport.java:460) at sun.rmi.transport.tcp.tcptransport$connectionhandler.run(tcptransport.ja va:701) at java.lang.thread.run(thread.java:536) Langkah ke-6 Launch... untuk kasus dengan access right... $ java -Djava.security.auth.login.config=auth.conf SalamKeadilanApp sigitwk php Salam Keadilan!
3.4 Contoh Bean Managed Persistence
J2EE Dalam Aplikasi Enterprise + CD Pengarang : M. Shalahuddin dan Rosa A.S. Penerbit: INFORMATIKA Rp. 38.000 3.4 Contoh Bean Managed Persistence Fungsi dari contoh entity bean BMP yang akan dibuat adalah
Generated by Foxit PDF Creator Foxit Software For evaluation only. 17/09/ :33
Waktu Sisa : 0:46:41 1. Berikut ini yang bukan jenis-jenis scope dalam pengaksesan object dalam aplikasi web Java: page request session application cookies 2. Format archive yang tidak dipakai dalam aplikasi
5.2 Keuntungan dan Kelemahan Cookie
Cookie Aplikasi web adalah aplikasi yang stateless, di mana server tidak akan mengingat request client. Akibatnya, setiap request yang masuk selalu dianggap oleh server berasal dari client-client yang
SERVLET. 5.1 Membuat Program Servlet
SERVLET Servlet merupakan dasar dari teknologi Java Web, yaitu sebuah class Java yang mempunyai kemampuan sebagai server. Servlet bekerja berdasarkan model request-respone, dan dasar dari teknologi bersama
Pada Java, sebuah objek remote adalah instans dari suatu kelas yang mengimplementasikan antarmuka remote.
Rosa Ariani Sukamto Email: [email protected] Website: http://www.gangsir.com A. REMOTE METHOD INVOCATION (RMI) (Minggu 1 Praktikum II) 1. Sekilas RMI RMI (Remote Method Application) pada Java adalah
BAHASA PEMROGRAMAN JAVA
MI1274 Algoritma & Pemrograman Lanjut Genap 2015-2016 BAHASA PEMROGRAMAN JAVA Disusun Oleh: Reza Budiawan Untuk: Tim Dosen Algoritma & Pemrograman Lanjut Hanya dipergunakan untuk kepentingan pengajaran
Enterprise Java Beans (EJB)
Enterprise Java Beans (EJB) P E N G E M B A N G A N A P L I K A S I E N T E R P R I S E ( C ) 2 0 1 6 N I K O I B R A H I M F A K U L T A S T E K N O L O G I I N F O R M A S I U N I V E R S I T A S K R
Bengkel Rekayasa Piranti Lunak Aplikasi Web Dengan Java
Bengkel Rekayasa Piranti Lunak Aplikasi Web Dengan Java By [email protected] Draft 0.1.2 Last update 4 November 2003 Untuk release terbaru, question, troubleshoot dan feedback kami undang Anda bergabung
Bab 1. Pengenalan JSP POKOK BAHASAN: TUJUAN BELAJAR: 1.1 Dasar JSP
Bab 1 Pengenalan JSP 1 Bab 1 Pengenalan JSP POKOK BAHASAN: Dasar JSP Daur hidup JSP] Web Container Jakarta Tomcat Contex Java Virtual Machine Yang diperlukan untuk menjalankan JSP Membuat dan mendeploy
Eko Budhi Suprasetiawan
Akses Database Melalui Jaxor Eko Budhi Suprasetiawan [email protected] Lisensi Dokumen: Seluruh dokumen di IlmuKomputer.Com dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan
Pemanggilan RESTful Web Service Java dari Client PHP
Pemanggilan RESTful Web Service Java dari Client PHP [email protected] Pendahuluan RESTful web services termasuk aplikasi kelas ringan dan cepat aksesnya. Inilah alasan bagus mengapa REST API ini banyak
JAVA SERVLET (1) Software yang Dibutuhkan 1. Editor untuk menulis HTML 2. Browser yang dipakai untuk menjalankan HTML 3. Web Application Server Tomcat
JAVA SERVLET (1) I. Tujuan 1. Mahasiswa mampu menjalankan Servlet pada web server Tomcat 2. Mahasiswa mengenal Servlet dan dasar-dasar Servlet 3. Mahasiswa mengenal istilah-istilah Servlet dan pemakaiannya
29 Februari Introduction Of Java
29 Februari 2012 Introduction Of Java Sejarah Java Dikembangkan oleh tim Pemimpin: James Gosling Company: Sun Microsystem Agustus 1991, bernama Oak Januari 1995, berganti nama Java Dapat dijalankan di
Score : Persentase : % ~ u ~ Generated by Foxit PDF Creator Foxit Software For evaluation only.
Waktu Sisa : 0:50:12 Score : 84.333336 Persentase : 84.333336 % 1. Berikut ini adalah penjelasan dari apa itu ActionServlet (3): Class yang terletak dalam package org.apache.struts.action.* Class yang
BS603 PENGEMBANGAN APLIKASI ENTERPRISE Niko Ibrahim, S.Kom, MIT
BS603 PENGEMBANGAN APLIKASI ENTERPRISE 2016 - Niko Ibrahim, S.Kom, MIT Silabus BS603 Aturan dan tata cara kuliah Tujuan Perkuliahan Materi kuliah Buku referensi Tugas dan Quiz Ujian Tengah dan Akhir Semester
Membuat JSP dan Servlet Sederhana
Membuat JSP dan Servlet Sederhana Juli 2009 Tingkat: Oleh : Feri Djuandi Pemula Menengah Mahir Untuk memulai latihan ini, pastikan pada komputer Anda terinstall Eclipse dan Apache Tomcat. Program Tomcat
Generated by Foxit PDF Creator Foxit Software For evaluation only. 16/09/ :50
Waktu Sisa : 0:33:40 1. Mana diantara pilihan berikut ini yang tidak benar? doget() digunakan untuk menangani request HTTP GET dopost() digunakan untuk menangani request HTTP POST doput() digunakan untuk
Eko Budhi Suprasetiawan
Akses Database melalui Hibernate Eko Budhi Suprasetiawan [email protected] Lisensi Dokumen: Seluruh dokumen di IlmuKomputer.Com dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan
Pengenalan JavaScript
Pengenalan JavaScript Tujuan - Mahasiswa memahami konsep dasar Javascript - Mahasiswa mampu memahami cara menggunakan Javascript - Mahasiswa mampu memahami dasar variabel di Javascript - Mahasiswa mampu
2.1. Sistem Komunikasi
2. KOMUNIKASI 2.1. Sistem Komunikasi Pembahasan : bagaimana komunikasi antar object dalam sistem terdistribusi, khususnya dengan menggunakan RMI (Remote Method Invocation) dan RPC (Remote Procedure Call).
Pemrograman Berorientasi Obyek (IT251) Ramos Somya, S.Kom., M.Cs.
Pemrograman Berorientasi Obyek (IT251) Ramos Somya, S.Kom., M.Cs. Thread adalah sebuah pengontrol aliran program dengan menggunakan kendali tunggal. Suatu proses dikontrol oleh paling sedikit satu thread.
- Setiap pola yang menggambarkan permasalahan yang terjadi secara berulang, serta
MODUL 1 IMPLEMENTASI MODEL VIEW CONTROLLER (MVC) DESIGN PATTERN Design Pattern dapat didefinisikan : - Setiap pola yang menggambarkan permasalahan yang terjadi secara berulang, serta menjelaskan cara utama
Slide 6: Writing Classes
Slide 6: Writing Classes Bank Account Class 1. File Account.java berisi sebagian hal yang diperlukan untuk merepresentasikan sebuah bank account. Ketik dan simpan program tersebut serta pelajari methods
PEMROGRAMAN I. By : Sri Rezeki Candra Nursari
PEMROGRAMAN I By : Sri Rezeki Candra Nursari Materi : nursari2010.blogdetik.com String String Handling Java.util,Java.io AWT Event Windows Graphics Text Control Layout Manager Menu GUI Handling Image New
1. Apa yang harus dilakukan oleh programmer untuk menangani user-defined exception? Menuliskan exception sebagai start method
Your browser does not support inline frames or is currently configured not to display inline frames. Waktu Sisa : 0:10:57 1. Apa yang harus dilakukan oleh programmer untuk menangani user-defined exception?
MODEL SISTEM TERDISTRIBUSI
MODEL SISTEM TERDISTRIBUSI MODEL DS? Hubungan dan interkoneksi antar komponen penyusun sistem terdistribusi 1 Model Client Server Client Client Server Client Client Model Client Server Client: Proses akses
Variabel tersebut seharusnya bisa dideklarasikan didalam try block dan block catch
Waktu Sisa : 0:55:52 1. 0 1 2 3 4 2. Sebuah variabel dalam local method bisa diakses dari dalam block try-catch. Dimana variabel tersebut sebaiknya dideklarasikan? Variabel tersebut seharusnya dideklarasikan
BAB 14 AJAX. Menyerupai J2EE, AJAX adalah 2 hal yang digabungkan : merupakan sebuah teknologi, sekaligus arsitektir pemrograman.
BAB 14 AJAX 14.1 PENDAHULUAN Hingga saat ini, aplikasi web mengikuti alur arsitektur berikut : satu satunya cara dalam merepresentasikan content baru (sebagai contoh, dalam merespon interaksi antara user
Waktu Sisa : 0:43:4. Sukses. Kesalahan pada URL. File tidak lengkap. Kesalahan umum. Mengerjakan finally. Diluar block
Waktu Sisa : 0:43:4 1. Sukses Kesalahan pada URL File tidak lengkap Kesalahan umum Mengerjakan finally Diluar block 2. Method hallo() bisa melempar java.io.ioexception, java.lang.runtimeexception, atau
1. Tujuan Mempersiapkan aplikasi JSF menggunakan Netbeans Membuat aplikasi Guest Book sederhana. 2. Latar Belakang JSF LifeCycle
1. Tujuan Mempersiapkan aplikasi JSF menggunakan Netbeans Membuat aplikasi Guest Book sederhana 2. Latar Belakang JSF LifeCycle 1 P age 3. Percobaan Percobaan 1 : Menyiapkan aplikasi project JSF Info Tujuan
Sukses. Kesalahan pada URL. File tidak lengkap. Kesalahan umum
Your browser does not support inline frames or is currently configured not to display inline frames. Waktu Sisa : 0:20:31 1. Sukses Kesalahan pada URL File tidak lengkap Kesalahan umum Mengerjakan finally
1. Mampu mengimplementasikan thread dalam sebuah aplikasi 2. Memahami kegunaan thread dalam aplikasi
PRAKTIKUM 5 MULTITHREADING 1 A. TUJUAN PEMBELAJARAN 1. Mampu mengimplementasikan thread dalam sebuah aplikasi 2. Memahami kegunaan thread dalam aplikasi B. DASAR TEORI Saat ini komputer bukan hanya dituntut
A. TUJUAN PEMBELAJARAN
PRAKTIKUM 29 GUI: KALKULATOR MINI A. TUJUAN PEMBELAJARAN 1. Memahami konsep Graphical User Interface (GUI). 2. Mampu membuat program yang menerapkan konsep GUI. 3. Mampu membuat program berbasis GUI yang
Untuk melakukan koneksi dari Java ke MySQL melalui JDBC, berikut langkahlangkah
MEMBUAT PROGRAM DATABASE SEDERHANA ( Menggunakan Java & MySQL) Disusun Oleh : Ahmad Sanmorino, S.Kom FAKULTAS ILMU KOMPUTER UNIVERSITAS SRIWIJAYA TAHUN 2009 Koneksi Java-MySQL dengan JDBC Untuk melakukan
Pembuatan RESTful Web Service Hello World dengan PHP & Java. Husni
Pembuatan RESTful Web Service Hello World dengan PHP & Java Husni [email protected] Membangun REST API dengan PHP Sekedar Menyapa Membuat Direktori: C:\XAMPP\htdocs\API Nanti, semua file diletakkan
BAB IX MEMBUAT FORM 9.1 Membuat Form Secara Konvensional
BAB IX MEMBUAT FORM 9.1 Membuat Form Secara Konvensional GUI (Graphical User Interface), memungkinkan user untuk berinteraksi dengan komputer secara lebih baik. Pengguna dapat berinteraksi dengan berbagai
IMPLEMENTASI DAN PEMBAHASAN SISTEM
BAB IV IMPLEMENTASI DAN PEMBAHASAN SISTEM 4.1. Implementasi Sistem Implementasi sistem merupakan tahap dimana rancangan yang telah dibuat dapat diterapkan. Tujuannya untuk melakukan uji coba pada aplikasi
Membuat Menu Login Sederhana [Full Coding]
Membuat Menu Login Sederhana [Full Coding] Oleh: Yudi Setiawan Pada tutorial, ini saya berusaha mengajari Anda secara lebih keras lagi agar Anda mempunyai bekal ilmu dasar yang kuat di ilmu pemrograman
1. Manakah pernyataan yang benar di bawah ini? Method service hanya dipanggil saat pertama kali servlet dieksekusi.
Your browser does not support inline frames or is currently configured not to display inline frames. Waktu Sisa : 0:59:42 1. Manakah pernyataan yang benar di bawah ini? Method service hanya dipanggil saat
Pemrograman Jaringan 12 CORBA
Pemrograman Jaringan 12 CORBA CORBA (Common Object Request Broker Architecture) CORBA (www.corba.org) adalah cara lain untuk melakukan pemrograman jaringan terdistribusi dan open system, dimana obyek yang
PENDAHULUAN TENTANG NETBEANS
PENDAHULUAN TENTANG NETBEANS Yuliana Setiowati Politeknik Elektronika Negeri Surabaya 1 TOPIK Pendahuluan IDE Netbeans Membuat Project Baru. 2 Konsep Netbeans Netbeans sebagai IDE ditujukan untuk memudahkan
PEMROGRAMAN SOCKET LANJUTAN
Praktikum 11 PEMROGRAMAN SOCKET LANJUTAN A. TUJUAN PEMBELAJARAN 1. Siswa memahami konsep aplikasi client server di jaringan. 2. Siswa memahami konsep pemprograman socket lanjut. 3. Siswa mampu melakukan
MODUL PRAKTIKUM PEMROGRAMAN BERORIENTASI OBJEK (JAVA) PERTEMUAN 1 PENGENALAN LINGKUNGAN PEMROGRAMAN JAVA
PERTEMUAN 1 PENGENALAN LINGKUNGAN PEMROGRAMAN JAVA A. Instalasi paket Java Development Kit (JDK) 1. Download paket JDK MODUL PRAKTIKUM PEMROGRAMAN BERORIENTASI OBJEK (JAVA) Pertama masuk ke situs http://java.sun.com/javase/downloads/index.jsp,
A. TUJUAN PEMBELAJARAN
PRAKTIKUM 27 ANTAR MUKA GRAFIS A. TUJUAN PEMBELAJARAN 1. Memahami konsep Graphical User Interface (GUI). 2. Mampu membuat program yang menerapkan konsep GUI. 3. Mampu membuat program berbasis GUI yang
Contoh-contoh yang sudah diidentifikasi untuk desain ini antara lain:
1. Tujuan Membuat program menggunakan Include dan Forward Mengetahui pengertian dari Filter dan penggunaannya 2. Latar Belakang Sebuah filter adalah sebuah object yang melaksanakan tugas penfilteran pada
Pemrograman Lanjut Jurusan S1 Teknik Informatika. 9/17/2012 Ratno
Pemrograman Lanjut Jurusan S1 Teknik Informatika 9/17/2012 Ratno Object Oriented Programming Object Pada dunia perangkat lunak, sebuah obyek adalah sebuah komponen perangkat lunak yang stukturnya mirip
GUI & Event Handling. Viska Mutiawani, M.Sc
GUI & Event Handling Viska Mutiawani, M.Sc GUI pada Java GUI (Graphical User Interface) pada Java umumnya menggunakan kelas dari package javax.swing dan java.awt. AWT dan Swing dapat dipergunakan untuk
Pengenalan APLIKASI DATABASE
Page 1 of 23 APLIKASI DATABASE Pengenalan Aplikasi database merupakan aplikasi yang menggunakan database berbasis komputerisasi dan tampilan form sebagai media penghubung antara user dan database, dimana
Tidak ada satupun dari pilihan di atas yang benar karena checked exception tidak bisa ditulis
Waktu Sisa : 0:58:12 1. Package mana yang memiliki class IOException? java.util java.text java.error java.io 2. Pilihan manakah di bawah ini yang paling tepat mendeskripsikan langkah-langkah penting dalam
Materi 5 Pemrograman Visual
Materi 5 Pemrograman Visual Pada materi ini akan dipelajari tentang pemberian aksi pada komponen swing (listener), terutama ActionListener. Sesi Materi ActionListener merupakan salah satu listener yang
Pengenalan Framework Jakarta Struts
Pengenalan Framework Jakarta Struts Struts merupakan aplikasi framework open source yang di design untuk membantu para developer dalam membangun arsitektur aplikasi berbasis pada Model-View-Controller
KONSEP DASAR PEMROGRAMAN BERORIENTASI OBYEK
KONSEP DASAR PEMROGRAMAN BERORIENTASI OBYEK Farah Zakiyah Rahmanti, M.T 2015 Overview Definisi Teknologi Java Konsep Pemrograman Procedural dan OOP Struktur Java, Identifier, Kata Kunci, Tipe Data, Operator,
BAGIAN XIII GRAPHICAL USER INTERFACE DENGAN SWING. Praktikum I : Menggunakan JFrame, JTextField, JLabel dan JButton
BAGIAN XIII GRAPHICAL USER INTERFACE DENGAN SWING A. Langkah-Langkah Praktek Praktikum I : Menggunakan JFrame, JTextField, JLabel dan JButton 1. Buatlah project java application baru dari netbeans melalui
Inheritance dan Kata Kunci static
Inheritance dan Kata Kunci static PEWARISAN (INHERITANCE) Salah satu fitur yang paling kuat dalam OOP adalah penggunaan kode kembali (code reuse). Sekali sebuah prosedur dibuat, maka kita bisa menggunakannya
Panduan Konfigurasi Server. a. Application Package Installation (SAP Server) Buka Object Navigator (T-Code SE80)
Panduan Konfigurasi Server a. Application Package Installation (SAP Server) 1. Membuat Application Package Buka Object Navigator (T-Code SE80) Buat package baru dengan menuliskan nama package yang diinginkan
Pencarian Buku Perpustakaan. Melalui SMS Menggunakan Java
Pencarian Buku Perpustakaan Melalui SMS Menggunakan Java Jemmy / 0222129 Jurusan Teknik Elektro, Fakultas Teknik, Jln.Prof.Drg.Suria Sumantri 65, Bandung 40164, Indonesia Email : [email protected] ABSTRAK
INSTRUKSI PENCABANGAN
INSTRUKSI PENCABANGAN Sebagai pengembang (programmer) sudah pasti mengetahui jenis operasi instruksi. Salah satu yang perlu dipelajari atau dimengerti adalah operasi instruksi pencabangan. 3.1 Pencabangan
PERTEMUAN III OBJEK DAN CLASS TUJUAN PRAKTIKUM
PERTEMUAN III OBJEK DAN CLASS TUJUAN PRAKTIKUM 1. Praktikan memahami perbedaan objek dan class pada Java. 2. Praktikan memahami konsep berorientasi objek. 3. Praktikan dapat membuat program sederhana dengan
GUI & Event Handling. Viska Mutiawani, M.Sc. 1 Viska Mutiawani - Informatika FMIPA Unsyiah
GUI & Event Handling Viska Mutiawani, M.Sc 1 Viska Mutiawani - Informatika FMIPA GUI pada Java GUI (Graphical User Interface) pada Java umumnya menggunakan kelas dari package javax.swing dan java.awt.
EXCEPTION. 2. Pada kondisi bagaimana klausa finally tidak akan dieksekusi? Kode didalam block try memiliki statement return
EXCEPTION 1. 0 1 2 3 4 2. Pada kondisi bagaimana klausa finally tidak akan dieksekusi? Kode didalam block try memiliki statement return Kode didalam block try telah dieksekusi dengan benar Method System.exit()
Score : Persentase : % ~ u ~ Generated by Foxit PDF Creator Foxit Software For evaluation only.
Waktu Sisa : 1:41:50 Score : 151.33333 Persentase : 83.15018 % 1. Yang bukan validator standart JSF adalah... Double Range Validator Length Validator Long Range Validator ~ u ~ Singel Validator 2. Untuk
Didalam menampilkan peta yang sudah kita buat, kita akan menggunakan Slick2D sebagai sebuah frameworknya.
1 Teknologi Game Materi 2 Menampilkan peta di Game Tools yang dibutuhkan 1. JDK 6ux 2. Notepad++/Netbeans 6.x/JDeveloper/Eclipse Didalam menampilkan peta yang sudah kita buat, kita akan menggunakan Slick2D
Pemrograman Jaringan 11 RMI
Pemrograman Jaringan 11 RMI Pengantar RMI RMI adalah salah satu bagian dari J2SE yang digunakan untuk membangun aplikasi terdistribusi menggunakan bahasa Java. RMI adalah kumpulan kelas dalam Java yang
MODUL 7 - EXCEPTION HANDLING
DESKRIPSI MATERI Modul 7 yang berjudul Exception Handling ini memaparkan tentang bagaimana cara menangkap kesalahan saat program dijalankan agar jalannya program tidak keluar begitu saja dari alur yang
GUI Event Handling. minggu 13. Wednesday, 16 May 12
GUI Event Handling minggu 13 Objectives / Tujuan Mengenal The Delegation Event Model Mengenal Event Classes Mengenal Event Listener: ActionListener Method MouseListener Method MouseMotionListener Method
DIK-020 Pemograman Berorientasi Objek 5/24/2012
Topik JAVA Education Network Indonesia GUI Event Handling Pengenalan Pemrograman 2 Class-class Event Event Listeners Method ActionListener Method MouseListener Method MouseMotionListener Method WindowListener
Pemrograman dengan Java
Pemrograman dengan Java Java sebagai salah satu bahasa pemrograman baru menjanjikan banyak kemudahan bagi programer junior maupun senior. Tutorial ini akan membawa Anda mengenal lebih jauh bahasa ini melalui
TPI4202 e-tp.ub.ac.id. Lecture 4 Mas ud Effendi
TPI4202 e-tp.ub.ac.id Lecture 4 Mas ud Effendi Menampilkan informasi kepada user lewat display Dengan perintah print dan println print: menampilkan output (kursor tetap di baris yang sama) println: menampilkan
Pengenalan Java EE dengan Wildfly
Pengenalan Java EE dengan Wildfly Disusun oleh: Iwan Agus Fatahi Dwi Anindyani Rochmah 1/26 Daftar Isi Pendahuluan... 4 Latar belakang...4 Tools dan aplikasi yang digunakan...5 Java JDK...5 Eclipse...5
Pemanggilan RESTful Web Service PHP dari Client Java
Pemanggilan RESTful Web Service PHP dari Client Java [email protected] Bagaimana memanggil atau memgakses RESTful web service PHP dari client yang ditulis dengan Java? Cukup mudah. Tutotial ini akan
BAB IX. USER INTERFACE
BAB IX. USER INTERFACE 9.1.Dasar GUI Program GUI (Graphical User Interface) merupakan metode pendesainan program ke dunia nyata (real world) atau visual bukan dalam bentuk console. Paket yang dapat digunakan
Membuat Java Servlet WEB.XML. Java Servlet, Apakah Itu? Oleh: Galih Satriaji (http://blog.galihsatria.com)
Membuat Java Servlet Oleh: Galih Satriaji (http://blog.galihsatria.com) Dalam sesi tutorial kali ini, kita akan membuat servlet sederhana dalam langkah demi langkah dengan tujuan memahami bagaimana gaya
PENERAPAN JAVA SERVER FACES UNTUK DESIGN PATTERN WEB
PENERAPAN JAVA SERVER FACES UNTUK DESIGN PATTERN WEB Yanto (1) Abstrak: J2EE Pattern adalah kumpulan pola-pola yang digunakan dalam menyelesaikan masalah yang umumnya dihadapi oleh setiap programmer Java
Pemrograman Lanjut. Class : Deeper Look 2
Pemrograman Lanjut Class : Deeper Look 2 PTIIK - 2013 Objectives Mampu menggunakan variabel dan method static dan final. Mampu meng-import static member dari sebuah kelas. Mampu membuat package dan meng-import
Konsep Pemrograman Berorientasi Obyek. Maria Ulfah S Nurochman
Konsep Pemrograman Berorientasi Obyek Maria Ulfah S Nurochman Kompetensi Menjelaskan paradigma pemrograman berorientasi obyek Membedakan antara paradigma pemrograman berorientasi obyek dan pemrograman
Network Programming 2010 Jaringan & Aplikasinya. Husni Husni.trunojoyo.ac.id
Network Programming 2010 Jaringan & Aplikasinya Husni [email protected] Husni.trunojoyo.ac.id Outline Sistem Tersebar Sistem Operasi Protokol Jaringan Pemrograman Java Sistem Tersebar Himpunan komputer-komputer
MODUL PRAKTIKUM KE 3 A.
MODUL PRAKTIKUM KE 3 A. Target Praktikum - Mahasiswa mengetahui berbagai macam operator java dan penggunaannya - Mahasiswa mampu menyelesaikan permasalahan terkait penggunaan operator - Mengetahui build
Membuat User Interface dengan Swing. Program yang dibuat sebelumnya selalu berbasis console User lebih senang berinteraksi dengan
Topik Memahami komponen dasar swing Memahami implementasi swing dalam program Mengimplementasikan button, check box, dan radio button dalam program Mengimplementasikan label,text Field dan Password Field
BAB IV ANALISIS DAN PERANCANGAN SISTEM. hasil analisis ini digambarkan dan didokumentasiakan dengan metodologi
BAB IV ANALISIS DAN PERANCANGAN SISTEM 4.1. Analisis Sistem yang Sedang Berjalan Kegiatan analisis sistem yang berjalan dilakukan dengan analisis yang berorientasi pada objek-objek yang diperlukan oleh
Pemrograman Database Java
Pemrograman Database Java Java Database Connectivity ODBC Native Driver Endy Muhardin Materi Koneksi dengan ODBC Koneksi dengan Native Driver Koneksi dengan Hibernate Koneksi Database
BAB III METODE PENELITIAN. ini, diantaranya adalah dengan langkah-langkah sebagai berikut :
BAB III METODE PENELITIAN 3.1 Metode Penelitian Beberapa metode penelitian dilakukan dalam penyelesaian Tugas Akhir ini, diantaranya adalah dengan langkah-langkah sebagai berikut : 3.1.1 Model Model diperlukan
LAPORAN RESMI PRAKTIKUM II WEB DESAIN PENGENALAN JAVASCRIPT
LAPORAN RESMI PRAKTIKUM II WEB DESAIN PENGENALAN JAVASCRIPT Di susun oleh : Galuh Meidaluna 4103141023 Dosen : Dwi Susanto ST. MT TEKNOLOGI MULTIMEDIA BROADCASTING POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
Dasar-Dasar OOP di Java
Pertemuan 7 - Pemrograman Berbasis Obyek Oleh: Ali Ridho Barakbah Information hiding Dasar-Dasar OOP di Java Pada bab sebelumnya telah dibahas bagaimana mengakses anggota class, baik yang berupa atribut
DASAR PEMOGRAMAN JAVA
DASAR PEMOGRAMAN JAVA Pertemuan ke-2 Oleh: Winda Aprianti Tipe Data Bilangan Karakter Kata atau Kalimat Boolean Literal merepresentasikan nilai suatu tipe, dimana tipe itu sendiri menjelaskan bagaimana
Exception Handling and Multithreading
Pertemuan 7 Halaman 1/1 Pengertian Exception Suatu program apabila mengalami kesalahan akan menghasilkan suatu runtime errors seperti gagal membuka file, suatu program melakukan akses diatas range array
BAB 9 JSF. 9.1 Pengenalan JSF
BAB 9 JSF Pada bab sebelumnya, kita telah melihat Struts, sebuah framework open-source untuk aplikasi web yang mengimplementasikan arsitektur model-2. Sekarang mari kita lihat framework lainnya : Java
Pemrograman Web Lanjut
Session 04 JSF Event Handling Pemrograman Web Lanjut 2015 Niko Ibrahim, MIT Fakultas Teknologi Informasi Universitas Kristen Maranatha Tujuan Mahasiswa memahami jenis-jenis event handling yang ada pada
Pemrograman Lanjut Tipe Data dan Constructor PTIIK
Pemrograman Lanjut Tipe Data dan Constructor PTIIK - 2013 Objectives Mengetahui perbedaan antara tipe data primitive dan reference. Mampu mendeklarasikan dan menggunakan constructor untuk memastikan bahwa
PEMAHAMAN DASAR DASAR JAVA
MODUL 1 PEMAHAMAN DASAR DASAR JAVA A. PENGANTAR JAVA Java Standard Development Kit (JDK/SDK) merupakan alat-alat utama bagi programmer untuk membuat dan menjalankan java. Development Kit dapat didownload
LAPORAN RESMI. PRAKTIKUM TEKNOLOGI WEB Pengenalan JavaScript
LAPORAN RESMI PRAKTIKUM TEKNOLOGI WEB Pengenalan JavaScript Dosen Pembimbing : Dwi Susanto Oleh : Noer Rhiannah A (4103131052) 3 D3 MMB B PROGRAM STUDI TEKNOLOGI MULTIMEDIA BROADCASTING DEPARTEMEN MULTIMEDIA
Membuat dan Menggunakan Class
Pertemuan 3 Halaman 1/1 Membuat class pada java : Untuk mendefinisikan suatu class pada java digunakan : class ClassName { suatu class dapat terdiri dari - attribute / data field - method Attribute Attribute
Membuat Kalkulator dengan Java
Membuat Kalkulator dengan Java Oleh: Eko Wicaksono Ini merupakan program kalkulator sederhana Kali ini saya ingin membuat tutor dari bahasa java, belajar membuat kalkulator namanya. Ini program masih sangat
MODUL 3 Servlet dan JavaBean
MODUL 3 Servlet dan JavaBean TUJUAN PRAKTIKUM : 1. Praktikum mampu membuat konfigurasi Servlet. 2. Praktikum mampu memahami dan membuat halaman JSP. 3. Praktikan mampu memahami dan membuat kelas Javabean
Pengenalan Bahasa Pemrograman Java
Pengenalan Bahasa Pemrograman Java Java adalah bahasa pemrograman berorientasi objek murni yang dibuat berdasarkan kemampuan-kemampuan terbaik bahasa pemrograman objek sebelumnya (C++, Ada, Simula). Java
Pemrograman Berbasis Objek. Pengenalan Java. Yuliana Setiowati. Politeknik Elektronika Negeri Surabaya
Pengenalan Java Yuliana Setiowati Kilas Balik Teknologi Java Bahasa Java awalnya bernama Oak, yakni bagian dari projek Green yang dikembangkan khusus oleh Sun Microsystem untuk memprogram perangkat-perangkat
MODUL 11 J2ME (Java 2 Micro Edition)
MODUL 11 J2ME (Java 2 Micro Edition) A. Tujuan : 1. Memahami konsep interkoneksi client server 2. Memahami passing parameter antara client dan server INTERNET PROGRAMMING PENS-ITS B. Dasar Teori Interkoneksi
2 TIPE DATA DAN VARIABEL
BAB 2 TIPE DATA DAN VARIABEL Kompetensi Dasar dan Indikator : Setelah mengikuti materi kuliah ini mahasiswa mampu menggunakan tipe data dan variable yang ada dalam Java, dengan indikator mahasiswa mampu:
