Last Modified : 2010.03.02

¸Þ½ÃÁö µå¸®ºì ºó

C:/ejb ¿öÅ©½ºÆäÀ̽º¿¡ »õ·Î¿î ÇÁ·ÎÁ§Æ® news ¸¦ »ý¼ºÇϰí, Add External JARs.. ¹öưÀ» ÀÌ¿ëÇÏ¿© weblogic.jar ¸¦ Build Path ¿¡ Ãß°¡ÇÕ´Ï´Ù.
¾Æ·¡ SQL¹®À» ÀÌ¿ëÇØ¼­ ¿¹Á¦¿¡ »ç¿ëµÉ Å×À̺íÀ» »ý¼ºÇÕ´Ï´Ù.

create table news (
  seq varchar2(5) primary key,
  name varchar2(20),
  title varchar2(50),
  content varchar2(4000));

¿£Æ¼Æ¼ ºó ÀÛ¼º

»ý¼ºÇÑ Å×À̺í°ú ¿¬°üÀ» ¸Î°í ÀÖ´Â ¿£Æ¼Æ¼ ºóÀ» ÀÛ¼ºÇÕ´Ï´Ù.

1. ¿ø°Ý ÀÎÅÍÆäÀ̽º ÀÛ¼º

News.java

package kr.co.hanbitbook.ejb.examples.news;

import java.rmi.RemoteException;

import javax.ejb.EJBObject;

public interface News extends EJBObject {
	
	public String getSeq() throws RemoteException;
	
	public void setName(String name) throws RemoteException;
	public String getName() throws RemoteException;
	
	public void setTitle(String title) throws RemoteException;
	public String getTitle() throws RemoteException;
	
	public void setContent(String content) throws RemoteException;
	public String getContent() throws RemoteException;
	
}
2. Ȩ ÀÎÅÍÆäÀ̽º ÀÛ¼º

NewsHome.java

package kr.co.hanbitbook.ejb.examples.news;

import java.rmi.RemoteException;

import javax.ejb.CreateException;
import javax.ejb.EJBHome;
import javax.ejb.FinderException;

public interface NewsHome extends EJBHome {
	
	public News create(
			String seq, 
			String name, 
			String title, 
			String content)
			throws CreateException, RemoteException;
	
	public News findByPrimaryKey(String seq) 
			throws FinderException, RemoteException; 

}
3. ºó Ŭ·¡½º ÀÛ¼º

NewsEJB.java

package kr.co.hanbitbook.ejb.examples.news;

import java.rmi.RemoteException;

import javax.ejb.CreateException;
import javax.ejb.EJBException;
import javax.ejb.EntityBean;
import javax.ejb.EntityContext;
import javax.ejb.RemoveException;

public abstract class NewsEJB implements EntityBean {

	private static final long serialVersionUID = -5470278548227735562L;
	EntityContext ctx;
	
	public abstract void setSeq(String seq);
	public abstract String getSeq();
	
	public abstract void setName(String name);
	public abstract String getName();
	
	public abstract void setTitle(String title);
	public abstract String getTitle();
	
	public abstract void setContent(String content);
	public abstract String getContent();
	
	public String ejbCreate(
			String seq, 
			String name, 
			String title, 
			String content) throws CreateException {
		setSeq(seq);
		setName(name);
		setTitle(title);
		setContent(content);
		return null;
	
	}

	public void ejbPostCreate(
			String seq, 
			String name, 
			String title, 
			String content) throws CreateException {
	}
	
	public void ejbActivate() throws EJBException, RemoteException {
		// TODO Auto-generated method stub
		
	}

	public void ejbLoad() throws EJBException, RemoteException {
		// TODO Auto-generated method stub
		
	}

	public void ejbPassivate() throws EJBException, RemoteException {
		// TODO Auto-generated method stub
		
	}

	public void ejbRemove() throws RemoveException, EJBException,
			RemoteException {
		// TODO Auto-generated method stub
		
	}

	public void ejbStore() throws EJBException, RemoteException {
		// TODO Auto-generated method stub
		
	}

	public void setEntityContext(EntityContext ctx) throws EJBException,
			RemoteException {
		this.ctx = ctx;
	}

	public void unsetEntityContext() throws EJBException, RemoteException {
		ctx = null;
	}

}

¸Þ½ÃÁö µå¸®ºì ºó ÀÛ¼º

AddNewsBean.java

package kr.co.hanbitbook.ejb.examples.news;

import javax.ejb.CreateException;
import javax.ejb.EJBException;
import javax.ejb.MessageDrivenBean;
import javax.ejb.MessageDrivenContext;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.naming.Context;
import javax.naming.InitialContext;

public class AddNewsBean implements MessageDrivenBean, MessageListener {

	private static final long serialVersionUID = -2106248019150161026L;
	MessageDrivenContext ctx;
	NewsHome home;
	
	public void ejbCreate() throws CreateException {}
	
	public void ejbRemove() throws EJBException {
		// TODO Auto-generated method stub
		
	}

	public void setMessageDrivenContext(MessageDrivenContext ctx)
			throws EJBException {
		this.ctx = ctx;
	}

	public void onMessage(Message msg) {
		System.out.println("on Message È£Ãâ");
		
		try {
			Context initial = new InitialContext();
			Object obj = initial.lookup("news"); // news !!!
			home = (NewsHome)obj;
		} catch (Exception e) {
			System.out.println(e);
		}
		
		try {
			if ( msg instanceof MapMessage ) {
				MapMessage mm = (MapMessage)msg;
				String seq = mm.getString("seq");
				String name = mm.getString("name");
				String title = mm.getString("title");
				String content = mm.getString("content");
				System.out.println(seq + ":" + name + ":" + title + ":" + content);
				
				try {
					News news = null;
					try {
						news = home.findByPrimaryKey(seq);
					} catch (Exception e) {
						System.out.println("findByPrimaryKey : " + e.toString());
					}
					
					if (news == null) {
						System.out.println("°°Àº seq°ªÀÌ ¾øÀ» °æ¿ì......");
						home.create(seq, name, title, content);
						System.out.println("»õ·Î¿î °ªÀ» ÀúÀåÇß½À´Ï´Ù.");
					}
				} catch (Exception e) {
					System.out.println("CMP Exception : " + e.toString());
				}
			}µå
		} catch (JMSException e) {
			System.out.println("JMSException : " + e.toString());
		}
		
	} // onMessage ¸Þ¼Òµå ³¡

}

¹èÄ¡ µð½ºÅ©¸³ÅÍ ÀÛ¼º(À¥·ÎÁ÷ ºô´õ ÀÌ¿ë) ¹× ¹èÄ¡

À¥·ÎÁ÷ ºô´õ¸¦ ½ÇÇàÇϰí ÄÄÆÄÀÏµÈ °æ·ÎÀÎ C:\ejb\news\bin ¸¦ ¼±ÅÃÇÕ´Ï´Ù.
ÁÂÃø¸Þ´º¿¡¼­ NewsEJB ¸¦ ¼±ÅÃÇϰí General ÅÇ¿¡¼­ JNDI Name: Ç׸ñÀÇ °ªÀÌ news ·Î ¼öÁ¤ÇÕ´Ï´Ù.
General ÅÇ ¼³Á¤
Classes ÅÇ¿¡¼­ ¿£Æ¼Æ¼ ºóÀ» ±¸¼ºÇϴ Ŭ·¡½º°¡ ¿Ã¹Ù¸¥Áö È®ÀÎÇÕ´Ï´Ù.
General ÅÇ ¼³Á¤
Persistence ÅÇ¿¡¼­ DataSourde name: oraxa9, Table name: NEWS ·Î ¼³Á¤ÇÕ´Ï´Ù.
General ÅÇ ¼³Á¤
Resources ¸Þ´º¿¡¼­ ¿£Æ¼Æ¼ ºóÀÌ »ç¿ëÇÒ µ¥ÀÌÅÍ ¼Ò½º¸¦ ±×¸²Ã³·³ ¼³Á¤ÇÕ´Ï´Ù.
General ÅÇ ¼³Á¤
CMP Fields ¸Þ´º¿¡¼­ °¢ Çʵ带 Ŭ¸¯ÇÏ¿© Edit ¹öưÀ» Ȱ¼ºÈ­ ÇÑ ÈÄ, Edit ¹öưÀ» ÀÌ¿ëÇØ¼­ Çʵå ŸÀÔÀ» ¸ðµÎ LongString À¸·Î ¼³Á¤ÇÕ´Ï´Ù.
General ÅÇ ¼³Á¤
JNDI name: addnews ·Î, ¸ñÀûÁö Çü½ÄÀ» javax.jms.Topic ·Î, ¸ñÀûÁöÀÇ JNDI ¸íÀº jmstopic ·Î ÁöÁ¤ÇÕ´Ï´Ù.
(jmstopicÀ¸·Î ÁöÁ¤ÇÏ´Â ºÎºÐÀº XML ÆÄÀÏÀ» ¿­¾î Á÷Á¢ ¼öÁ¤ÇØ ÁÖ¾î¾ß ÇÕ´Ï´Ù.)
General ÅÇ ¼³Á¤
Classes ÅÇ¿¡¼­ ¸Þ½ÃÁö µå¸®ºì ºóÀ» ±¸¼ºÇϴ Ŭ·¡½º¸¦ È®ÀÎÇÕ´Ï´Ù.
General ÅÇ ¼³Á¤
Resources ÁÂÃø ¸Þ´º¿¡¼­ EJB Refs ÅÇÀ» ¼±ÅÃÇÑ ÈÄ, Add ¹öưÀ» Ŭ¸¯ÇÏ¿© ¸Þ½ÃÁö ºóÀÌ »ç¿ëÇÒ ¿£Æ¼Æ¼ ºó¿¡ ´ëÇÑ ·¹ÆÛ·±½º¸¦ ÁöÁ¤ÇÕ´Ï´Ù.
(±×¸²¿¡¼­¿Í °°ÀÌ news.jar#NewsEJB °ªÀ» ³ÖÀ» ¼ö ¾øÀ» ¼ö ÀÖ½À´Ï´Ù. ÀÌ ºÎºÐÀº XMLÆÄÀÏÀ» ¿­¾î Á÷Á¢ ÆíÁýÇØ ÁÖ¾î¾ß ÇÕ´Ï´Ù.) General ÅÇ ¼³Á¤
·¹ÆÛ·±½º°¡ Ãß°¡µÇ´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù.
General ÅÇ ¼³Á¤
Save ¹öưÀ» Ŭ¸¯ÇÏ¿© ¹èÄ¡ µð½ºÅ©¸³ÅÍ ÆÄÀÏÀ» »ý¼ºÇÕ´Ï´Ù.
ejb-jar.xml ÆÄÀÏÀ» ¿­°í ejb-link ¿¤¸®¸ÕÆ®ÀÇ °ªÀ» news.jar#NewsEJB ·Î ¼öÁ¤ÇÕ´Ï´Ù.
weblogic-ejb-jar.xml ÆÄÀÏÀ» ¿­°í destination-jndi-name ¿¤¸®¸ÕÆ®ÀÇ °ªÀ» jmstopic ·Î ¼öÁ¤ÇÕ´Ï´Ù.
´Ù½Ã À¥·ÎÁ÷ ºô´õ¸¦ ½ÇÇàÇÑ ÈÄ À¥·ÎÁ÷ ºô´õÀÇ Archive...¹öưÀ» ÀÌ¿ëÇØ¼­ news.jar ÆÄÀÏÀ» C:\ejb\news µð·ºÅ丮¿¡ »ý¼ºÇÕ´Ï´Ù.
Äֿܼ¡¼­ news.jar ÆÄÀÏÀ» ¹èÄ¡ÇÕ´Ï´Ù.

Å×½ºÆ®

C:/ejb ¿öÅ©½ºÆäÀ̽º¿¡ »õ·Î¿î ÇÁ·ÎÁ§Æ® news_client ¸¦ »ý¼ºÇϰí, Add External JARs.. ¹öưÀ» ÀÌ¿ëÇÏ¿© weblogic.jar ¸¦ Build Path ¿¡ Ãß°¡ÇÕ´Ï´Ù.
¾Æ·¡ ÀÚ¹Ù ÆÄÀÏÀ» ÀÛ¼ºÇÏ°í ½ÇÇàÇÕ´Ï´Ù.
´ÙÀ½ SQL*PLUS¸¦ ¿­°í news Å×ÀÌºí¿¡ µ¥ÀÌÅͰ¡ ÀÖ´ÂÁö È®ÀÎÇÕ´Ï´Ù.

NewsClient.java

package kr.co.hanbitbook.ejb.examples.news;

import javax.jms.MapMessage;
import javax.jms.Session;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicPublisher;
import javax.jms.TopicSession;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

public class NewsClient {
	public static void main(String[] args) {
		Context ctx = null;
		try{
			java.util.Properties p = new java.util.Properties();
			p.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
			p.put(Context.PROVIDER_URL, "t3://localhost:7001");
			ctx = new InitialContext(p);
			
			TopicConnectionFactory tcf = (TopicConnectionFactory) ctx.lookup("weblogic.jms.ConnectionFactory");
			TopicConnection qc = tcf.createTopicConnection();
			qc.start();
	
			Topic Topic = null;
			TopicSession tsession = null;
			try{
				tsession = qc.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
				Topic = (Topic)ctx.lookup("jmstopic");
			}catch(NamingException ne){
				Topic = tsession.createTopic("jmstopic");
				ctx.bind("jmstopic", Topic);
			}
	
			TopicPublisher qsender = tsession.createPublisher(Topic);
			MapMessage mm = tsession.createMapMessage();
			String[] msg = new String[]{ "±è¼º¹Ú", "»õ·Î¿î ¿µÈ­", "¹ÝÁöÀÇ Á¦¿Õ 3" };
			
			mm.setString("seq", "1");
			mm.setString("name",msg[0]);
			mm.setString("title",msg[1]);
			mm.setString("content", msg[2]);
	
			qsender.publish(mm);
			System.out.println("»õ·Î¿î ´º½º¸¦ Àü¼ÛÇÏ¿´½À´Ï´Ù.");
			qc.close();
			
		}catch(Exception e){
			System.out.println(e.toString());
		}
	}
}

Âü°í ¹®¼­

¾Ë±â½±°Ô Ç®¾î ¾´ À¥·ÎÁ÷°ú EJB 11Àå -ÇѺû¹Ìµð¾î,±è¼º¹Ú Àú-
¿¹Á¦¿¡ ¾²¿´´ø jar,war,ear ÆÄÀÏ (¹èÄ¡½Ã ÀÍ¼Ê¼Ç ¹ß»ýÇÒ ¶§ Âü°í¿ë)