package tags;
import java.io.StringWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import javax.sql.DataSource;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.SimpleTagSupport;
public class DbTag extends SimpleTagSupport {
private String jndiName;
@Override
public void doTag() throws JspException {
try {
JspWriter out = getJspContext().getOut();
/**
* Önce tagımızın bodysini almak için getJspBody i kullanıyoruz. JspFragment
* tipinde dönen nesnenin invoke metoduna içi boş bir StringWriter gönderiyoruz
* ki içi tagın body si ile doldurulsun.
*/
StringWriter swriter = new StringWriter();
JspFragment f = getJspBody();
if (f != null) {
f.invoke(swriter);
}
/* Artık tagın body si elimizde. Body içinde bir SQL sorgum olacak.
* Onu da execute jndi attribute undeki resource ile execute edeceğiz. */
String sQuery = swriter.toString();
/** DB işi için aşağıdaki sırayla nesneler oluşturulup query çalıştırılacak.
* Context
* Datasource
* Connection
* PreparedStatement
* Result
*/
Context ctx = new InitialContext();
DataSource datasource = (DataSource) ctx.lookup(this.jndiName);
Connection con = datasource.getConnection();
PreparedStatement ps = con.prepareStatement(sQuery);
ResultSet result = ps.executeQuery();
// Resultın içindeki tablo hakkında bilgiye ResultSetMeta yı kullanıyoruz
ResultSetMetaData resultMeta = result.getMetaData();
// Kolon bilgilerini tablonun başlığı olarak yazalım.
out.println("<table>");
out.println("<thead><tr>");
for(int i=1;i<resultMeta.getColumnCount()+1;i++){
out.println("<th>"+resultMeta.getColumnName(i)+"</th>");
}
out.println("</tr></thead><tbody>");
// Satır satır result içeriğini tabloya yazalım.
while(result.next()){
out.println("<tr>");
for(int i=1;i<resultMeta.getColumnCount()+1;i++){
out.print("<td>"+result.getString(i)+"</td>");
}
out.println("</tr>");
}
out.println("</tbody></table>");
} catch (Exception ex) {
ex.printStackTrace(); // Hatayı tüm detayları ile alt alta yazıyor.
}
}
public void setJndiName(String jndiName) {
this.jndiName = jndiName;
}
}
Aklımda Kalası Kelimeler
* давайте работать вместе
* Zarf ve Mazruf, Zerafet(xHoyratlık) ile aynı kökten(za-ra-fe) gelir
* Bedesten
* Suç subuta ermiştir - Suç sabit olmuştur
Java etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Java etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
21 Kasım 2009 Cumartesi
Java da Tag Handler Kodu
Java da Veritabanı, Tablo, Kayıt, Connection Pool ve Resource Oluşturulması.
Yapmak istediğimiz şey:
JavaDB içinde
Başladı :)
Bir veritabanı oluşturalım :
VT nin bilgilerini girelim:
Oluştu ama ben yukarıdaki username ve password ile oluşturmadım. Bakın "admin on ADMIN" yazıyor. Kullanıcı adı admin, şifresini de adminadmin olarak oluşturdum. Şimdi bu DB ye bağlanalım.
Bağlandık. İçine bir tablo ekleyelim:
Ekledik:
Bir kaç kayıt ekledik. Insert Into ile. View Data ile içeriğini görelim:
VT mizin özelliklerini görüyoruz:
Glass fish application server ımıza bağlanıyoruz ve yeni bir connection pool oluşturuyoruz :
JavaDB içinde
- bir veritabanı oluşturmak
- ve içine bir tablo
- ve bir kaç kayıt ekleyip,
- Glass Fish application server ında Connection Pool oluşturup
- Resource a bağlamak.
Başladı :)
Bir veritabanı oluşturalım :
VT nin bilgilerini girelim:
Oluştu ama ben yukarıdaki username ve password ile oluşturmadım. Bakın "admin on ADMIN" yazıyor. Kullanıcı adı admin, şifresini de adminadmin olarak oluşturdum. Şimdi bu DB ye bağlanalım.
Bağlandık. İçine bir tablo ekleyelim:
Ekledik:
Bir kaç kayıt ekledik. Insert Into ile. View Data ile içeriğini görelim:
VT mizin özelliklerini görüyoruz:
Glass fish application server ımıza bağlanıyoruz ve yeni bir connection pool oluşturuyoruz :
Etiketler:
Application Server,
Connection Pool,
Database,
Glass Fish,
Java,
Resource,
Table
15 Kasım 2009 Pazar
25 Ekim 2009 Pazar
Java da Thread
Threadi tanımak için bu makaleyi okuyabilirsiniz.
Öncelikle java Thread sınıfı ve Runnable interfacesini bize hizmet etsinler diye verir. Thread sınıfının Runnable arayüzünün implemente edilmiş sınıfların objesini kabul eden bir yapıcı metodu vardır. Java da bir kalıtım yapacak olursak ancak bir sınıftan extend edebiliriz(Single Inheritance).
Single Inheritance yüzünden bizde Runnable arayüzünü kullanırız. Böylece Thread işlemlerine kendi sınıfımızı sokabiliriz.
Yazdığınız herhangi bir java programının başlangıç yordamı public sınıfın main metodudur. Bu metod işlerken standart program için bir Thread oluşur ve program sonlandığında Thread’ da sonlanır. Ancak bununla birlikte bir sınıf içindeki diğer yordamlarında hem programın bir parçasıymışçasına hem de programdan bağımsız işlemci gücü kullanarak çalışması Thread sayesinde yapılabilir. Bu iş parçacıkları ana iş parçacığı içinden yönetilebilir. Ref:JAVA İçinde Thread Kullanımı
Bunun sonucunda çıktımız aşağıdaki gibi olacaktır. Artık first thread ilk çalışıyor dikkat ederseniz.
ile threadimiz background thread olarak çalışır. Uygulama bitirilmek istendiği zaman background threadler kapanmayı geciktirmez.Ama foreground threadler bitirilmeden uygulama kapatılamaz.
Kodumuz aşağıdaki gibi olacak:
Sonuç foreground thread olduğu için ikinci thread bitinceye kadar bekleyecek şekilde yani aşağıdaki gibi olacaktır.
10 sn bekleme bittikten sonra;
Bir threadi durdurmak için önceden stop() fonksiyonu kullanılırken şimdilerde abilerin tavsiyesi ile bir şart değişkeni kullanılarak işleyiş durdurulmalıdır.
Öncelikle java Thread sınıfı ve Runnable interfacesini bize hizmet etsinler diye verir. Thread sınıfının Runnable arayüzünün implemente edilmiş sınıfların objesini kabul eden bir yapıcı metodu vardır. Java da bir kalıtım yapacak olursak ancak bir sınıftan extend edebiliriz(Single Inheritance).
SINGLE INHERITANCE:
Bu da java da single inheritance olarak geçmektedir. Peki biz bir sınıf yaratalım ve ata sınıfı A olsun. Ama aynı zamanda sınıfımızda Thread işlemleri de yapabilmek için Thread sınıfından türetelim. Bunu aşağıdaki gibi yapmak gerekiyor.
class A {
// falanda filan
}
class B extends A, Thread{ // Hata verecektir. Single Inheritance a göre.
// falanda filan
}
Ama burada hata oluşur çünkü Hem A sınıfından hem Thread sınıfından sınıfımızı extend edemeyiz.
Single Inheritance yüzünden bizde Runnable arayüzünü kullanırız. Böylece Thread işlemlerine kendi sınıfımızı sokabiliriz.
class B extends A implements Runnable{
// Falanda filan
}
Yazdığınız herhangi bir java programının başlangıç yordamı public sınıfın main metodudur. Bu metod işlerken standart program için bir Thread oluşur ve program sonlandığında Thread’ da sonlanır. Ancak bununla birlikte bir sınıf içindeki diğer yordamlarında hem programın bir parçasıymışçasına hem de programdan bağımsız işlemci gücü kullanarak çalışması Thread sayesinde yapılabilir. Bu iş parçacıkları ana iş parçacığı içinden yönetilebilir. Ref:JAVA İçinde Thread Kullanımı
Thread Önceliklerini Belirlemek
Bunun sonucunda çıktımız aşağıdaki gibi olacaktır. Artık first thread ilk çalışıyor dikkat ederseniz.
Arkaplan ve Önplan threadleri (Foreground, Background Threads)
thObj.setDaemon(true); // Background Thread olsun
ile threadimiz background thread olarak çalışır. Uygulama bitirilmek istendiği zaman background threadler kapanmayı geciktirmez.Ama foreground threadler bitirilmeden uygulama kapatılamaz.
Kodumuz aşağıdaki gibi olacak:
Sonuç foreground thread olduğu için ikinci thread bitinceye kadar bekleyecek şekilde yani aşağıdaki gibi olacaktır.
10 sn bekleme bittikten sonra;
Threadi Durdurmak
Bir threadi durdurmak için önceden stop() fonksiyonu kullanılırken şimdilerde abilerin tavsiyesi ile bir şart değişkeni kullanılarak işleyiş durdurulmalıdır.
public class Thredim extends Thread{
public void run(){
while(!timeToStop){
// birşeyler yap
}
}
void StopToRunning(){
timeStop= true;
}
}
12 Ekim 2009 Pazartesi
SOAP Sunucu istekleri nasıl işler
İstemci tarafından HTTP istekleri olarak sunucumuza SOAP paketleri düşer.
HTTP handler'a geçen bu istekler uygun SOAP servletine yönlendirilir. Servletimiz HTTP talebinin decode edilmesinden mesuldür artık.
- İstek SOAP sunucu tarafından işlenerek HTTP/SOAP encodera gönderilir.
HTTP/SOAP encoderımız cevabı bir HTTP cevabına sarar ve SOAP servletimize geri gönderir.
-
SOAP servletimizde istemcimize iletir.
SOAP için WIKIPEDIA ya bakabilirsiniz.
GODORO da güzel bir anlatım bulabilirsiniz
4 Ekim 2009 Pazar
Javada interface ve abstract kavramları ve sınıf türetme
package abstractpkg;
interface intrface {
// interface içinde public
// modifier kullanılabiliyor.
public int intrfaceMetot_1();
void intrfaceMetot_2();
//C#tan farklı olarak normal/static
//sabit tanımlanabiliyor
final int yas = 10;
}
interface intrface1 {
int intrface_1_metot();
}
abstract class abs {
abstract void absMetot();
void absMetot_2(String s1){
// birşeyler yapsın
// anlayalımki abstractlerin
// bodyli metotları da olduğunu
}
}
abstract class abs1 extends abs implements intrface, intrface1 {
public String sdegisken;
abstract void abs_1_Metot();
}
class cls extends abs1 {
@Override
void abs_1_Metot() {
}
@Override
void absMetot() {
}
public int intrfaceMetot_1() {
}
public void intrfaceMetot_2() {
}
public int intrface_1_metot() {
}
}
class clsInterfaceten implements intrface,intrface1{
public int intrfaceMetot_1() {
}
public void intrfaceMetot_2() {
}
public int intrface_1_metot() {
}
}
public class Main {
public static void main(String[] args) {
}
}
Interface kullanımına güzel bir örnek: http://www.sourcecodesworld.com/articles/java/java-data-structures/Comparing_Objects.asp
Javada Interface
JAVA:
C#:
interface ii{
// public yazmaya gerek yok
void sayma();
// public yazabilirsinizde
public int say();
// java da interface içine
// sabit tanımlanabilir.
final int yas = 10;
}
class cc implements ii{
public int say() {
return yas; // 10 doner
}
public void sayma() {
}
}
C#:
interface ii
{
// The modifier 'public' is not valid
// for this item
public int say(); // HATALI
void sayma();
// Interfaces cannot contain fields
const int yas = 10; // HATALI
}
class cc : ii
{
public void sayma()
{
}
public int say()
{
// interface içinde field tanımlanamayacağı
// için erişilemez
return 4444;
}
}
Javada Enum
Öncelikle bilinmesi gereken javada enum un bir class gibi davrandığıdır. Ama classtan farklı yapıcı metotları daima private olmak zorunda. Bir de yapıcı metotlarının parametre sayısı enum değerlerine parantez açarak verilebiliyor.
Aşağıdali örnek çok güzel anlatıyor:
Bu da sonucu(179 verirsek giriş değeri olarak:
Aşağıdali örnek çok güzel anlatıyor:
package planets;
enum Planet {
// parantez içindeki parametreler
// yapıcı metoda parametre olarak atanır
MERCURY (3.303e+23, 2.4397e6),
VENUS (4.869e+24, 6.0518e6),
EARTH (5.976e+24, 6.37814e6),
MARS (6.421e+23, 3.3972e6),
JUPITER (1.9e+27, 7.1492e7),
SATURN (5.688e+26, 6.0268e7),
URANUS (8.686e+25, 2.5559e7),
NEPTUNE (1.024e+26, 2.4746e7);
private final double mass; // in kilograms
private final double radius; // in meters
Planet(double mass, double radius) {
this.mass = mass;
this.radius = radius;
}
private double mass() { return mass; }
private double radius() { return radius; }
// universal gravitational constant (m3 kg-1 s-2)
public static final double G = 6.67300E-11;
double surfaceGravity() {
return G * mass / (radius * radius);
}
double surfaceWeight(double otherMass) {
return otherMass * surfaceGravity();
}
public static void main(String[] args) {
if (args.length != 1) {
System.err.println("Usage: java Planet");
System.exit(-1);
}
double earthWeight = Double.parseDouble(args[0]);
double mass = earthWeight/EARTH.surfaceGravity();
for (Planet p : Planet.values())
System.out.printf("Your weight on %s is %f%n",
p, p.surfaceWeight(mass));
}
}
Bu da sonucu(179 verirsek giriş değeri olarak:
run:
Your weight on MERCURY is 67,618613
Your weight on VENUS is 161,994839
Your weight on EARTH is 179,000000
Your weight on MARS is 67,793956
Your weight on JUPITER is 452,969797
Your weight on SATURN is 190,816781
Your weight on URANUS is 162,017769
Your weight on NEPTUNE is 203,760725
BUILD SUCCESSFUL (total time: 0 seconds)
Javada FINAL kavramı
Eğer classın başına final yazarsak, extend edemeyiz.
Eğer metodun başına final yazarsak, override edemeyiz.
Eğer değişkenin başına final yazarsak, değişkene değer atamalıyız ve daha sonra da değişkenin değerini değiştiremeyiz.
Başlatıcılarında değer atamamızda sorun yok.
Yapıcı metotta değer atamamızda da sorun yok.
Ama bir değer atamamışsak gümleriz. Bakınız aşağıdaki resime:
STATIC FINAL nasıl olacak peki?
Eeee değişken static ise başlatıcının da static ifadesi içermesi gerekiyor. Statik olduğu içinde yapıcı metotda değer atayamayız.
Olması gereken:
Eğer metodun başına final yazarsak, override edemeyiz.
Eğer değişkenin başına final yazarsak, değişkene değer atamalıyız ve daha sonra da değişkenin değerini değiştiremeyiz.
Başlatıcılarında değer atamamızda sorun yok.
Yapıcı metotta değer atamamızda da sorun yok.
Ama bir değer atamamışsak gümleriz. Bakınız aşağıdaki resime:
STATIC FINAL nasıl olacak peki?
Eeee değişken static ise başlatıcının da static ifadesi içermesi gerekiyor. Statik olduğu içinde yapıcı metotda değer atayamayız.
Olması gereken:
package primitive;
public class Main {
// statik olduğu için constructorda da başlatılamaz.
static final int sayi = 10;
// bu olur du ama static final degisken olsaydı
static final String isim;
static
{
isim = "soyadi";
}
public Main() {
}
public static void main(String[] args) { }
}
Java'da super ve this kavramının yapıcı metotlarda kullanımı
super ve this ile yapıcı metot seçimi.
Biliyoruz ki super ile base sınıfın yapıcısına this ile de yazdığımız sınıfın diğer bir yapıcısına erişiyoruz.
Biliyoruz ki super ile base sınıfın yapıcısına this ile de yazdığımız sınıfın diğer bir yapıcısına erişiyoruz.
package poly;
import java.lang.String;
class Employee {
String adi;
String soyadi;
int yas;
public Employee() {
}
public Employee(String adi) {
}
public Employee(String adi, String soyadi) {
}
public void func() {
System.out.println("Bu empden");
}
}
class Manager extends Employee {
public Manager(String adi) {
super(adi); // Employee sınıfının 2. yapıcısını çağır
// Eğer biz bir parametre alan yapıcı tanımlarsak
// Default yapıcıyıda silersek super(adi) hata verir.
}
public Manager(int yas) {
}
public Manager(String adi, String soyadi, int yas) {
this(adi); // Manager sınıfının 2. yapıcısını çağır
// Şimdi soyadi ve yasiyla ne yapacaksak.
// kodlarini yazariz.
}
}
public class Main {
public static void main(String[] args) {
Manager mng = new Manager("adi", "soyadi", 21);
}
}
Java da ki ... (params), Array'e karşı
C# ta params vardı hatırlarsanız.
Java da ise ... var :)
Aslında bu [] ile aynı. Hadi resimle bitirelim bu işide.
Java da ise ... var :)
Aslında bu [] ile aynı. Hadi resimle bitirelim bu işide.
Javada Class Yapıları
package poly;
class Employee{
public void func() {
System.out.println("Bu empden");
}
}
class Manager extends Employee{
public void func() {
System.out.println("Bu mngden");
}
}
public class Main {
public static void main(String[] args) {
Employee emp1 = new Employee();
emp1.func();
Employee emp2 = new Manager();
emp2.func();
Manager mng = new Manager();
mng.func();
Manager mng1 = new Employee();
mng1.func();
/* SONUCLAR:
run:
Bu empden
Bu mngden
Bu mngden
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - incompatible types
required: poly.Manager
found: poly.Employee
at poly.Main.main(Main.java:28)
Java Result: 1
BUILD SUCCESSFUL (total time: 3 seconds)
*/
}
}
13 Eylül 2009 Pazar
Java da static kavramı
/**
static degisken ve metod lara C# tan farkli olarak JAVA da, siniftan türetilmis objelerden(örneklerden, nesnelerden)
erisilebilir.
*/
public class Cem
{
static String yazi;
public Cem()
{
yazi = "yazzzzz";
}
public static void main(String[] args)
{
yaz("sininftan: " + Cem.yazi);
Cem ornek = new Cem();
yaz("ornekten: " + ornek.yazi);
Cem.yaz("statik metoda C# tan eristigimiz gibi eriselim");
ornek.yaz("statik metoda örnekten de erisebiliyorum");
}
public static void yaz(String s)
{
//System.out.println("dd");
System.out.println(s);
}
}
Java da overload.
/**
Çalıştırmak istediğimiz metod topla(3,5) olsun.
Elimizde overload edilmiş:
topla(int a, long b)
topla(long a, long b) olsun.
Ama aradığımız metod topla(int a, int b) idi.
E yok ama... O zaman en yakın olan
topla(int a, long b) metodunu çalıştırır.
o da olmasaydı
topla(long a, long b) metodunu çalıştırırdı.
*/
public class OverLoad {
public static String topla(int a,long l)
{
return "int long";
}
public static String topla(long l1,long l2)
{
return "long long";
}
public static void main(String[] s)
{
System.out.println(topla(3,5));
}
}
Kaydol:
Kayıtlar (Atom)