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


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;
}
}

Java da Veritabanı, Tablo, Kayıt, Connection Pool ve Resource Oluşturulması.

Yapmak istediğimiz şey:
JavaDB içinde
  1. bir veritabanı oluşturmak
  2. ve içine bir tablo
  3. ve bir kaç kayıt ekleyip,
  4. Glass Fish application server ında Connection Pool oluşturup
  5. Resource a bağlamak.
Önce JavaDb servisini başlatalım.

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 :


Adını, kaynağın tipini ve VT yi seçip devam ediyoruz:

Kendi Datasource Classname i gösterdi. Detaylı değişiklikler yapılabilir ama biz yapmıyoruz. Sadece attribute lerini düzenliyoruzki hangi DB yi hangi kullanıcı adı ve şifresi ile hangi URL üzerinden erişebilecek girelim:


İşte o değişiklikler:


Artık Connection Pool eklendi.


Şimd bu poolu gösterecek bir Resource oluşturacağız.



O işte tamamdır. Artık JNDI adını bir test edelim. Ping ile erişebilecek miyiz? A işte oldu :)

İşte bu kadar.

15 Kasım 2009 Pazar

javada getAttribute - setParameter


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:
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


  1. İstemci tarafından HTTP istekleri olarak sunucumuza SOAP paketleri düşer.

  2. HTTP handler'a geçen bu istekler uygun SOAP servletine yönlendirilir. Servletimiz HTTP talebinin decode edilmesinden mesuldür artık.

  3. İstek SOAP sunucu tarafından işlenerek HTTP/SOAP encodera gönderilir.
  4. HTTP/SOAP encoderımız cevabı bir HTTP cevabına sarar ve SOAP servletimize geri gönderir.

  5. 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:

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:


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:

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.


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.

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));
}

}