12 Temmuz 2010 Pazartesi
4 Temmuz 2010 Pazar
6 Şubat 2010 Cumartesi
4 Şubat 2010 Perşembe
jsf action call problemi
Sebebini bilemediğim bir şekilde bazen(her zaman değil) bir jsf sayfasındaki objeye bind edilmiş bir action çağırılmıyor. Bunun için hiç bir exception yakalıyamıyor ve hiç bir mesaj ya da stacktrace görüntüleyemiyor olmam da çok ilginç. Birtakım araştırmalarımdan sonra sorunun jsf sayfasındaki alanların managed bean e map edilememesinden kaynaklanıyor olabileceğini okudum. Oysa ki sayfadaki objelerin binding attribute ları doğru bir şekilde manage bean deki karşılıklarına set edilmişti.
Daha sonra çağırılamayan action ın bind edildiği objenin 'immadiate' property sini 'true' yapınca action call sorunu çözüldü ama bu seferde sayfadaki diğer alanlarda sorun çıkmaya başladı. Bu sefer manage edebildiğim exception lar sayesinde bulduğum sorunlu alanların 'immadiate' property lerini 'true' yaptım.
Sorun şimdilik çözüme kavuştu ama sorunsuz çalışan bir uygulamada hiçbirşey değişmeden bu sorunun ortaya çıkması çok ilginç. Ne sorunu tanımlayabildim ne de çözümü anlayabildim.
Bunun jsf de bir bug olduğu yorumlanıyor: http://jan-so.blogspot.com/2008/02/jsf-does-not-call-action-in-managed.html
Daha sonra çağırılamayan action ın bind edildiği objenin 'immadiate' property sini 'true' yapınca action call sorunu çözüldü ama bu seferde sayfadaki diğer alanlarda sorun çıkmaya başladı. Bu sefer manage edebildiğim exception lar sayesinde bulduğum sorunlu alanların 'immadiate' property lerini 'true' yaptım.
Sorun şimdilik çözüme kavuştu ama sorunsuz çalışan bir uygulamada hiçbirşey değişmeden bu sorunun ortaya çıkması çok ilginç. Ne sorunu tanımlayabildim ne de çözümü anlayabildim.
Bunun jsf de bir bug olduğu yorumlanıyor: http://jan-so.blogspot.com/2008/02/jsf-does-not-call-action-in-managed.html
7 Aralık 2009 Pazartesi
sqlserver identity kolonun degerini yenilemek
Şöyleki,
identity kolonlu tablomuzda aradan bazı satırı sildik ve aradaki değerleri kullanmak istiyoruz.
(
IDENTITY
29
30
39
40
...
gibi
30 39 arası silinmiş
ve kullanmak istiyoruz
)
dbcc checkident (mytable, reseed, 30)
not:
1.yapılacak ilk kayıt verilen sayının 1 fazlası olarak kaydedilir.
2.kolon aynı zamanda primary key se 39 a gelindiğinde çıkacak sorun için hazırlıklı olunmalıdır.
identity kolonlu tablomuzda aradan bazı satırı sildik ve aradaki değerleri kullanmak istiyoruz.
(
IDENTITY
29
30
39
40
...
gibi
30 39 arası silinmiş
ve kullanmak istiyoruz
)
dbcc checkident (mytable, reseed, 30)
not:
1.yapılacak ilk kayıt verilen sayının 1 fazlası olarak kaydedilir.
2.kolon aynı zamanda primary key se 39 a gelindiğinde çıkacak sorun için hazırlıklı olunmalıdır.
21 Ekim 2009 Çarşamba
9 Eylül 2009 Çarşamba
Dunning ve Kruger Etkisi
Justin Kruger and David Dunning isimli iki psikoloji profesörü 65 Cornell üniversite öğrencisi üzerinde bazı testler uygulamışlar. Gramer, mantık ve şaka içerikli testler yapmışlar ve öğrencilerden testlerdeki performanslarını tahmin etmelerini istemişler.
Testlerde en düşük %25 e girenler, performans ve yeteneklerini çok daha üzerinde tahmin etmişler. İlk %12 ye girenler ise kendilerini %58 lerde tahmin etmişler.
Çalışmaları ve deney sonuçları, Aralık 1999 da Journal of Personality and Social Psychology dergisi yayınlanmış. Makalede vardıkları sonuç ise:
Testlerde en düşük %25 e girenler, performans ve yeteneklerini çok daha üzerinde tahmin etmişler. İlk %12 ye girenler ise kendilerini %58 lerde tahmin etmişler.
Çalışmaları ve deney sonuçları, Aralık 1999 da Journal of Personality and Social Psychology dergisi yayınlanmış. Makalede vardıkları sonuç ise:
- We propose that those with limited knowledge in a
domain suffer a dual burden: Not only do they reach mistaken
conclusions and make regrettable errors, but their incompetence
robs them of the ability to realize it.
4 Eylül 2009 Cuma
Java client ile servlet kullanarak file upload (Bu cümleyi Türkçe yazmak mümkün mü?)
Diyelim ki java ugulamanız ile bir server'a dosya upload etmeniz gerekiyor.. Apache bunun için http client ve file upload kütüphaneleri oluşturmuş. Bu kütüphaneleri kullanarak basit bir şekilde işinizi halledebiliyorsunuz. Ben client tarafında httpclient-2.0 jar'ı, server tarafında ise fileupload-1.0 jar'ı kullandım. Bunların yeni sürümleri de var ama bunlar da işimi gördü.
Öncelikle client koda bakalım:
public static void upload(String sourceFilePath) {
String servletUrl = "http://some.url/servlet";
try {
HttpClient client = new HttpClient();
MultipartPostMethod mPost = new MultipartPostMethod(servletUrl);
// Connection timeout in milliseconds
client.setConnectionTimeout(8000);
File file = new File(sourceFilePath);
mPost.addParameter(file.getName(), file);
int statusCode = client.executeMethod(mPost);
mPost.releaseConnection();
if (statusCode == 2000) {
throw new Exception("Dosya upload edilemedi");
}
// diğer işlemler....
} catch (Exception ex) {
// hatayla ilgili kod...
}
}
Karşı tarafta da bu isteği karşılayacak bir servlet yazmak gerekiyor:
protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
String dosyaDizini="D:\\";
try {
DiskFileUpload diskFileUpload = new DiskFileUpload();
// Maksimum kabul edilebilecek dosya boyutu
diskFileUpload.setSizeMax(1000000);
List requestItems = diskFileUpload.parseRequest(request);
Iterator iterator = requestItems.iterator();
while (iterator.hasNext()) {
FileItem fileItem = (FileItem) iterator.next();
if (!fileItem.isFormField()) {
File file= new File(dosyaDizini,fileItem.getName());
fileItem.write(file);
// CLİENT'A BAŞARI MESAJI
response.sendError(1000);
}
}
} catch (Exception ioex) {
// HATA OLUŞTU MESAJI
response.sendError(2000);
}
}
Tabi ki bu api ile dosya dışında metinsel parametreler göndermek de mümkün.
Http client ile ilgili bilgi: http://hc.apache.org/httpcomponents-client/index.html
File upload api için: http://commons.apache.org/fileupload/
3 Eylül 2009 Perşembe
24 Ağustos 2009 Pazartesi
Oracle veritabanında belli sütunların saklanması
Oracle veritabanında sadece bazı sütünlardaki (kredi kartı no ya da TC Kimlik No gibi) bilgilerin saklanması gerekebilir. Bu alanları şifrelemeden gözlerden saklamak istersek Oracle 10g'den sonra kullanılabilen Virtual Private Database (VPD) "data masking" işimize yarıyor.
Bunun avantajı, veritabanında alanlar decyrpt - encrypt edilmediğinden performans kaybı yaşatmaması..
Önce bir fonksiyon oluşturuyoruz:
CREATE OR REPLACE
FUNCTION vpd_function (obj_owner IN VARCHAR2, obj_name IN VARCHAR2)
RETURN VARCHAR2
AS
BEGIN
RETURN '1=2';
END vpd_function;
/
Bu fonksiyonun döndürdüğü değer (1=2) maskelemek istediğimiz sütunlar için bir where cümlesi vazifesi görecek. Her zaman yanlış olacağından bu alanlar boş gelmiş olacak.
Şimdi bu fonksiyonu kullanacak bir policy tanımlıyoruz:
BEGIN
DBMS_RLS.ADD_POLICY(object_schema=> 'ŞEMA_ADI',
object_name=> 'TABLO_ADI',
policy_name=> 'POLICY_ADI',
function_schema=> 'ŞEMA_ADI',
policy_function=> 'vpd_function',
sec_relevant_cols=> 'VIRGULLE_AYRILMIŞ_SÜTUN_ADLARI',
policy_type => DBMS_RLS.SHARED_STATIC,
sec_relevant_cols_opt=> dbms_rls.ALL_ROWS);
END;
/
Burada POLICY_ADI'na istediğiniz herhangi bir isim verebilirsiniz.
Son olarak bu policy'nin dışında kalacak kullanıcıya izin veriyoruz:
grant exempt access policy to KULLANICI;
Artık ister program kullansın ister yazılım içinde bağlantı kursun, ilgili tabloda select çeken kullanıcı tüm satırları görecek ama belirttiğimiz sütunlar ona boş görünecektir.
Bunun avantajı, veritabanında alanlar decyrpt - encrypt edilmediğinden performans kaybı yaşatmaması..
Önce bir fonksiyon oluşturuyoruz:
CREATE OR REPLACE
FUNCTION vpd_function (obj_owner IN VARCHAR2, obj_name IN VARCHAR2)
RETURN VARCHAR2
AS
BEGIN
RETURN '1=2';
END vpd_function;
/
Bu fonksiyonun döndürdüğü değer (1=2) maskelemek istediğimiz sütunlar için bir where cümlesi vazifesi görecek. Her zaman yanlış olacağından bu alanlar boş gelmiş olacak.
Şimdi bu fonksiyonu kullanacak bir policy tanımlıyoruz:
BEGIN
DBMS_RLS.ADD_POLICY(object_schema=> 'ŞEMA_ADI',
object_name=> 'TABLO_ADI',
policy_name=> 'POLICY_ADI',
function_schema=> 'ŞEMA_ADI',
policy_function=> 'vpd_function',
sec_relevant_cols=> 'VIRGULLE_AYRILMIŞ_SÜTUN_ADLARI',
policy_type => DBMS_RLS.SHARED_STATIC,
sec_relevant_cols_opt=> dbms_rls.ALL_ROWS);
END;
/
Burada POLICY_ADI'na istediğiniz herhangi bir isim verebilirsiniz.
Son olarak bu policy'nin dışında kalacak kullanıcıya izin veriyoruz:
grant exempt access policy to KULLANICI;
Artık ister program kullansın ister yazılım içinde bağlantı kursun, ilgili tabloda select çeken kullanıcı tüm satırları görecek ama belirttiğimiz sütunlar ona boş görünecektir.
8 Temmuz 2009 Çarşamba
Halı Saha Maçı
Sevgili arkadaşlar
Maç bugün (8 Temmuz 2009) 19:00-20:00 saatleri arasında olacak şekilde ayarlandı. Halı sahanın adresi:
Tuana
4.Cad. No:24 Yıldızevler/Çankaya
Tel:441 76 75
Burası atakule'ye oldukça yakın.. Harita üzerinde gösterirsek:
Daha Büyük Haritayı Görüntüle
Akşam görüşmek üzere
Maç bugün (8 Temmuz 2009) 19:00-20:00 saatleri arasında olacak şekilde ayarlandı. Halı sahanın adresi:
Tuana
4.Cad. No:24 Yıldızevler/Çankaya
Tel:441 76 75
Burası atakule'ye oldukça yakın.. Harita üzerinde gösterirsek:
Daha Büyük Haritayı Görüntüle
Akşam görüşmek üzere
26 Haziran 2009 Cuma
Michael Jackson öldü...
20 sene önce kendi çabalarımızla öğrenmeye çalışmış, bir türlü becerememiştik. Moon walk nasıl yapılır öğrenmek isteyenler için: http://www.youtube.com/watch?v=E_FzgtLVzbIMoon walk'ı ustanın kendisinden izlemek için: http://www.youtube.com/watch?v=s7MmEMrCRfc
2 Haziran 2009 Salı
13 Mayıs 2009 Çarşamba
SQL SERVER String Functions
SELECT [Kolon1] ,
STUFF([Kolon1],3,9,'-')
+STUFF( substring([Kolon1],3,7),3,9,'-')
+STUFF( substring([Kolon1],5,5),3,0,'-')
FROM [TABLO1]
WHERE
LEN ([Kolon1])= 9
and
CHARINDEX('-' , [Kolon1])=0
and
CHARINDEX('.' , [Kolon1])=0
and
CHARINDEX('/' , [Kolon1])=0
sonuçlar
123546789
12-34-56-789
STUFF([Kolon1],3,9,'-')
+STUFF( substring([Kolon1],3,7),3,9,'-')
+STUFF( substring([Kolon1],5,5),3,0,'-')
FROM [TABLO1]
WHERE
LEN ([Kolon1])= 9
and
CHARINDEX('-' , [Kolon1])=0
and
CHARINDEX('.' , [Kolon1])=0
and
CHARINDEX('/' , [Kolon1])=0
sonuçlar
123546789
12-34-56-789
Etiketler:
charindex,
concat,
len,
sql server,
string functions,
stuff,
substring
3 Şubat 2009 Salı
11 Ocak 2009 Pazar
JAX-WS ile Güvenlik Bilgilerini Almak
Eğer JAX-WS kullanırken bir şekilde servisinize gönderilen mesajın içindeki kullanıcı bilgilerine ulaşmanız icab ederse, web servisinize küçük eklemeler yapmanız yetecektir:
@WebService()
public class LoginWebService {
@Resource
private WebServiceContext context;
@WebMethod(operationName = "operasyon")
public void operasyon() {
ServletContext servletContext = (ServletContext)context.getMessageContext().get(MessageContext.SERVLET_CONTEXT);
String kullaniciadi = servletContext.getInitParameter("username");
String sifre = servletContext.getInitParameter("password");
//Sonrası size kalmış! :-))
}
}
@WebService()
public class LoginWebService {
@Resource
private WebServiceContext context;
@WebMethod(operationName = "operasyon")
public void operasyon() {
ServletContext servletContext = (ServletContext)context.getMessageContext().get(MessageContext.SERVLET_CONTEXT);
String kullaniciadi = servletContext.getInitParameter("username");
String sifre = servletContext.getInitParameter("password");
//Sonrası size kalmış! :-))
}
}
Netbeans, Glassfish ve Türkçe!
Windows üzerinde Netbeans ve Glassfish kullanırken bir takım problemler yaşıyorsanız ilk şüphelenmeniz gereken yer dil ve bölge ayarlarıdır. Eğer Glassfish'i başlatırken abuk subuk, internette aradığınızda bile bulamadığınız bir takım hatlarla karşılaşıyorsanız,
1. Netbeans'in kurulu olduğu klasörde etc diye bir klasör bulunuyor. Bunun içinde netbeans.conf dosyasını bir text editör ile açıp netbeans_default_options diye başlayan satırın en sonuna (ama tırnak işaretinin içinde kalacak şekilde
--locale tr_TR
ifadesini ekleyin.
Glassfish'in kurulu olduğu klasörde "lib" klasöründe "Launcher.xml" ve "processLauncher.xml" dosyaları var. Bunların içine
<sysproperty key="user.language" value="tr-TR"/></sysproperty>
satırını ekleyin.
Son olarak uygulama sunucumuzun ilgili domain klasöründe domain.xml diye bir
dosya var. Bunun içine de ilgili yere
<jvm-options>-Duser.language=tr-TR</jvm-options>
satırını eklemelisiniz.
1. Netbeans'in kurulu olduğu klasörde etc diye bir klasör bulunuyor. Bunun içinde netbeans.conf dosyasını bir text editör ile açıp netbeans_default_options diye başlayan satırın en sonuna (ama tırnak işaretinin içinde kalacak şekilde
--locale tr_TR
ifadesini ekleyin.
Glassfish'in kurulu olduğu klasörde "lib" klasöründe "Launcher.xml" ve "processLauncher.xml" dosyaları var. Bunların içine
<sysproperty key="user.language" value="tr-TR"/></sysproperty>
satırını ekleyin.
Son olarak uygulama sunucumuzun ilgili domain klasöründe domain.xml diye bir
dosya var. Bunun içine de ilgili yere
<jvm-options>-Duser.language=tr-TR</jvm-options>
satırını eklemelisiniz.
3 Aralık 2008 Çarşamba
Java web uygulamasında web server data source kullanımı
Web uygulamasında web server data source kullanımı için:
1.web serverda data source oluşturuluyor.(web logic için console arayüzü kullanılabilir.)
2.Uygulama web.xml de resource-ref elmanı tanımlanıyor. Bu resource-ref elmanı dış bir kaynağa(burada data source) web uygulamasıreferansı tanımı için kullanılıyor. Buradaki res-ref-name elmanı(XXX) web server da oluşturulan data source jndi name i olacak.
Ör:
<resource-ref>
<res-ref-name>XXX</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
3.Connection ın alındığı ilgili sınıfta, connection ı döndüren metodta javax.naming.Context objesi oluşturup bu objeninlookup metoduna web server da oluşturulan data source jndi name'ini parametre olarak geçerek javax.sql.DataSource objesi elde ediliyor.
Ör:
public static synchronized Connection getConnection() throws Exception {
try
{
Context init = new InitialContext();
Context ctx = (Context) init.lookup("java:comp/env");
DataSource ds = (DataSource) ctx.lookup("XXX");
Connection connection = ds.getConnection();
return (connection);
}
catch (Exception e)
{
throw new Exception(e.getMessage());
}
}
1.web serverda data source oluşturuluyor.(web logic için console arayüzü kullanılabilir.)
2.Uygulama web.xml de resource-ref elmanı tanımlanıyor. Bu resource-ref elmanı dış bir kaynağa(burada data source) web uygulamasıreferansı tanımı için kullanılıyor. Buradaki res-ref-name elmanı(XXX) web server da oluşturulan data source jndi name i olacak.
Ör:
<resource-ref>
<res-ref-name>XXX</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
3.Connection ın alındığı ilgili sınıfta, connection ı döndüren metodta javax.naming.Context objesi oluşturup bu objeninlookup metoduna web server da oluşturulan data source jndi name'ini parametre olarak geçerek javax.sql.DataSource objesi elde ediliyor.
Ör:
public static synchronized Connection getConnection() throws Exception {
try
{
Context init = new InitialContext();
Context ctx = (Context) init.lookup("java:comp/env");
DataSource ds = (DataSource) ctx.lookup("XXX");
Connection connection = ds.getConnection();
return (connection);
}
catch (Exception e)
{
throw new Exception(e.getMessage());
}
}
13 Kasım 2008 Perşembe
OC4J Üzerinde Netbeans ile hazırlanmış JAX-WS Webservisleri Çalıştırmak
Şimdi... Bu iş biraz karışık... JAX-WS standardı kullanmak için java versiyonu 1.5 ve üstü olmak zorunda. Bunun sebebi JAX-WS standardında annotation'ların kullanılıyor olması. Bu da biliyorsunuz 1.5'ten sonra gelen bir özellik.... Şu an resmi olarak Java 5 standardını destekleyen hangi application server'lar var bir sayalım:
<target name="-pre-dist">
<taskdef name="wsgen" classname="com.sun.tools.ws.ant.WsGen">
<classpath path="${javac.classpath}"/>
</taskdef>
<echo>running wsgen - quixotic</echo>
<wsgen
debug="true"
keep="true"
destdir="build/web/WEB-INF/classes"
resourcedestdir="build/web/WEB-INF/classes"
sei="tr.com.SINIF_ADI">
<classpath>
<pathelement path="${javac.classpath}"/>
<pathelement location="${java.home}/../lib/tools.jar"/>
<pathelement location="build/web/WEB-INF/classes"/>
</classpath>
</wsgen>
</target>
Bundan sonra derlediğimiz kod hem Glassfih hem OC4J üzerinde deploy edilebilir hale gelecektir. Tabi netbeans'de project properties'den library olarak JAX-WS kütüphanesini eklemiş olmak şartıyla!
Hâlâ birşeyleri çözebiliyor olmak ne güzel! :-))
- Glassfish
- Tomcat 6
- Oracle Weblogic
<target name="-pre-dist">
<taskdef name="wsgen" classname="com.sun.tools.ws.ant.WsGen">
<classpath path="${javac.classpath}"/>
</taskdef>
<echo>running wsgen - quixotic</echo>
<wsgen
debug="true"
keep="true"
destdir="build/web/WEB-INF/classes"
resourcedestdir="build/web/WEB-INF/classes"
sei="tr.com.SINIF_ADI">
<classpath>
<pathelement path="${javac.classpath}"/>
<pathelement location="${java.home}/../lib/tools.jar"/>
<pathelement location="build/web/WEB-INF/classes"/>
</classpath>
</wsgen>
</target>
Bundan sonra derlediğimiz kod hem Glassfih hem OC4J üzerinde deploy edilebilir hale gelecektir. Tabi netbeans'de project properties'den library olarak JAX-WS kütüphanesini eklemiş olmak şartıyla!
Hâlâ birşeyleri çözebiliyor olmak ne güzel! :-))
Kaydol:
Kayıtlar (Atom)




