날짜별 글 목록: 2009년 10월 19일

지메일(GMail)을 사용해서 메일보내기

지메일(GMail)을 사용해서 메일을 보내는 예제이다.

package net.sjava.email.test;
import java.security.Security;
import java.security.Security; 
import java.util.Date; 
import java.util.Properties;   
 
import javax.mail.Authenticator; 
import javax.mail.Message; 
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeMessage;  

public class GMailSenderTest {

    private static final String SSLFACTORY = “javax.net.ssl.SSLSocketFactory”;
    private static final String USERID = “id@gmail.com”; 
    private static final String PASSWORD = “pw”; 
    private static Properties properties = System.getProperties();
    
    static {
        properties.setProperty(“mail.smtp.host”, “smtp.gmail.com”); 
        properties.setProperty(“mail.smtp.socketFactory.class”, SSLFACTORY); 
        properties.setProperty(“mail.smtp.socketFactory.fallback”, “false”); 
        properties.setProperty(“mail.smtp.port”, “465″); 
        properties.setProperty(“mail.smtp.socketFactory.port”, “465″); 
        properties.put(“mail.smtp.auth”, “true”); 
    }
    
    //
    public Message getMessage(Session session, String to, String title, String content) throws MessagingException {
        Message msg = new MimeMessage(session);     
        msg.setFrom(new InternetAddress(to)); 
        msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to, false)); 
        msg.setSubject(title); 
        msg.setText(content); 
        msg.setSentDate(new Date()); 
        
        return msg;
    }
    
    //
    public void send(String to, String title, String content) {
        
        try {
            Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());            
            Session session = Session.getDefaultInstance(properties, new Authenticator() { 
                protected PasswordAuthentication getPasswordAuthentication() { 
                    return new PasswordAuthentication(USERID, PASSWORD); 
                } 
            });            
            Transport.send(this.getMessage(session, to, title, content));
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        GMailSenderTest sender = new GMailSenderTest();
        sender.send(“skidboy@daum.net”, “헐”, “내용”);
    }
}

java synchronized keyword는 객체에 대한 lock 이죠??

흠..
며칠전에 회사에서 synchronized keyword로 얘기를 하다가 그냥 말았다..
메쏘드(임계영역)만 lock이 걸리는 형태로 알고 있으셔서 흠..

아래 코드를 돌려보자..
아래와 같은 메세지를 뿌려준다.. 즉, 아래 코드의 singleton 객체에 대한 락은 묵시적으로 Monitor객체를 취득하고 메쏘드를 빠져나가면 반환하는 구조로 되어 있는데 말이다..

따라서, 메쏘드 01에 진입을 하게 되면, 02는 01이 완료될때까지 대기를 하다가 01이 완료되면 02메쏘드가 불리게 되는 그런 구조이다..

print01 call
print01 진입
print02 call
print01
print02 진입
print02

package net.sjava.test.sync;

public class SyncTestMain {
   
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        new Thread(){
            public void run() {
                SingleTon instance = SingleTon.getInstance();
                System.out.println(“print01 call”);
                instance.print01();           
            }
        }.start();
       
        new Thread(){
            public void run() {
                SingleTon instance = SingleTon.getInstance();
                System.out.println(“print02 call”);
                instance.print02();           
            }
        }.start();
   
    }
}

package net.sjava.test.sync;

public class SingleTon {

    private static SingleTon instance = new SingleTon();
   
    private SingleTon() {
       
    }
   
    public static SingleTon getInstance() {
        return instance;
    }
   
    public synchronized void print01() {
        System.out.println(“print01 진입”);
        try {
            Thread.sleep(5000);
            System.out.println(“print01”);
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
   
    public synchronized void print02() {   
        System.out.println(“print02 진입”);
        try {
            Thread.sleep(1000);
            System.out.println(“print02”);
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}

* reference
 – http://iilii.egloos.com/4071694