Mehmet Nuri Deveci Software Enthusiast A Java Developer who loves learning new stuff. Working in Vancouver BC, Canada

© 2020 Powered by Your browser does not support SVG

Writing Spring Boot Applications with Kotlin 30 SEP 2017

A couple of years ago JetBrains announced that they are working on a new JVM language for their internal works. And later on they announce this new language, Kotlin. Ever since then the language got more famous, and got the attention of Google. And now, Google officially supports in Android developments.

Data Encryption with JPA (Hibernate) and Jasypt 15 MAR 2017

In this post I am going to give a quick demo about how Jasypt (Encryption framework for Java) can be used with Hibernate.

JPA (Hibernate) Database Auditing 22 SEP 2016

For developers, it is crucial to keep the history of the codes in a project. Such tools are named as Version Control Systems like Git, CVS, SVN etc. You can find all the changes with their descriptions and authors. Why don’t a business unit need such a feature like this. They may need a revision of a database entity in a defined time period.

Spring Boot & AngularJS Projesi - CRUD Ekranları 10 JUL 2016

Merhabalar,

Önceki yazılarımda ilk girişimlerini yaptığımız Spring Boot & AngularJS Projesi’nde son adım olarak, veritabanında kaydedeceğimiz nesnelerin CRUD(Create/Read/Update/Delete) ekranlarını gerçekleştireceğiz.

Spring Boot & AngularJS Projesi - Ön Yüz Ekleme 15 JUN 2016

Merhaba,

Spring Boot ve AngularJS ile uygulama geliştirme yazısının ikinci adımındasınız. İlk yazı için linki tıklayabilirsiniz.

Spring Boot & AngularJS Projesi - Başlangıç 10 APR 2016

Merhabalar,

Bu yazımda sonraki yazılarda kullanılmak üzere bir projenin başlangıcını yapacağım. Proje ana hatlarıyla Spring Boot ve AngularJS projesi olacak. Sunucu tarafında Java 1.8 ve Spring Boot 1.3.5, istemci tarafında ise AngularJS 1.5.6 kullanılacak.

Android Multidex 6 JAN 2016

Android projenizde, kullandığınız kütüphanelerin belirli bir büyüklüğü geçmesi halinde, Multidex özelliğini kullanmanız gerekmektedir. Kaynak

Oracle PLSQL Statik List'den Select 31 OCT 2014

Excel veya benzer bir ortamdan aldığınız statik bir listinize SELECT çalıştırabilmek için;

select column_value from table(sys.odcivarchar2list('18776', '18775'))

Oracle Apex PLSQL'den Mesaj Verme 31 OCT 2014

Oracle Apex’de PLSQL işlemi sonrasında kullanıcıya mesaj vermek için:

begin  
	IF :P1_COMPUTER like 'PC%'  THEN  
		INSERT INTO...;  
		COMMIT;  
		apex_application.g_print_success_message := '<span style="color:green">Computer created</span>';  
	ELSE  
		apex_application.g_print_success_message := '<span style="color:red">No valid computer name</span>';  
	END IF;  
END;

Oracle Apex Evet/Hayır Diyaloğu 31 OCT 2014

Oracle Apex’de, bir linkin altına Evet/Hayır sorusu sormak için:

javascript:apex.confirm('Sormak istediğiniz soru?', {set:{"ITEM_1":"VAL_1"}});

Spring AbstractExcelView'de İndirilen Dosyanın İsmini Değiştirme 23 OCT 2014

Spring’de AbstractExcelView ile oluşturduğunuz excel dosyasının adı genelde, url’in son parçası olur, kod ile bir isim vermek için:

@RequestMapping(value="/excel", method = RequestMethod.POST)
public ModelAndView getReportExcel(HttpServletResponse response, Model model) {
	...
	
	response.setHeader("Content-Disposition", "attachment; filename=\"my_report_file.xls\"");
	
	...
}

Ajax Sorgusunda CSRF Hatası 16 OCT 2014

Spring security ayarlarından csrf’yi etkinleştirdiyseniz ve jQuery ile ajax post request’i yapmaya çalıştığınızda csrf hatası alacaksınız. Hatayı gidermek için jQuery.ajax() metodu içine 'headers' parametresi ile csrf token’ını gönderebilirsiniz.

var headersData = {};

var attrVals = {'test1': 'val1'};

$.ajax({
	method: 'POST',
	url: 'http://localhost:8080/testProject/test',
	data: {
		'attr' : attrVals,			
	},
	headers: headersData,
});

Linux Failsafe Modunda HDD'ye Yazma 5 OCT 2014

mount -o remount,rw /

Eclipse Multi-Line Text 1 OCT 2014

Eclipse’de birden çok satırı yapıştırmak için aşağıdaki ayarı kullanabilirsiniz.

Preferences/Java/Editor/Typing/ “Escape text when pasting into a string literal”

Spring @Repository ve @Service Sınıfları 18 SEP 2014

Spring + Hibernate projesinde, database ile alakalı olmayan metodları, @Repository ile annotate ettiğiniz sınıflara koymayın. Gereksiz yere jdbc connection’ı alıp geri verecektir. Onun yerine @Service ile annotate ettiğiniz katmanda implemente edin.

Tam tersi olarak, @Service sınıflarında, jdbc ile ilgili metotları tutmayın. Onları tek bir metot içinde @Repository sınıfında hatta mümkünse @Transactional olan bir sınıf/metot içerisinde gerçekleştirin. Bu işlemlerin hem aynı Transaction içinde olmasını hem de tek bir jdbc bağlantısı üzerinden tamamlanmasını sağlayacaktır

Javascript Sayı Formatlama 18 SEP 2014

Javascript’de, bölünen sayılar (yüzdeler) için basit olarak yuvarlamayı aşağıdaki gibi yapabilirsiniz.

var profits = 2489.8237;
profits.toFixed(3); //returns 2489.824 (round up)
profits.toFixed(2); //returns 2489.82
profits.toFixed(7); //returns 2489.8237000 (padding)

CKEditor html elementlerindeki class attribute'nu temizliyor 9 SEP 2014

Configuration dosyasında aşağıdaki parametreler eklenerek sorun çözülebilir:

config.allowedContent = true;
config.extraAllowedContent = "*(*)";

JTable Nesnesini Otomatik Olarak Genişletmek 27 NOV 2012

JTable nesnesindeki tüm hücreleri, içerisindeki veriye göre, kod ile otomatik olarak kolon genişliklerini ayarlamak için;

Java'nın Saklı Kalmış Özellikleri: Double Brace Initialization 27 NOV 2012

Geçenlerde ‘da gezinirken konuya rastladım. Java’da kullanılan ve az kişinin bildiği özellikler şeklinde. Orada adı geçen bazı şeyler o konuya ilişkin uğraşanlar için ilginç gelecektir ama Double Brace Initialization şeklinde bir özellikle karşılaştım. Aslında Collections ile alakalı olduğu için nasıl oldu da bilinmediğini pek çözemedim.

MySql'den Yüklü Miktarda Veri Çekmek 10 JUN 2012

Java ile MySql’den çektiğiniz yüklü miktarlarda verilerle çalışırken (30~40 GB) bazı problemler yaşayabiliyorsunuz. Yazdığınız uygulama verileri satır satır çeksede, sonuçta jdbc sürücüsü verileri tüm olarak çekmeye çalışacak, yazdığınız SQL sorgusu, heap hafızasının aşılması sebebiyle exception fırlatıp çıkacaktır.

Eclipse - Change Sets ve Mylyn 28 FEB 2012

Çoğu zaman başınıza gelmiştir. Uzun süreli problem üzerinde çalışıyorsunuz, hali hazırda onlarca dosyayı değiştirmişsiniz. Siz gayet güzel işinizle uğraşırken, araya hemen yetişmesi gereken, müşteriye saç baş yolduran bir iş çıkagelmiştir. Müşteri velinimettir prensibinden yola çıkılarak, o işin daha önce ve hemen yapılması gerekmektedir. Ama şöyle bir problem ortaya çıkmıştır artık, değişen dosyalardan hangileri, hangi iş için değişmiştir. Bunu çözmek için bir kaç yöntem var:

Java Swing Debugging 4 AUG 2011

Swing ile haşır neşir olduysanız - hele hele fazla bir şekilde - bazı zamanlar, bu nasıl oldu şimdi diye düşünmeye başlıyor insan. Örneğin tablo modelini değiştirirsiniz, bir anda focus anlamsız yere gider, ya da focus alan nesne istenen nesne değildir. Bunları tabi normal alışkanlıklar gereği debug edip takip etmek pek mümkün sayılmaz. Milisaniyeler içinde gerçekleşen bir eylemi 10~20 dk debug edip kendinizi JComponent ya da Component içerisinde, kaybolmuş vaziyette bulursunuz bir anda.

Apache Ant - Bölüm 2 27 JUN 2011

Bir önceki yazımda belirttiğim üzere, Ant ile proje geliştirme süreçlerinizi iyileştirebilir ve gereksiz bazı prosedürlerden kurtulabilirsiniz. Kurulum için bir önceki okuyabilirsiniz.

JEditorPane'in, Nimbus L&F'de, Arkaplan Rengini Değiştirme 11 JUN 2011

Java’da HTML göstermek için kullanılan JEditorPane’e normalde arkaplan değerini verebiliyorsunuz. Ancak Look&Feel olarak Nimbus seçerseniz, arkaplan değeri hep beyaz olarak kalıyor. Bu hatadan kurtulmak için, arka plan rengi transparan verilebilir.

JEditorPane editor = new JEditorPane();
editor.setBackground(new java.awt.Color(0,0,0,0));

Konu ile alakalı bug

Apache Ant 2 APR 2011

Bir yazılım projesine başladınız. Proje geliştirme süreci bir aşamayı artık geçti ve sizin belli aralıklarla versiyon çıkarmanız, ve bu versiyonu dağıtmanız gerekiyor. Normal şartlar altında bu süreç sizin için karın ağrısına dönüşüyor, ya da şirkette birinin gereksiz yere önemli konuma gelmesine sebep olabilir.

Varsayılan Program ile Dosya Açma 18 MAR 2011

İşletim sisteminde varsayılan olarak atanmış program ile dosya açmak için aşağıdaki komutları kullanabilirsiniz.

Mac OS için;

open filename.pdf 

Microsoft Windows için;

start filename.pdf 

Linux dağıtımları için;

xdg-open filename.pdf 

Yeni Örnek Yaratma / New Instance Creation (Javolution) 13 MAR 2011

Javolution kütüphanesinin XML serialize / deserialize işlemlerinden daha önce bahsetmiştim. Ancak orada da dikkat edeceğiniz üzere, bir sınıfın özelliklerini okurken, sınıfın boş constrcutor ile oluşturulması ve her elemanın (primitve type olmayan) initialize edilmiş olması gerektiğinden bahsetmiştik. Ancak bu durum bazı koşullar altında gerçeklenemeyebilir. Örneğin, enum bir sınıfa uygulayamazsınız. Çünkü sınıfın baştan öncelikle initialize olması gerek. Enum bir sınıfta ise, zaten tüm işlem o initialize anında olmaktadır. Örneğin aşağıdaki enum sınıfını ele alırsak;

Resim Boyutlama / Image Resizing 13 MAR 2011

Java’nın kendi Image nesnesinde getScaledInstance(int newWidth, int newHeight, int hints) şeklinde bir metot mevcut ancak bazı durumlarda (açıkçası tam olarak belirleyemediğim) yeniden boyutlandırmayı başaramıyor. Bunun yerine biraz daha uzun olan ancak boyutlandırma konusunda daha başarılı bir kod parçası mevcut. O da Graphics nesnesine, elimizdeki imaj nesnesinden yeni bir imaj nesnesi üzerine çizdirmek.

System.currentTimeMillis() 2 MAR 2011

Özellikle 64bit sistemlerde (Windows 2003 Server 64bit’de gördüğüm) method ard arda çağırıldığı takdirde beklenildiği gibi mantıklı long değerler üretemiyor. Örneğin yaptığı işlemlerin zamanlarını tutmak istiyorsanız, hangisinin önce hangisinin sonra olduğunu anlamak için, bazen sonra yaptığı işlemlere daha küçük long değerler atayabiliyor. Bunun sebebi olarak da tam olarak sistem saatinin o anki değerine yakın bir değer döndürmesi. Tam olarak o anki zamanı ölçmede yanılgılara sebep olabilir ancak geçen süreyi hesaplamak için kullanıldığında daha etkili / mantıklı değerler verecektir.

Unicode Karakterler 19 FEB 2011

Yeni nesil editörlerin çoğunda olan özelliklerden biri, unicode olan karakterleri unicode kodları ile saklarlar. Ancak bunun otomatik olarak gerçekleşmediği bir kaç durum vardır ki adamı çileden çıkarır. İşte bu çileden çabucak kurtulmak için, unicode karaktlerin octal, decimal, hexadecimal ve html olarak kodlarını gösteren ve karakter aramanıza imkan veren güzel bir site. http://unicodelookup.com/

Klavyedeki Tüm Tuş Aksiyonlarını Yakalama | Java Key Event Dispatching 2 FEB 2011

Java / Swing’de herhangi bir nesne üzerinde klavye aksiyonlarını yakalamak istiyorsanız bunun için bir kaç yol mevcut.

JInternalFrame / JTable Değişiklik Yapamama 2 FEB 2011

Java SE6’da ilginç bir problem mevcut. Eğer ki JInternalFrame üzerine JTable nesnesi koyarsanız. Tüm hücreleri değiştirilebilir olsa dahi, herhangi bir hücre de değişiklik yapamıyorsunuz. Tabi bunu sağlamak için tablonuzdaki terminateEditOnFocusLost değişkeninin true olması gerekli.

JTable Kolon Indeksi 1 JAN 2011

JTable’da kullanıcıya kolonların sıralarını değiştirme hakkını verebiliyorsunuz. Ancak eğer ki kullanıcı kolonları değiştirdikten sonra, kolon indeks’ine göre, kendi tablo modelinizde bilgiye erişmek isterseniz hata ile karşılacaksınız. Çünkü size seçili kolon indeksi olarak görsel tablodaki indeksi verecektir size. Ancak size tablo modelindeki asıl indekse ulaşmak isterseniz, bunu JTable sınıfı içerisindeki TableColumnModel nesnesi içindeki TableColumn nesnesi içindeki getModelIndex() metodu ile öğrenebilirsiniz. http://download.oracle.com/javase/6/docs/api/javax/swing/table/TableColumn.html#getModelIndex()

Eclipse User Library 26 DEC 2010

Eclipse’de proje geliştirirken, eklemiş olduğunuz ‘User Library’ de, isim ya da konum değişikliği olması halinde, bu konumların tutulduğu dosyada yapılacak küçük bir değişiklik ile arayüz ile uzunca uğraşmanıza gerek kalmadan bu bilgileri değiştirebilirsiniz. Örneğin dışarıdan aldığınız bir library’nin versiyonundaki değişiklik ve onu test için farklı bir klasöre koymak olabilir. Projede de bu yeni versiyonu kullanmak istiyorsunuz ama 30 tane jar dosyasının path bilgisini değiştirmek zor tabi ki. Aşağıdaki dosyada ilgili library’lerin bulunduğu path’lerin bilgileri tutulmaktadır. Buradaki path bilgilerini değiştirerek projenizi yeniden açtığınızda istediğiniz yeni path bilgilerin girilmesini sağlayabilirsiniz. .metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.core.prefs

Java Generics 6 OCT 2010

Generics, java 1.5 ile Java da yer almaya başlamış, nesneye Object türünden başka türler belirterek kullanım kolaylığının yanı sıra, daha okunaklı, bakımı ve geliştirilmesi daha kolay kod yazımını sağlamıştır.

Title Bar'sız Pencere 13 AUG 2010

Java-Swing’de yarattığınız JFrame’i, işletim sistemine ait title bar olmadan göstermek için, constructor çağrısından hemen önce

Java XML Parse - Javolution 22 JUN 2010

Günümüzde veriyi bir yerden bir yere taşımak için en etkili araçlardan birisi (hatta en etkilisi) XML diyebiliriz. Okunabilir olması, düzenli bir şekilde iç içe ağaç yapısının olması ve HTML’in bunca senedir standart olarak hiç bir şekilde büyük çapta değişimine gerek duyulmadan kullanılması bunların başlıca sebepleri olarak sıralayabiliriz. Ancak verinin XML hale gelmesi ve diğer uçta XML’in tekrar anlamlı verilere dönüştürülmesi hem zaman hem de yer açısından büyük bir önem taşımaktadır.

Kod İle JFrame Ekranı Kaplama 4 MAR 2010

Java da JFrame i kod ile tam ekrana getirmek için.

Saydam ve Şekillendirilmiş Pencere 2 MAR 2010

Bu kod Windows’da denenmiştir. AWTUtilities sınıfı standart olmadığı için başka sistemlerde problem çıkarabilir.

Java'da Generic Yapılar 13 JAN 2010

Şimdi eskiden elinizdeki Vector‘deki yapıların türlerini bilemezdiniz. Her şey size Object olarak gelir, siz Cast ederdiniz. Ancak Generic sayesinde bu dertten kısmen kurtulduk.

Java Call Stack'i Arttırmak 13 JAN 2010

Java’nın default call stack büyüklüğü 400kb. Burada bahsi geçen heap size değil. Call Stack’den kasıt, o anda çalışan ya da bekleyen, yani çağrısı yapılmış metodların bulunduğu stack’dir. Bazen bu büyüklük sizi kesmeyebilir :) Çok büyük veri yapıları ya da recursion yapılar bunu tetikleyen unsurlardan sadece bir kaçı. Bunu kısa yoldan çözmenin yolu mevcut, çalıştırdığınız kodu;

ConcurrentModificationException 9 JAN 2010

Java’da Vector ve ArrayList ikiside birbirine benzer işlemler gerçekleştirmektedir. Birbirlerinden tek farkları ise, Vector‘un thread safe olarak adlandırılmasıdır. Yani birden fazla thread içeren bir uygulamanız var ise, ve siz Vector‘un elemanlarına bunların herbirinden erişip üzerlerinde değişiklik yapıyorsanız, herhangi bir problem çıkarmayacaktır. Ancak ArrayList kullanırsanız, bu thread safe mantığını kendiniz halletmeniz gerekir.