2012-11-19 5 views
0

Java EE 프로그래밍을 처음 사용합니다. Java EE를 사용하여 Eclipse에서 JMS 전송자를 작성하려고합니다. 새로운 Java EE 프로젝트를 만들었습니다. 이제는 폴더 구조와 JMS JMS 보낸 사람 Java 파일 작성 위치가 궁금합니다.Eclipse에서 Java EE 프로젝트 폴더 구조?

JBoss AS를 사용 중입니다. 필자가 요구하는 것은이 JMS 보낸 응용 프로그램을 사용하여 JMS 큐로 메시지를 푸시해야한다는 것입니다.

답변

1

우선 JMS 메시지를 사용하기 위해 MDB (Message Driven Bean)를 작성해야합니다. 명확한 목적을 위해 나는 작은 예를 제시 할 것이다.

@MessageDriven(activationConfig = { 
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"), 
    @ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/offlinemsg"), 
    @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge") }) 
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) 
public class MessageHandlerMDB implements MessageListener { 

private static final Logger log = Logger.getLogger(MessageHandlerMDB.class); 


@Override 
public void onMessage(Message message) { 

    log.info("Message received in MessageHandlerMDB"); 


} 

} 

응용 프로그램을 배포 할 때 서버는 주석을 기반으로 메시지 구동 Bean을 식별하고 사용자를 위해 대기열을 만듭니다. 그런 다음 ConnectionFactory를 통해 평소대로이 대기열로 메시지를 보낼 수 있습니다. Jboss 내의 동일한 애플리케이션을 통해 메시지를 보내는 경우 다음과 같이 작성할 수 있습니다.

private void sendObjectToQueue(Serializable object) { 


    Session session = null; 
    MessageProducer sender = null; 
    Connection connect = null; 

    if (logger.isDebugEnabled()) { 
    logger.debug("Entered sendObjectToQueue(" + object.getClass()); 
    } 

    try { 

     Context context = new InitialContext(); 
     ConnectionFactory factory = (ConnectionFactory) context 
       .lookup("ConnectionFactory"); 

     Queue queue = (Queue) context.lookup("queue/offlinemsg"); 
     connect = factory.createConnection(); 
     session = connect.createSession(false, 
       Session.AUTO_ACKNOWLEDGE); 
     sender = session.createProducer(queue); 

     ObjectMessage message = session.createObjectMessage(); 

     message.setObject(object); 
     sender.send(message); 
     sender.close(); 
     connect.close(); 

     if (logger.isDebugEnabled()) { 
     logger.debug("The " + object.getClass() + " object was sent to jms queue"); 
     } 

    } catch (JMSException e) { 
     logger.error("Sending object to queue failed", e); 


    } catch (Exception e) { 
     logger.error("Sending object to queue failed", e); 


    } finally { 

     if (sender != null) { 
      try { 
       sender.close(); 
       if (logger.isDebugEnabled()) { 
        logger.debug("Closed jms session"); 
       } 
      } catch (JMSException e) { 
       logger.error("Closing jms session failed", e); 
      } 
     } 

     if (connect != null) { 
      try { 
       connect.close(); 
       if (logger.isDebugEnabled()) { 
        logger.debug("Closed jms session"); 
       } 
      } catch (Exception e) { 
       logger.error("Closing jms session failed", e); 
      } 
     } 

     if (session != null) { 
      try { 
       session.close(); 
       if (logger.isDebugEnabled()) { 
        logger.debug("Closed jms session"); 
       } 
      } catch (Exception e) { 
       logger.error("Closing jms session failed", e); 
      } 
     } 
    } 
} 

추가 설명이 필요한 경우 알려 주시기 바랍니다. 희망이 도움이됩니다. 그런 다음 다음과 같은 코드가 필요합니다 일반 자바 클래스에서 호출하는 경우

이 *

을 편집 당신이를 다시해야하는

Hashtable env = new Hashtable(); 
env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); 
env.put(Context.PROVIDER_URL, "jnp://localhost:1099"); 
env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces"); 

Context ctx = new InitialContext(env); 
ConnectionFactory cf = (ConnectionFactory)ctx.lookup("/ConnectionFactory"); 
Queue queue = (Queue)ic.lookup("/queues/MyQueue"); 
Connection connection = cf.createConnection(); 
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
MessageProducer producer = session.createProducer(queue); 
connection.start(); 
TextMessage message = session.createTextMessage("Test"); 
producer.send(message); 

주 (이것은 보스에 특정한 참고) 최상의 방법으로 연결 만들기 및 세션 만들기 ...

+0

@ Dinu : 내 의심을 분명히 해줘서 고마워. EJB 프로젝트를 생성 한 후에 나는 두 개의 프로젝트를 얻었다. 하나는 EJB이고 다른 하나는 EJB Clinet입니다.이 코드를 EJB 임상 시험 프로젝트에 쓸 수 있습니까? –

+0

안녕하세요 Rajesh, 나는 일반적인 자바 클라이언트에서 호출하는 방법을 보여주기 위해 내 게시물을 편집했습니다. EJB 클라이언트 프로젝트에 코드의 마지막 부분을 포함시키고 서버에 배포 할 EJB 프로젝트의 첫 번째 코드 단편 부분을 포함 할 수 있습니다. – dinukadev

+0

정말 고마워요. –

관련 문제