13 Nisan 2016 Çarşamba

Spring MVC ve Hata işleme (Exception Handling)


Projemizde run time esnasında çıkabilecek hataları daha açıklayıcı ve görsel anlamda da anlamsız kod karmaşasını ortadan kaldırmak için oluşabilecek hatalar için özel sayfalara yönlendirmeler yapalım dedik.
İnternette yine her zamanki gibi türkçe kaynak kıtlığı yaşıyoruz... derken https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc adresinden detaylı bilgileri alıyoruz...
İlgili kaynakta hataları yönetmenin farklı yollarından bahsediyor, kendi özel hata class'larıını da oluşturup, bağlı bulunduğu yerlerde o hatayı döndürebilirsiniz. Ben ise, daha global, tüm projeyi kapsayan bir hata yönetim şekliyle ilgileniyorum. 
Yani;
Size gerekli olan malzemeler,
Bir adet class -ki @ControllerAdvice annotation'ına sahip olacak
içerisindeki metodlar ise @ExceptionHandler
bir adet hatanın işlenip daha düzgün görüntülenmesi için yönlendirileceği error.jsp sayfası 
tabi mi context.xml tarafında da <mvc:annotation-driven/>'ın tanımlı olması
Benim Controller tarafında tek kullandığım kod;
@ControllerAdvice
class GlobalExceptionHandler {
  
    @ExceptionHandler(value = Exception.class)
    public ModelAndView defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception {

        if (AnnotationUtils.findAnnotation(e.getClass(), ResponseStatus.class) != null)
            throw e;

        // Otherwise setup and send the user to a default error-view.
        ModelAndView mav = new ModelAndView();
        mav.addObject("exception", e);
        mav.addObject("url", req.getRequestURL());
        mav.setViewName("error");
        return mav;
    }
}
@ExceptionHandler(value = Exception.class) içerisindeki değeri "SQLException.class", value=HttpStatus.NOT_FOUND şeklinde girerek hata türlerine göre yeni metodlar da oluşturabilirsiniz.

15 Şubat 2016 Pazartesi

pgAdmin III versiyon sorunu ve çözümü

Local pgAdmin III' den yeni oluşturulan servera bağlandığımda aşağıdaki gibi bir hata aldım. Serverdaki versionla localdeki versiyon birbirini desteklemediği için hata vermekte idi.

Warning:
The server you are connecting to is not a version that is supported by this release of pgAdmin III. pgAdmin III may not function as expected.
Supported server versions are 8.4 to 9.3.

eğer siz de bu hatayı alırsanız yapmanı gerekenler aşağıdaki gibidir;

#epository ekle
sudo sh -c 'echo “deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main” > /etc/apt/sources.list.d/pgdg.list'

#key'i indir
wget –quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

sudo apt-get update

sudo apt-get install pgadmin3

11 Şubat 2016 Perşembe

Spring Framework ve Spring Security'i 4'e yükseltmek



Geliştirmekte olduğumuz spring mvc projesinin versiyonunu 3.x'ten 4.x'e yükseltmek istedik fakat bu geçişle birlikte birkaç yerde de değişiklik yapmak zorunda kaldık.

What's new adresinden yapılan yenilikleri okuyabilirsiniz.

Türkçe kaynak da bulunması adına, yaptığımız değişiklikleri buraya not edeceğim ki belki birilerinin işine yarar.

Role'ler kısıtlamasında yapılan değişiklikler bizi çok etkilemedi çünkü henüz o kısıtlamaları kullanmıyorduk.

pom.xml tarafında değiştirilmesi gerekenler;

Eğer versiyonları değişkenden alacak şekilde tanımlamışsanız işiniz kolay yoksa her  bağımlılıklar (dependency) versiyonu eklemeniz gerekecek

örnek olarak;

<spring.version>4.2.4.RELEASE</spring.version>
<spring-security.version>4.0.3.RELEASE</spring-security.version>

22 Ekim 2015 Perşembe

Spring MVC ve çoklu dil desteği (i18n)

Merhabalar,

Yeni geliştirmekte olduğumuz projede çoklu dil desteğini uygulamak istedik. İnternetten araştırdığımızda (çok fazla türkçe kaynak bulunmadığı için) sorunumuza çözüm olmayan  bir çok çözümlerle karşılaştık.

İnternette diğer kaynaklarda anlatıldığı gibi i18n'i adım adım uyguladık ama ~

baz aldığımız kaynaklar;

http://www.mkyong.com/spring-mvc/spring-mvc-internationalization-example/

http://www.journaldev.com/2610/spring-mvc-internationalization-i18n-and-localization-l10n-example

application-context.xml sayfamızdan default dili "en" ya da "tr" verdiğimizde düzgünce çalışıyor ama maalesef "Türkçe" ve "English" linklerine bastığımızda mesajlar ilgili dile çevrilmiyordu.

        <!-- changes are then saved in cookies for future request -->
<bean id="localeResolver"
   class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
   <property name="defaultLocale" value="en"/>
</bean>

Araştırmaya devam ettikçe application-context.xml'e mvc'yi dahil etmem gerektiğini okudum.

<mvc:annotation-driven/>

ve

6 Ocak 2014 Pazartesi

MongoDB'ye giriş

Ufaktan ufaktan MongoDB'ye giriş yapıyorum. Yaparken de öğrendiklerimi belki birilerine faydalı olur umuduyla paylaşıyorum.

MongoDB'deki kavramlar ve ilişkilendirilmiş veri tabanlarındaki karşılığı aşağıdaki tabloda yer alıyor. Teknoloji ile ilgili terimlerin türkçeleştirilmesini mantıklı karşılamayanlardan olduğum için orjinal kavramdan uzak kalmayacağım.



RDBMS MongoDB
Database Database
Row Document
Column Field

(RDBMS- Relational Database Management System)


MongoBD'de document ( döküman/belge/row ) kavramı

MongoDB içindeki key-value eklinde tutulan bir kayıt bir document'tır. Her document kendi dinamic  şemasına sahiptir. dinamik şemadan kasıt, aynı collection (tablo) içindeki document'ların aynı yapı ve aynı alanlara sahip olması gerekmiyor demektir. Farklı field da tanımlamalar yapılabilir.
Ortak alanlarda farklı tiplerde veri tutabilir. MongoDB'deki belgeler (documents) JSON nesnelerine benzer. 'deki "row" karvamına karşılık gelmektedir.


Örnek 1.
MongoDB'de bir document (row)


MongoDB'de Collection (Tablo) kavramı
Collection (Koleksiyon/tablo) MongoDB belgelerinin (documents) grubudur. RDBMS'deki karşılığı ise "TABLO"lardır. Collection içindeki Documents (belgeler) farklı alanlara sahip olabilir.
 Bir koleksiyondaki tüm belgeler (documents) benzer ya da bir amaçla bağlantılıdır.

MongoDB'deki "id" mantığı
_id her document'ın tekliğini sağlayan / garanti eden 12 byte'lık hexadecimal bir numaradır.
Document'ı eklerken bu değeri siz de verebilirsiniz. Siz vermediğiniz takdirde MongoDB kendi bir tane atayacaktır. Otomatik atanan _id'nin atanması ise şu şekildedir;

ilk 4 byte = şuanki zaman (current timestamp)
sonraki 3 byte = makine id'si (machine id)
sonraki 3 byte = mongodb serverin işlem id'si (process id of mongodb server )
son 2 byte ise artan bir değerdir.


3 Ocak 2014 Cuma

MongoDB'ye başlangıç


Bu aralar MongoDB'ye merak saldım ve araştırmaya başladım. 

Araştırmaya başlarken genellikle ilgili teknolojinin kendi dökümanını okumayı tercih ediyorum fakat bu sefer önce var olan türkçe kaynaklara baktım. Gerçekten bir hayli kişi bu teknolojiye merak salmış ve araştırmış her ne kadar bazıları olduğu gibi çeviri yapmış olsa da bazıları anlayarak anlatmayı tercih etmiş. Önceden yazılım üzerine Türkçe kaynak bulmak gerçekten zordu. Neyse ki artık insanlarımız paylaşmanın önemini farkedip paylaşımcı bir ruh edinmiş :)

Bu siteler içerisinde bazıları şunlardır, belki siz de bir göz atmak istersiniz;









ve şuan okumakta olduğum Pro Hibernate and MongoDB isimli kitap,

Tüm bunlara istinaden ufak bir giriş;

MongoDB nedir?

C++ ile yazılmış, döküman tabanlı, ölçeklenebilir, NoSQL veri tabanı uygulamsıdır.
Windows, linux, Mac ve Solaris' için uygundur
Standart tablo tabanlı database yapısından kaçınır
JSON yapısını kullanarak dinamik belgeler oluşturur
2007'de 10gen isimli firma tarafından geliştirilmeye başlanmıştır. Şimdiki ismi ise MongoDB Inc.'tir


Zaten web'de olan kaynakları burada paylaşmamın bir mantığı olmadığından şimdilik bu kadar. Okudukça, öğrendikçe paylaşacağım.

11 Aralık 2013 Çarşamba

iReport-Jasperreport'u şifrelemek

Programınızdan indirdiğiniz dosyanın şifrelenmesini sağlayabilirsiniz.

Var olan JRPdfExporter exporter'in parametresine aşağıdaki özellikleri eklemeniz

exporter.setParameter(JRPdfExporterParameter.IS_ENCRYPTED, Boolean.TRUE);
exporter.setParameter(JRPdfExporterParameter.IS_128_BIT_KEY, Boolean.TRUE);
exporter.setParameter(JRPdfExporterParameter.USER_PASSWORD, "12345");
exporter.setParameter(JRPdfExporterParameter.OWNER_PASSWORD, "123456");
exporter.setParameter(JRPdfExporterParameter.PERMISSIONS,  new Integer(PdfWriter.ALLOW_PRINTING));

OWNER_PASSWORD ve USER_PASSWORD birbirinden farklı olabilir.

ve bcprov-ext-jdk16-1.45.jar'ını projenize yüklemeniz gerekmektedir. Dosyanız indirildiğinde artık şifrelenmiş bir şekilde inecektir.