maven etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
maven etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

28 Eylül 2014 Pazar

JAX-RS Web Service Hk.


Rest web sevice SOA mimarisinin uygulandığı projeler için oldukça esnek ve hafif bir çözüm olabilir. HTTP üzerinden çalışması geliştirme sürecinin kısa olması ve Web Service den dönen cevabın sade ve boyut olarak daha az olması sebebiyle kullanılmaktadır. Diğer yapılara göre 1.3 kat daha hızlı çalışması sebebiyle mobil uygulamalarda da kullanılmaktadır.

Projeye ait video ve kaynak kodları paylaşıyorum.

                                                       JAX-RS WEB SERVICE



12 Eylül 2014 Cuma

JAVA WEB SERVICE VE CLIENT 1 (JAX-WS)

                             JAX- WS(Java Api for Xml Web Services) Nedir ?

Web Service geliştirmede kullanılan JEE 5 itibariyle kullanılmaya başlanan bir javanın XML tabanlı web service yapısıdır. Kullanımı oldukça kolaydır.

Herhangi bir class'ı web service olarak açmak için class tanımının başına  @WebService annotation' ını yazmamız yeterli. Böylece Class'ın web service olarak kullanılacağını belirtiyoruz.


@WebService Kullanımı


10 Eylül 2014 Çarşamba

JDBC CONNECTION, DAO VE TRANSACTION

                                                              JDBC Nedir?
     Açılımı Java Veritabanı Bağlantısı (Java Database Connectivity) olan JDBC Java ile veri tabanına bağlanmamızı ve sql scriptlerimizi çalıştırmamızı sağlayan bir katmandır. Bu katmanı kullanabilmemiz için her bir veri tabanına özel olarak yayınlanan veri tabanı kütüphanelerini(jar dosyaları) nı projemize eklememiz gerekmektedir.

Jdbc Ara yüzleri:

1. Connection : Veri tabanı bağlantısını sağladığımız ara yüzdür. Driver Manager üzerinden oluşturulur yada uygulama sunucusundan alınabilir. Biz örneğimizde Driver Manager'ı MySQL DB kütüphanesini kullanacağız.

İlk iş MySQL kütüphanesindeki driver classını belirtmek ve connection'ımızı olusturmak olacak.

  
Connection aldığımız class ve methodu

9 Eylül 2014 Salı

MAVEN REPOSITORY JAR EKLEME

Oracle DB jarları yada IBM' e özel jarlar, Kendi yazdığınız utiller,veya webservice clientlarını maven repository sine ekleyerek istediğiniz uygulamada kullanabilirsiniz. Bunun için

mvn install:install-file -Dfile=JARIN-BULUNDUGU-DIZIN\jarAdı.jar -DgroupId=com.KENDI-VERECEGIN-ISIM -DartifactId=JAR-ADI -Dversion=VERSIYONU -Dpackaging=jar

tanımıyla yapabiliriz.

Örneğin : 

Jar ın bulunduğu dizini kopyaladım.

mvn install:install-file -Dfile=C:\PROJELER\NetBeansProjects\maven-batch-programs\target\maven-batch-programs-1.0-SNAPSHOT.jar -DgroupId=com.beytullahc -DartifactId=maven-batch -Dversion=1.0 -Dpackaging=jar

Yukarıdaki script'i cmd de çalıştırmamız yeterli.

SONUÇ :

jarı projeye dahil etmek için ise aşağıdaki dependency tanımını pom.xml e eklemeniz yeterli.

      
            YAZDIGINIZ-GROUPID
            YAZDIGINIZ-ARTIFACTID
            YAZDIGINIZ-VERSION

     



İyi çalışmalar :)

Jar Dosyası Çalıştırma (MAVEN DEPENDENCY PLUGIN)

Farklı kütüphaneler kullandığımız java uygulamalarında projenin bağımlı olduğu jarları görebilmesi için manifest.mf dosyasına yada .sh dosyasında jarlar tanımlanır ve uygulama yada içindeki main class java -jar komutuyla çalıştırılır.

Proje Paket Yapısı



5 Eylül 2014 Cuma

MAVEN + SPRING ANOTASYON CONFIG

       Ölçek olarak küçük java uygulamalarında Spring yada EJB (EJB UYG. SUNUCUSU GEREKTIRIR) kullanmak yazılımcıyı yavaşlatır, gereksiz efor sarfetmesine neden olur. Paylaşacağım uygulamada temel Spring konfigürasyonu nasıl yapılır, context'ten bean nasıl çağırılır vb Spring'e ait en temel konulara değindim.
   
      

4 Eylül 2014 Perşembe

JAVA SMB/SAMBA Protokolü ile Dosya Transferi(Sadece IP ile Dosya Transferi)

FTP ve SFTP ile dosya aktarımı yapabilmemiz için serverin 22 nolu portunu kullanma yetkimiz olması gerekiyor. Bu tarz durumlarda eğer kullanıcı adı ve şifremiz var ise SMB protokolü ile sadece IP,kullanıcı adı ve şifre  ile server'a bağlanıp dosya aktarımı yada indirme işlemi yapabiliriz. SMB Hakkında kısaca kısaca bilgi vermek gerekirse:

SMB kavramı İngilizce "Server Message Block" kelimelerinin kısaltmasıdır. İlk olarak IBM tarafından kullanılmıştır.

SMB protokolü bir bilgisayarda uygulamaları okuma ve dosyalara yazma ve bir bilgisayar ağı sunucu programlarından hizmet talep etmek için izin veren bir ağ dosya paylaşım protokolüdür.
SMB protokolü TCP / IP protokolü veya diğer ağ protokolleri üstünde kullanılabilir. SMB protokolü, bir uygulama   uzak bir sunucuda dosya veya diğer kaynaklara erişebilir.

Linux tarafında SMB karşılığı SAMBA olarak geçmektedir. Protokol aynı fakat isimler farklıdır. Bizim uygulamamız platform bağımsız çalışaçak. Kodlar aşağıdaki gibidir

 
Maven projesi genel yapısı


3 Eylül 2014 Çarşamba

JAVA ve SFTP ILE REMOTE SERVER DA DOSYA TRANSFER İŞLEMLERİ

Secure FTP (Güvenli Dosya Taşıma Protokolü) , yani SFTP, SSH kullanarak dosya transferi yapan bir dosya aktarım protokolüdür. SSH'ın sağladığı güvenlik özellikleri, FTP'den farklı olarak SFTP'yi güvenli hale getirir.FTP'nin RSA ile güçlendirilmiş halidir. TCP üzerinden çalışır.

Döküman yükleme ve İndirme kodları aşağıdaki gibidir.

1 Eylül 2014 Pazartesi

Xml Parse Java Object(Maven and XSD)

SOAP tabanlı Web Servisler Xml veri tipiyle haberleşme sağlamaktadır. Ayrıca Database tarafından data xml olarak dönebilir,uygulama içerisinde xml oluşturulabilir. Bu tarz işlemlerde IDE Web Servisler için wsdl'i pars eder ve içinden servise ait değişkenleri ve objeleri xsd yardımıyla çıkartır. Uygulamamıza anında dahil eder. Fakat DB'den dönen bir xml düşünün objeye pars etmeniz gerekiyor. Tek tek Stringler içinde boğuşup değişken tiplerini bir birine çevirebilirsiniz....


Yada gelen xml örneğini free xml formatter ile formatlayıp free xsd generator ile xsd'nizi oluşturabilirsiniz. Bundan sonrasını Jax-b methodları sizin için yapıyor. Xml uzunluğu ne olursa olsun 5 dakikada objeniz yada listeniz hazır :) pom.xml'i incelemenizi ayrıca öneririm. Ben Oracle DB için geliştirme yaptım. Proje içerisinde istenen jarları oracle sitesinden indirip maven reponuza eklerseniz uyulama hazır olacaktır. Maalesef jar paylaşamıyoruz. Link  xdb6 jarını indir :)

Kaynak kod aşağıda. İyi çalışmalar.

Java ile Uzak Masaüstü Komut Satırında İşlemler

Bazı durumlarda bir batch program ile server'a bağlanıp belli komutlar çalıştırmamız gerekebilir. Kopyalama, backup alma vb işlemleri otomatize etmenizde faydalı olacaktır.

Aşağıdaki ekran çıktısında linux server'a bağlanıp örnek olarak 'ls' komutunu çalıştırdım. Uygulamayı jar olarakta projenize dahil edebilirsiniz. İşletim sistemi bağımsız olarak kullanabilirsiniz. 

Ejb 3.1 Schedule Job(Zamanlanmış Görev 2)


Ejb ile gelen @Schedule anotasyonu bize oldukça esnek bir yapı sunuyor. Her yılın belli bir tarihideki saat dakika saniye tanımı yapılarak, Her ayın son cuma günü, her perşembe vb. tanımladığımız business methodun çalışmasını sağlayabiliriz. Ejb'nin çalışabilmesi için uygulama sunucusunun EJB CONTAINER'ı bulunması gerekiyor. Ben uygulamayı Weblogic 12C üzerinde çalıştıracağım. Örnek kod aşağıdaki gibidir...


28 Ağustos 2014 Perşembe

Weblogic Schedule Job (Zamanlanmış Görev)

        Schedule Job java nın runnable kütüphanesiyle yazılabileceği ve bir jar dosyası olarak tetiklenebileceği gibi, web uygulaması olarak oluşturulup timer kütüphanesi ile de yazılabilmektedir. Burada amaç  Schedule Jobların uygulama sunucusu (Bende Weblogic)
üzerinde çalıştırılması, yönetiminin kolaylaştırılmasını sağlamaktır. Özellikle entegrasyon uygulamalarında SAP gibi sistemler karşılarında bir jar değilde kurumsal java uygulama sunucularının bulunmasını ister. START ve STOP işlemleri kolaylaşır, Herhangi bir bug ile karşılaştığınızda sunucu desteği alabilirsiniz, Loglar sunucu tarafından düzenli bir şekilde tutulur ...vb. Farkında olmasakta bir hataya müdahale ederken okadar çok 'ls','dir','pwd' gibi komutlarla dizin dizin geziyoruz, hatanın tekrar oluşmasını bekliyoruz yada uygulamanın durduğunu ertesi gün öğrenebiliyoruz. Bu yükleri sunucuya bırakmak yada JMX dünyasına girmekten başka şansımız kalmıyor :)

       Ben bütün projelerimde maven paket yapısını kullanıyorum. İleride bu konuyada ayrıca deyineceğim.


Önce Maven Web App oluşturmalı ve Aşağıdaki işlemleri izlemeliyiz.

Java Mail Api Hk.

MailSender.java

                                                       JAVA MAIL API ISLEMLERI

                          Java ile mail gönderme - Mail Subjectlerini okuma

Mail server host'u mail adresi ve şifre bilgilerinizi ilgili alanlara girmeniz yeterli. Kod ve jarlar için maven projesinin pom.xml'ine ekleyeceğiniz dependency'ler aşağıdaki gibi.

İyi çalışmalar.

>
        >
            >log4j>
            >log4j>
            >1.2.17>
            >jar>
        >
        >
            >javax>
            >javaee-web-api>
            >6.0>
            >provided>
        >
        >
            >javax.mail>
            >mail>
            >1.4.7>
            >jar>
        >
        >
   >org.apache.commons>
   >commons-collections4>
   >4.0>
        >
    >

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Locale;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.mail.FetchProfile;
import javax.mail.Flags;
import javax.mail.Flags.Flag;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.Transport;
import javax.mail.UIDFolder.FetchProfileItem;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.search.FlagTerm;
import org.apache.commons.lang3.StringUtils;

/**
 *
 * @author BeytullahC
 *
 * Simple demonstration of using the javax.mail API.
 *
 * Run from the command line. Please edit the implementation to use correct
 * email addresses and host name.
 */

public final class MailSender {

    public static void main(String... aArguments) {

        try {
            sendMail("senderMailAddress", "password", "smtpHost", new String[]{"toMail1", "toMail2"});
        } catch (Exception ex) {
            Logger.getLogger(MailSender.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public static ArrayList readMailsImap(String host, String mail, String password) throws Exception {
        Properties props = new Properties();
        props.setProperty("mail.store.protocol", "imaps");
        props.setProperty("mail.imaps.ssl.trust", host);
        props.setProperty("mail.imaps.connectionpoolsize", "10");
        try {
            Session session = Session.getInstance(props, null);
            Store store = session.getStore();
            store.connect(host, mail, password);
            Folder inbox = store.getFolder("INBOX");
            inbox.open(Folder.READ_ONLY);
            FetchProfile profile = new FetchProfile();
            profile.add(FetchProfileItem.CONTENT_INFO);
            profile.add("X-mailer");
            Message msg[] = inbox.search(new FlagTerm(
                    new Flags(Flag.SEEN), false));
            ArrayList list = new ArrayList<>();
            SimpleDateFormat formatter2 = new SimpleDateFormat("HH:mm:ss dd/MM/yy", Locale.ENGLISH);
            inbox.fetch(msg, profile);
            for (Message message : msg) {
                Multipart PART = new MimeMultipart();
                MessageDetail detail = new MessageDetail(StringUtils.join(message.getFrom(), ", "), message.getSubject(), formatter2.parse(formatter2.format(message.getSentDate())));
                list.add(detail);
            }
            return list;
        } catch (MessagingException mex) {
            throw new Exception(mex.getMessage());
        }
    }

    public static void sendMail(final String username, final String password, final String host, final String[] toMail) {
        // Recipient's email ID needs to be mentioned.
        String to = StringUtils.join(toMail, ",");
        // Sender's email ID needs to be mentioned
        String from = username;//change accordingly
        // Assuming you are sending email through relay.jangosmtp.net
        Properties props = new Properties();
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.host", host);
        props.put("mail.smtp.port", "587");

        // Get the Session object.
        Session session = Session.getInstance(props,
                new javax.mail.Authenticator() {
                    @Override
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(username, password);
                    }
                });

        try {
            // Create a default MimeMessage object.
            Message message = new MimeMessage(session);

            // Set From: header field of the header.
            message.setFrom(new InternetAddress(from));

            // Set To: header field of the header.
            message.setRecipients(Message.RecipientType.TO,
                    InternetAddress.parse(to));

            // Set Subject: header field
            message.setSubject("Testing Subject");
            // Now set the actual message
            message.setText("Hello, this is sample for to check send "
                    + "email using JavaMailAPI ");

            // Send message
            Transport.send(message);

            System.out.println("Sent message successfully....");

        } catch (MessagingException e) {
            throw new RuntimeException(e);
        }
    }
}


import java.util.Date;
import javax.xml.bind.annotation.XmlRootElement;

/**
 *
 * @author BeytullahC
 */
@XmlRootElement(name = "messageDetail")
public class MessageDetail {

    public MessageDetail() {
    }

    public MessageDetail(String subject, Date sendDate) {
        this.subject = subject;
        this.sendDate = sendDate;
    }

    public MessageDetail(String from, String subject, Date sendDate) {
        this.from = from;
        this.subject = subject;
        this.sendDate = sendDate;
    }

    private String from;
    private String subject;
    private Date sendDate;


    public String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public Date getSendDate() {
        return sendDate;
    }

    public void setSendDate(Date sendDate) {
        this.sendDate = sendDate;
    }

    public String getFrom() {
        return from;
    }

    public void setFrom(String from) {
        this.from = from;
    }

}