Önceki yazimda PL/SQL kodundan direkt ws (Web Servis) yaratmanin ne kadar kolay oldugunu gördük. Ayni sekilde herhangi bir java sinifini da ws'e çevirmek gayet kolay. Bunun için
1. Önce Application'i
2. Sonra ve ws teknolojilerine sahip projemizi olusturuyoruz.
3. Webservise icin kullanacagimiz java sinifini olusturuyoruz,ws'e cevirmeden once test etmek icin main metodunu da olusturmakta fayda var. Asagida görüldügü gibi ilk örnekte oldugu gibi HR semasini kullaniyoruz
package jawatows;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JavaOracleStatementws {
public JavaOracleStatementws() {
super();
}
public String getEmployeeDepartment(int empno){
String res ="";
int iCounter=0;
int deptid=0;
String deptname="";
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@localhost:1521:XE";
Connection conn =
DriverManager.getConnection(url,"hr","hr");
Statement stmt = conn.createStatement();
ResultSet rset =
stmt.executeQuery("SELECT d.department_name dname\n" +
" FROM employees e, departments d\n" +
" WHERE e.department_id=d.department_id\n" +
" AND e.employee_id="+ empno +
" AND rownum=1");
while (rset.next()) {
deptname = rset.getString(1);
}
stmt.close();
conn.close();
} catch (Exception e){
System.out.print("exception handled"+e);
}
return deptname;
}
public static void main (String args[]){
JavaOracleStatementws jw= new JavaOracleStatementws();
String res=jw.getEmployeeDepartment(200);
System.out.println("result: "+res);
}
}
test etmeden once oracle'in classes12.jar sinifinin classpath'inizde olup olmadigindan emin olun eger degilse
Application -> project properties Libraries and Classpath'ten ister klasoru ister jar dosyasini projeye ekleyebilisiniz.
bu işlemden sonra sınıfı çalıştırarak test ettik ve cevap dönünce ws'e çevirmek için hazırız.
4. ws'e çevirmek için sınıfın üzerinde sağ tuşa bastıktıktan sonra Create Web Servisi seçmek yeterli
Açılan sihirbazda 2. adımda Java EE 1.5, with support for JAX-WS Annotions seçeneğini işaretleyip Next'e basıyoruz 3.4 ve adımlardaki ws ismi port ismi soap binding seçeneklerini default değerlede bırakıyoruz
5. Bu adımda ws'de kullanılacak metodu seçiyoruz, bizim örneğimizde sadece bir tane var o da getEmployeeDepartment
Bu adımdan sonra özel ayarlamalarınız, güvenlik vs yok ise direkt olarak finish'e basabilirsiniz
Solda Jdeveloper projesi artık web tabanlı olduğu için Web Content altında WEB-INF klasörü ve onun altında web.xml dosyasını olusturdu ayrıca sınıfın iconu webservice olarak değişti
test etmeden once Integrated weblogic'in acik oldugundan emin olmak gerekiyor, eger degilse run -> start server instance(integratedWebLogicServer)'dan acilabilir
6. test etmek icin sınıfın üzerinde sağ tuşa bastıktıktan sonra Test Web Servisi seçtikten sonra
Target seçimi soruyor, application yada WLS secilebilir ben WLS sectim ve Integrated Web Logicde deploy edildikten sonra,
7. http analyzer sayfası açılıyor burada arg0'a istediğiniz degeri girip send request'e basarak test edebilirsiniz.
8. Ayrıca webservisi integrated veya herhangi bir sunucuya deploy edip burada test edebilirsiniz.
Bunun icin ya application war dosyası oluştururak yada herhangi bir sunucuya Jdeveloper'dan baglanarak yapabilirsiniz, ben direkt integrated weblogic'e deploy ettim, asağıda application server navigatorda görebilirsiniz.
Daha sonra integrated weblogic'e
http://localhost:7101/console adresinden weblogic/weblogic1 (onceki versiyonlarda sifre welcome1 olmali) ile giris yaptiktan sonra deploymentlarda
aplikasyonu secerek bagli oldugu webservisin üzerine tıklayarak açılan test sayfasında test edebilirim.
Bütün bunlardan sonra en başa dönersek dikkat ettiyseniz java sınıfında önceki örnekte yarattığımız veritabanı paketini kullanmadık, ama kullanmak isteseydik aşağıdaki paketi kullanarak diğer tüm basamakları uygularsak aynı sonuca ulaşırız
package jawatows;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
public class JavaOracleCallablews {
public JavaOracleCallablews() {
super();
}
public String getEmployeeDepartment(int empno){
String res ="";
int iCounter=0;
int deptid=0;
String deptname="";
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@localhost:1521:XE";
Connection conn = DriverManager.getConnection(url,"hr","hr");
String call = "{ ? = call pkg_EmployeeInformation.get_EmployeeDepartment(?) }";
CallableStatement cstmt = conn.prepareCall(call);
cstmt.setQueryTimeout(1800);
cstmt.registerOutParameter(1, Types.VARCHAR);
cstmt.setInt(2, empno);
cstmt.executeUpdate();
deptname = cstmt.getString(1);
cstmt.close();
conn.close();
} catch (Exception e){
System.out.print("exception handled"+e);
}
return deptname;
}
public static void main (String args[]){
JavaOracleCallablews jw= new JavaOracleCallablews();
String res=jw.getEmployeeDepartment(200);
System.out.println("result: "+res);
}
}