简体   繁体   English

Eclipse中的Java EE项目文件夹结构?

[英]Java EE project folder structure in eclipse?

I am new to Java EE programming. 我是Java EE编程的新手。 I am attempting to write a JMS sender in Eclipse using Java EE. 我正在尝试使用Java EE在Eclipse中编写JMS发送器。 I have created a new Java EE project and now my doubt is what is the folder structure and where to write my JMS sender java file. 我创建了一个新的Java EE项目,现在我的疑问是文件夹结构是什么以及在哪里写入JMS发送器Java文件。

I am using JBoss AS. 我正在使用JBoss AS。 My requirement is that I have to push the messages to a JMS Queue using this JMS sender application. 我的要求是必须使用此JMS发送者应用程序将消息推送到JMS队列。

First of all you need to write a MDB ( Message driven bean) to consume your JMS messages. 首先,您需要编写一个MDB(消息驱动bean)来使用您的JMS消息。 For clarity purposes i will present a small example; 为了清楚起见,我将举一个小例子。

@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");


}

}

On deployment of your app the server will identify the message driven bean based on the annotations and create a queue for you. 在部署应用程序时,服务器将基于注释识别消息驱动的Bean,并为您创建队列。 You can then send message to this queue as usual through a ConnectionFactory. 然后,您可以照常通过ConnectionFactory将消息发送到此队列。 If you are sending a message through the same application within Jboss then you can write as follows; 如果要通过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);
            }
        }
    }
}

Let me know if you need further clarification. 让我知道您是否需要进一步说明。 Hope this helps. 希望这可以帮助。

Edited * 编辑 *

If you are calling from a normal java class then following code is required(note that this is specific to JBoss) 如果从普通的Java类调用,则需要以下代码(请注意,这是JBoss特有的)

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);

Note that you should reuse the Connection creation and session creation as best practices... 请注意,您应该将连接创建和会话创建作为最佳实践重复使用...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM