ADMINISTRASI ORACLE CONTAINER FOR J2EE (OC4J) 10.1.2.x STAND ALONE [email protected] ADMINISTRASI ORACLE CONTAINER FOR J2EE (OC4J) 10.1.2.x STAND ALONE Langkah-Langkah Instalasi - Instalasi Java Standar Development Kit - Instalasi Oracle Container for J2EE (OC4J) Konfigurasi OC4J - Tuning Java Virtual Machine untuk OC4J - Tuning OC4J - Konfigurasi Data Source Pada OC4J - Konfigurasi OC4J Sebagai Windows Service - Deployment Aplikasi Pada OC4J - Redeployment Aplikasi - Deployment Aplikasi Menggunakan admin.jar - Restarting Aplikasi - Pembuatan File Deployment untuk OC4J ADMINISTRASI ORACLE CONTAINER FOR J2EE (OC4J) Versi Oracle yang digunakan adalah 10.1.2.0 (kompatibel dengan spesifikasi J2EE 1.3). Dapat diambil di \\jktd-prog2\software\java related\oc4j\oc4j_extended.zip atau di http://www.oracle.com/technology/software/products/ias/htdocs/utilsoft.html#1012 LANGKAH-LANGKAH INSTALASI Instalasi Java Standard Development Kit Versi Java yang digunakan adalah Java SDK 5 update terbaru. Dapat diambil di \\jktdprog2\software\java sdk atau di http://java.sun.com/javase/downloads/index_jdk5.jsp. Jalankan installer dan ikuti wizard yang diberikan. Direkomendasikan untuk: - Menempatkan folder instalasi pada drive D. - Tidak menginstall fitur-fitur selain fitur utama (Dokumentasi, source code dan fitur tambahan tidak perlu diinstall). Pastikan environment variabel berikut telah teregister: - JAVA_HOME: mengarah pada folder instalasi JDK (bukan JRE) - Perintah java diambil dari JDK yang benar, bukan JRE, untuk itu pastikan folder JDK masuk dalam PATH Pastikan command java pada command line telah menunjuk versi yang benar dengan memeriksa versi java dengan perintah java –version. Contoh instalasi Java SDK 5 pada VicoBld03: - Letak folder instalasi: D:\java-5 - %JAVA_HOME% : D:\java-5\jdk1.5.0_11 %PATH% : D:\java-5\jdk1.5.0_11\bin; C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem Pemeriksaan versi java: Administrasi Oracle Container for J2EE (OC4J) 10.1.2.x Instalasi Oracle Container for J2EE (OC4J) 1. Ekstrak file oc4j_extended.zip pada folder instalasi. Pedoman isi setiap drive adalah: - C: Sistem Operasi - D: Aplikasi - E: Data 2. Buka command prompt dan masuk ke folder [oc4j_home]/j2ee/home. Lalu ketikkan perintah: java –jar oc4j.jar –install dan masukkan password untuk administrator server. Password admin OC4J untuk VicoBld03 bisa dilihat di file BacaSaya.txt di folder instalasi OC4J. Administrator default untuk OC4J 10.1.2.x adalah admin. 3. Instalasi selesai. Untuk mencobanya, jalankan perintah java –jar oc4j.jar dan tunggu hingga OC4J selesai melakukan inisialisasi lalu hubungi melalui request HTTP dari browser. Alamat port default OC4J untuk versi 10.1.2.x adalah 8888. dan, http://localhost:8888/ Administrasi Oracle Container for J2EE (OC4J) 10.1.2.x 4. Konfigurasi Port HttpListener: Untuk mengubah port default 8888, buka file [oc4j_home]/j2ee/home/config/http-web-site.xml. Pada bagian <web-site> ubah nilai pada atribut port, misalnya menjadi 80. Restart oc4j (cukup dengan CTRL+C dan kembali menjalankan oc4j.jar) dan sekarang hubungi server dengan port 80. KONFIGURASI OC4J Tuning Java Virtual Machine untuk OC4J JVM memiliki garbage collector yang bertugas membersihkan dan mereclaim memory. Secara default, JVM bersikap gentle dengan mengambil sedikit dari memory fisik dan mempersering garbace-collecting sehingga memperberat kerja prosesor. Jika ingin memaksimalkan penggunaan memory fisik, gunakan opsi berikut ini saat menjalankan OC4J java –jar –Xms1024M –Xmx1024M oc4j.jar Konfigurasi di atas langsung memesan memory sebanyak 1GB. Windows Server 2003 sudah memesan memory fisik sebanyak sekian porsi dari total keseluruhan sehingga tidak semua memory bisa digunakan JVM. Gunakan sebanyak 75% hingga 80% dari total memory fisik jika semua memory ingin digunakan oleh JVM. Tuning OC4J Dalam OC4J Stand Alone, paling tidak ada satu titik yang bisa dimaksimalkan, yaitu thread pool; seberapa banyak jumlah thread yang dibuat OC4J dalam menangani request. Untuk konfigurasi ini, buka [oc4j_home]/j2ee/home/config/server.xml dan tambahkan tag <global-thread-pool> di dalam tag <application-server> Administrasi Oracle Container for J2EE (OC4J) 10.1.2.x min: Jumlah thread minimal yang dibuat. max: Jumlah thread maksimal yang dibuat OC4J. queue: Jumlah antrian thread ketika thread maksimal tercapai. Jumlah yang direkomendasikan adalah dua kali jumlah thread maksimal. keepAlive: seberapa lama sebuah thread idle (tidak melayani request) sebelum memory-nya direclaim oleh garbage collector. Satuan nilainya adalah mili second. Nilai -1 menunjukkan thread idle yang ada tidak akan pernah dihapus. Setting di atas (64-256-612-(-1)) adalah setting untuk sebuah server yang memiliki prosesor dan memory besar. Konfigurasi Data Source pada OC4J Beberapa aplikasi memerlukan connection pooling dalam server dan biasa mengaksesnya dengan menggunakan JNDI. Adapun konfigurasi JNDI pada OC4J didefinisikan pada file [oc4j_home]/j2ee/home/data-sources.xml Contohnya adalah sebagai berikut (tag ini ditambahkan di dalam tag <data-sources>) <data-source class="com.evermind.sql.DriverManagerDataSource" name="OraParmDS" location="jdbc/vico/oracle/oraparm/drilling" connection-driver="oracle.jdbc.driver.OracleDriver" username="####" password="####" url="jdbc:oracle:thin:@127.0.0.1:1521:oraparm" inactivity-timeout="30" /> Atribut-atributnya: - class: Class yang menangani data source - name: Nama data source - location: lokasi yang bisa dirujuk oleh JNDI - connection-driver: class database driver - username: user yang digunakan untuk mengakses data source - password: password user - url: URL dalam format JDBC yang menuju ke database - inactivity-timeout: waktu idle sebelum time out. Satuan dalam detik Untuk koneksi yang menggunakan connection pooling, <data-source class="oracle.jdbc.pool.OracleDataSource" name="OraParmDS" location="jdbc/vico/oracle/oraparm/drilling" connection-driver="oracle.jdbc.driver.OracleDriver" username="###" password="###" url="jdbc:oracle:thin:@127.0.0.1:1521:DEV" inactivity-timeout="30" min-connections="5" max-connections="10" /> Administrasi Oracle Container for J2EE (OC4J) 10.1.2.x Spesifik untuk aplikasi yang menggunakan Spring sebagai IoC, cara koneksi dengan menggunakan JNDI dilakukan dengan mengubah konfigurasi pada konfigurator data Spring (dataAccessContext.xml) dengan entri seperti di bawah ini: <bean id="appDataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="resourceRef"> <value>true</value> </property> <property name="jndiName"> <value>${jndi.datasource}</value> </property> </bean> Sebagai perbandingan, di bawah ini adalah konfigurator data Spring yang menggunakan JDBC langsung sebagai model koneksi <bean id="appDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${db.driverClassName}"/> <property name="url" value="${db.url}"/> <property name="username" value="${db.username}"/> <property name="password" value="${db.password}"/> </bean> Perhatikan ada variabel ${jndi.datasource}, maka tambahkan nilai variabel tersebut pada konfigurator (config.properties) jndi.datasource=jdbc/vico/oracle/oraparm/drilling Kemudian, untuk aplikasinya sendiri, masukkan entri koneksi JNDI pada web.xml aplikasi yang akan melakukan koneksi tersebut: <resource-env-ref> <description>DB Connection</description> <resource-env-ref-name> jdbc/vico/oracle/oraparm/drilling </resource-env-ref-name> <resource-env-ref-type> javax.sql.DataSource </resource-env-ref-type> </resource-env-ref> Konfigurasi OC4J Sebagai Windows Service Berbeda dengan Oracle Application Server (OAS), OC4J Stand Alone tidak memiliki fasilitas untuk menjadikannya bekerja di background sebagai service, sehingga di sini akan dipakai Java Service Wrapper (\\jktd-prog2\software\java related\java service wrapper atau http://wrapper.tanukisoftware.org/) sebagai wrapper aplikasi agar OC4J bisa berjalan sebagai windows service. Administrasi Oracle Container for J2EE (OC4J) 10.1.2.x Langkah-Langkah Konfigurasi OC4J 10.1.2.x sebagai service dengan wrapper Java Service Wrapper adalah sebagai berikut: 1. Download Java Service Wrapper, ekstrak dan tempatkan di dalam [oc4j_home], misalnya dengan nama wrapper-win32. Perhatikan bahwa yang diekstrak tidak keseluruhan dari bundle Java Service Wrapper, namun hanya folder utama yang diperlukan agar wrapper berjalan dengan baik, yaitu folder bin, conf, lib, dan logs. 2. Buka folder conf dan edit wrapper.conf menjadi konfigurasi yang sesuai dengan lingkungan server yang akan diwrap. Berikut adalah konfigurasi Java Service Wrapper pada VicoBld03: #******************************************************************** # TestWrapper Properties # # NOTE - Please use src/conf/wrapper.conf.in as a template for your # own application rather than the values used for the # TestWrapper sample. #******************************************************************** # Java Application wrapper.java.command=%JAVA_HOME%/bin/java # Java Main class. This class must implement the WrapperListener interface # or guarantee that the WrapperManager class is initialized. Helper # classes are provided to do this for you. See the Integration section # of the documentation for details. wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp # Java Classpath (include wrapper.jar) Add class path elements as # needed starting from 1 wrapper.java.classpath.1=../lib/wrapper.jar wrapper.java.classpath.2=../../lib/ejb.jar wrapper.java.classpath.3=../../lib/servlet.jar wrapper.java.classpath.4=../../lib/ojsp.jar wrapper.java.classpath.5=../../lib/jndi.jar wrapper.java.classpath.6=../../lib/jdbc.jar wrapper.java.classpath.7=../../iiop.jar wrapper.java.classpath.8=../../iiop_gen_bin.jar wrapper.java.classpath.9=../../lib/jms.jar wrapper.java.classpath.10=../../lib/jta.jar wrapper.java.classpath.11=../../lib/jmxri.jar wrapper.java.classpath.12=../../lib/javax77.jar wrapper.java.classpath.13=../../lib/javax88.jar wrapper.java.classpath.14=../../../../opmn/lib/ons.jar wrapper.java.classpath.15=../../../../opmn/lib/optic.jar wrapper.java.classpath.16=../../../../lib/dms.jar wrapper.java.classpath.17=../../../../dms/lib/dms.jar wrapper.java.classpath.18=../../../../diagnostics/lib/ojdl.jar wrapper.java.classpath.19=../../../../dms/diagnostics/lib/ojdl.jar wrapper.java.classpath.20=../../lib/bcel.jar wrapper.java.classpath.21=../../lib/cos.jar wrapper.java.classpath.22=../../lib/jsse.jar wrapper.java.classpath.23=../../../../oracle/lib/jsse.jar wrapper.java.classpath.24=../../lib/jnet.jar wrapper.java.classpath.25=../../lib/jcert.jar Administrasi Oracle Container for J2EE (OC4J) 10.1.2.x wrapper.java.classpath.26=../../lib/activation.jar wrapper.java.classpath.27=../../lib/mail.jar wrapper.java.classpath.28=../../../../javavm/lib/jasper.zip wrapper.java.classpath.29=../../../../lib/xmlparserv2.jar wrapper.java.classpath.30=../../../../oracle/lib/xmlparserv2.jar wrapper.java.classpath.31=../../../../jlib/orai18n.jar wrapper.java.classpath.32=../../../../oracle/jlib/orai18n.jar wrapper.java.classpath.33=../../lib/jaxp.jar wrapper.java.classpath.34=../../lib/jaas.jar wrapper.java.classpath.35=../../jazn.jar wrapper.java.classpath.36=../../../../jdbc/lib/classes12dms.jar wrapper.java.classpath.37=../../../../oracle/jdbc/lib/classes12dms.jar wrapper.java.classpath.38=../../../../jdbc/lib/nls_charset12.jar wrapper.java.classpath.39=../../../../oracle/jdbc/lib/nls_charset12.jar wrapper.java.classpath.40=../../jaxb-rt-1.0-ea.jar wrapper.java.classpath.41=../../../../soap/lib/soap.jar wrapper.java.classpath.42=../../../../webservices/lib/wsserver.jar wrapper.java.classpath.43=../../../../webservices/lib/wsdl.jar wrapper.java.classpath.44=../../../../rdbms/jlib/aqapi.jar wrapper.java.classpath.45=../../lib/jem.jar wrapper.java.classpath.46=../../../../javacache/lib/cache.jar wrapper.java.classpath.47=../../lib/http_client.jar wrapper.java.classpath.48=../../../../jlib/jssl-1_1.jar wrapper.java.classpath.49=../../../../oracle/jlib/jssl-1_1.jar wrapper.java.classpath.50=../../../../jlib/repository.jar wrapper.java.classpath.51=../../../../oracle/jlib/repository.jar wrapper.java.classpath.52=../../lib/jaasmodules.jar wrapper.java.classpath.53=../../../../sqlj/lib/runtime12ee.jar wrapper.java.classpath.54=../../../../sqlj/lib/translator.jar wrapper.java.classpath.55=../../lib/crimson.jar wrapper.java.classpath.56=../../../../jlib/ojpcs.jar wrapper.java.classpath.57=../../ ../../oracle/jlib/ojpcs.jar wrapper.java.classpath.58=../../../../jlib/ojpcp.jar wrapper.java.classpath.59=../../../../oracle/jlib/ojpcp.jar wrapper.java.classpath.60=../../../../jlib/ojpse.jar wrapper.java.classpath.61=../../../../oracle/jlib/ojpse.jar wrapper.java.classpath.62=../../ ../../jlib/ojpsmime.jar wrapper.java.classpath.63=../../../../oracle/jlib/ojpsmime.jar wrapper.java.classpath.64=../../../../jlib/ojpcms.jar wrapper.java.classpath.65=../../../../oracle/jlib/ojpcms.jar wrapper.java.classpath.66=../../j2ee/home/oc4j.jar # Java Library Path (location of Wrapper.DLL or libwrapper.so) wrapper.java.library.path.1=../lib # Java Additional Parameters # Initial Java Heap Size (in MB) wrapper.java.initmemory=1024 # Maximum Java Heap Size (in MB) wrapper.java.maxmemory=1024 # Application parameters. Add parameters as needed starting from 1 wrapper.app.parameter.1=com.evermind.server.OC4JServer wrapper.app.parameter.2=-config wrapper.app.parameter.3=D:/oc4j-10.1.2/j2ee/home/config/server.xml #******************************************************************** # Wrapper Logging Properties #******************************************************************** # Format of output for the console. (See docs for formats) wrapper.console.format=PM # Log Level for console output. wrapper.console.loglevel=INFO (See docs for log levels) # Log file to use for wrapper output logging. wrapper.logfile=../logs/wrapper.log Administrasi Oracle Container for J2EE (OC4J) 10.1.2.x # Format of output for the log file. wrapper.logfile.format=LPTM # Log Level for log file output. wrapper.logfile.loglevel=INFO (See docs for formats) (See docs for log levels) # Maximum size that the log file will be allowed to grow to before # the log is rolled. Size is specified in bytes. The default value # of 0, disables log rolling. May abbreviate with the 'k' (kb) or # 'm' (mb) suffix. For example: 10m = 10 megabytes. wrapper.logfile.maxsize=0 # Maximum number of rolled log files which will be allowed before old # files are deleted. The default value of 0 implies no limit. wrapper.logfile.maxfiles=0 # Log Level for sys/event log output. wrapper.syslog.loglevel=NONE (See docs for log levels) #******************************************************************** # Wrapper Windows Properties #******************************************************************** # Title to use when running as a console wrapper.console.title=OC4J Application Server #******************************************************************** # Wrapper Windows NT/2000/XP Service Properties #******************************************************************** # WARNING - Do not modify any of these properties when an application # using this configuration file has been installed as a service. # Please uninstall the service before modifying this section. The # service can then be reinstalled. # Name of the service wrapper.ntservice.name=OC4J # Display name of the service wrapper.ntservice.displayname=OC4J Application Server # Description of the service wrapper.ntservice.description=OC4J Application Server runs Java applications # Service dependencies. Add dependencies as needed starting from 1 wrapper.ntservice.dependency.1= # Mode in which the service is installed. wrapper.ntservice.starttype=AUTO_START AUTO_START or DEMAND_START # Allow the service to interact with the desktop. wrapper.ntservice.interactive=false Konfigurasi di atas spesifik untuk OC4J versi 10.1.2.x. 3. Uji coba konfigurasi wrapper dengan menjalankan OC4J lewat wrapper namun tetap di dalam console (foreground) dengan membuka command prompt dan ke folder [oc4j_home]/[wrapper_dir]/bin. Jalankan perintah wrapper –c ../conf/wrapper.conf untuk menjalankan wrapper dengan mode foreground (console) dengan menggunakan file konfigurasi yang telah diset. Administrasi Oracle Container for J2EE (OC4J) 10.1.2.x 4. Matikan kembali, dan kini install wrapper yang menjalankan OC4J ini sebagai windows service dengan perintah wrapper –i ../conf/wrapper.conf. 5. Cek pada daftar Windows Service, [Start] – [Administrative Tools] – [Services] dan pastikan nama service yang baru saja diinstall (nama service ini didefinisikan di wrapper.conf) ada di sana. 6. Tes dengan menjalankan service ini, setelah berjalan, coba hubungi server ini dari browser dan pastikan server dapat merespon dengan baik. 7. Untuk meng-uninstall service, jalankan perintah wrapper –r ../conf/wrapper.conf. Konfigurasi wrapper.conf harus sama dengan wrapper.conf yang digunakan untuk menginstall service. Administrasi Oracle Container for J2EE (OC4J) 10.1.2.x 8. Untuk memudahkan dalam maintenance, sebaiknya pada folder bin dibuatkan batch file yang berisi dua perintah tersebut. install-oc4j-as-service.bat berisi perintah wrapper –i ../conf/wrapper.conf remove-oc4j-as-service.bat berisi perintah wrapper –r ../conf/wrapper.conf start-oc4j-as-console.bat berisi perintah wrapper –c ../conf/wrapper.conf 9. Konfigurasi OC4J sebagai Windows Service selesai. Deployment Aplikasi Pada OC4J OC4J versi 10.1.2.x tidak memiliki halaman administrasi berbasis web seperti OAS atau OC4J versi 10.1.3.x, sehingga dengan demikian proses deployment, reloading, dsb harus dilakukan secara manual dan lewat command line. OC4J mendeploy aplikasi dari format EAR (Enterprise Archive) yang berisi file-file berformat WAR (Web Archive) dan deployment descriptor yang memberitahu OC4J setting-setting yang berhubungan dengan aplikasi tersebut. Pembuatan file EAR akan dibahas pada sesi setelah ini. Langkah-Langkah Deployment: 1. Siapkan file EAR dan letakkan pada folder [oc4j_home]/j2ee/home/applications. 2. Setelah terkopi, register aplikasi baru tersebut dengan memasukkannya di file [oc4j_home]/j2ee/home/config/server.xml. Di dalam tag <application-server> masukkan tag baru yaitu <application> dengan atribut sbb: - name: Nama aplikasi yang seterusnya akan dirujuk oleh konfigurasi lainnya - path: Letak relative path dari file EAR yang diletakkan. Relatif terhadap lokasi file server.xml Administrasi Oracle Container for J2EE (OC4J) 10.1.2.x 3. Simpan perubahan pada file server.xml dan perhatikan log OC4J yang akan segera melakukan unpacking EAR dan WAR. Untuk OC4J yang sudah di-wrap sebagai service, log stdout akan dialihkan ke log wrapper dan diletakkan pada file wrapper.log di folder logs. 4. Register aplikasi-aplikasi WAR yang berada di dalam EAR yang baru saja dideploy pada file [oc4j_home]/j2ee/home/config/http-web-site.xml. Di dalam tag <website>, masukkan tag <web-app> baru dengan atribut sbb: - application: Nama aplikasi yang teregister di file server.xml (Lihat poin 2) - name: Nama web modul yang dibundel dalam file WAR yang ada dalam aplikasi EAR tersebut - root: Context root, relatif terhadap host. 5. OC4J secara otomatis akan mengenali aplikasi yang baru saja diregister ini. Untuk memastikannya, hubungi aplikasi ini dari browser. 6. Deployment selesai. Redeployment Aplikasi Karena biasanya satu Application Server menangani berbagai macam aplikasi, dalam redeploy suatu aplikasi tidak diperkenankan mematikan server dan mengulangi langkah-langkah deployment yang telah dijelaskan dalam sesi sebelum ini. Oleh karena itu, digunakan cara lain untuk meredeploy dengan menggunakan tool admin.jar yang terletak di folder [oc4j_home]/j2ee/home/ Untuk meredeploy aplikasi, aplikasi yang ada harus diredeploy dahulu dengan perintah: java –jar admin.jar ormi://[host]:[port_ormi] [administrator] [password] –undeploy [nama_aplikasi] Misalnya, java –jar admin.jar ormi://localhost:23791 admin #### -undeploy rigless Port ORMI default adalah 23791. # adalah password untuk administrator. Nama administrator default bagi OC4J versi 10.1.2.x adalah admin, lain dengan OC4J versi 10.1.3.x yang bernama oc4jadmin. Administrasi Oracle Container for J2EE (OC4J) 10.1.2.x Perintah undeploy ini mengakibatkan segala setting yang berhubungan dengan aplikasi ini pada file server.xml dan http-web-site.xml akan terhapus. Untuk mendeploy lagi, gunakan cara seperti yang telah disebutkan di atas atau menggunakan tool admin.jar seperti yang dijelaskan setelah ini. Deployment Aplikasi Menggunakan admin.jar Perintahnya terformat dalam urutan sebagai berikut: java –jar admin.jar ormi://[host]:[port_ormi] [administrator] [password] –deploy –file [full ear file path] –deploymentName [nama aplikasi] Misalnya java –jar admin.jar ormi://localhost:23791 admin #### -deploy –file D:\rigless.ear –deploymentName rigless Perintah ini secara otomatis akan mendeploy semua aplikasi yang ada di dalam file EAR yang didefinisikan di deployment descriptor file tersebut. Restarting Aplikasi Dengan admin.jar juga, sebuah aplikasi direstart tanpa harus melakukan redeployment atau restarting OC4J. Jika terjadi perubahan pada file-file (misalnya hasil editing file langsung di server), secara otomatis aplikasi akan di-redeploy ulang. Perintahnya adalah sebagai berikut: java –jar admin.jar ormi://[host]:[port_ormi] [administrator] [password] –application [nama_aplikasi] –restart Misalnya, java –jar admin.jar ormi://localhost:23791 admin #### -application rigless -restart Pembuatan File Deployment untuk OC4J Untuk melakukan deployment, OC4J memerlukan sebuah file yang didalamnya terdapat deployment descriptor. Satu file ini bisa terdiri dari beberapa aplikasi dan biasanya dalam format *.EAR. File ini adalah file Zip biasa dengan tambahan folder META-INF yang di dalamnya terdapat deployment descriptor berupa file XML bernama application.xml. Contoh isi file EAR adalah sebagai berikut: rigless.ear |-- rigless.war |-- META-INF |-- manifest.mf |-- application.xml Administrasi Oracle Container for J2EE (OC4J) 10.1.2.x Rigless.war adalah file WAR yang berisi aplikasi yang akan dideploy. Definisi file-file WAR ini akan dideploy dengan cara bagaimana oleh OC4J didefinisikan di dalam application.xml. Application.xml sendiri secara dasar isinya adalah sebagai berikut: <?xml version="1.0"?> <!DOCTYPE application PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE Application 1.2//EN" "http://java.sun.com/j2ee/dtds/application_1_3.dtd"> <!-- OC4J specific settings for EAR deployment --> <application> <display-name>Rigless Application</display-name> <module> <web> <web-uri>rigless.war</web-uri> <context-root>/rigless</context-root> </web> </module> </application> Administrasi Oracle Container for J2EE (OC4J) 10.1.2.x