gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 15:02:25 25 4
gpt4 key购买 nike

我是 Java EE 编程新手。我正在尝试使用 Java EE 在 Eclipse 中编写 JMS 发送器。我创建了一个新的 Java EE 项目,现在我的疑问是文件夹结构是什么以及在哪里编写 JMS 发送器 java 文件。

我正在使用 JBoss AS。我的要求是我必须使用此 JMS 发送器应用程序将消息推送到 JMS 队列。

最佳答案

首先,您需要编写一个 MDB(消息驱动 bean)来使用您的 JMS 消息。为了清楚起见,我将举一个小例子;

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

如果您需要进一步说明,请告诉我。希望这会有所帮助。

已编辑*

如果您从普通的 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);

请注意,您应该重复使用连接创建和 session 创建作为最佳实践...

关于Eclipse 中的 Java EE 项目文件夹结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13448079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com