我试图了解我的Java EE应用程序应该放在哪些应用程序逻辑中.我是Java EE的新手,我正在考虑从遗留数据库加载大量非结构化数据,并构建一个干净的对象模型供我的应用程序使用.根据我的调查,我看到Java EE应用程序有两个组件,Enterprise Bean和Web Application组件.我的应用程序的这一部分将负责加载数据,构建对象模型以及根据数据的当前状态通过JMS向感兴趣的各方发送消息.数据将通过与数据库同步以及通过JMS从远程Java应用程序接收的消息进行更新.
EJB是否是这种功能的正确位置?如何开始我的对象模型的初始化(主要方法Java App等价物)?创建定时事件以查看对象模型并通过JMS发送消息的最佳实践是什么?
我已经阅读了很多关于Java EE,Glassfish,EJB的文章......但仍然觉得我没有清楚地了解我应该在哪里编写这个功能.我见过的EJB的任何例子都倾向于围绕来自客户端应用程序的bean的直接方法调用.
目前我觉得Java应用程序可以完成这项工作,但我们正在考虑将来使用RMI和Web客户端.
我已经使用HornetQ设置了一个jms服务器作为JMS提供程序(Queue).
我有一个应用程序作为生产者,另一个(不同的计算机)作为消费者.
我知道JMS规范并不保证交付顺序,但我正在寻找一种方法:完全按照发送的顺序接收消息,即使它是特定于提供者的.
有任何想法吗?
我正在学习Java EE(从SE迁移),我对Java EE环境中的异步执行感到困惑.
基本上我理解创建Thread或Timer不完全推荐.到目前为止我发现的另一种方法是使用JMS将消息传递给EJB Message Bean,它将以异步方式执行.
有哪些其他方法可以实现此行为?使用JMS的原因看起来对于简单任务来说太多开销.
我在网上发现了一些相当矛盾的信息,我认为每个不同的JMS提供商也可能会改变答案.
我正在尝试理解何时将XML发送到JMS系统(例如ActiveMQ),我是否应该使用
BytesMessage:我可以保证XML被正确序列化并且前导码将匹配实际编码.此外,我可以确定客户端将能够正确获取原始表示.
TextMessage:许多队列实现中都有API用于轻松发送XML.我也明白,消息附有"编码"信息.但是我冒险将消息编码(并将其编写的前导码)编码为一种格式并将其作为另一种格式接收.
有没有人有明确的答案,或者至少有一些理由为什么你会选择一个而不是另一个?
我知道Camel的JMS组件,用于接收消息,使用Springs DefaultMessageListenerContainer.它可以配置为使用CLIENT_ACKNOWLEDGE模式来确认消息.我的问题是,什么时候调用message.acknowledge()方法?它是由spring的监听器容器在内部调用的吗?
或者我能以某种方式在遗嘱中承认消息吗?
我想避免因为我的应用程序在处理这些消息期间崩溃并使其成为事务性而导致消息丢失的情况对我来说有点太重了
我在远程glassfish服务器上配置了JMS队列.我正在尝试从本地计算机连接此队列.是否可以直接连接到此服务器,或者我需要通过某个代理/代理连接?它是如何工作的?(我在jms地区很新鲜)非常感谢
我的spring-config.xml中有以下xml代码
<jms:listener-container acknowledge="auto"
connection-factory="cachedConnectionFactory" container-type="default"
error-handler="consumerErrorHandler" concurrency="20-25">
<jms:listener destination="#{TaskFinished.destination}"
method="onMessage" ref="taskFinished" />
</jms:listener-container>
Run Code Online (Sandbox Code Playgroud)
现在,我将我的spring xml配置文件转换为Java配置.
我把它翻译成了
@Bean(name = "consumerJmsListenerContainer")
public DefaultMessageListenerContainer consumerJmsListenerContainer() {
DefaultMessageListenerContainer messageListenerContainer = new DefaultMessageListenerContainer();
messageListenerContainer
.setConnectionFactory(cachingConnectionFactory());
messageListenerContainer.setConcurrency("20-25");
messageListenerContainer.setErrorHandler(new ConsumerErrorHandler());
messageListenerContainer
.setSessionAcknowledgeMode(Session.AUTO_ACKNOWLEDGE);
messageListenerContainer.setMessageListener(new TaskFinished());
return messageListenerContainer;
}
Run Code Online (Sandbox Code Playgroud)
我需要知道的是,如果Message Container中有多个MessageListner,就像
<jms:listener-container acknowledge="auto"
connection-factory="cachedConnectionFactory" container-type="default"
error-handler="consumerErrorHandler" concurrency="20-25">
<jms:listener destination="#{questionGeneration.destination}"
method="onMessage" ref="questionGeneration" />
<jms:listener destination="#{friendShipLogic.destination}"
method="onMessage" ref="friendShipLogic" />
<jms:listener destination="#{postAvailabilityChecker.destination}"
method="onMessage" ref="postAvailabilityChecker" />
<jms:listener destination="#{playOn.destination}" method="onMessage"
ref="playOn" />
</jms:listener-container>
Run Code Online (Sandbox Code Playgroud)
我怎么能把这个xml代码转换成Java配置?
尝试使用Spring 4和ActiveMQ实现非XML JMS侦听器.我的问题是我的客户端一直遇到以下错误:
Setup of JMS message listener invoker failed for destination 'topic.FromJndiProperties' [...]
Cause: The JMS connection has failed: Force close due to SecurityException on connect.
Cause: User name [null] or password is invalid.
Run Code Online (Sandbox Code Playgroud)
因此,使用用户名和密码null建立与目标的连接.我想我可能没有正确设置destinationResolver但我不知道如何解决这个问题.谁能帮我解决这个问题?
我的AppConfig:
@Autowired
private Environment env;
@Autowired
private BeanFactory springContextBeanFactory;
@Bean
public DefaultJmsListenerContainerFactory myListenerContainerFactory() throws NamingException {
Properties props = new Properties();
props.setProperty(Context.INITIAL_CONTEXT_FACTORY, env.getProperty("java.naming.factory.initial"));
props.setProperty(Context.PROVIDER_URL, env.getProperty("java.naming.provider.url"));
props.setProperty(Context.SECURITY_PRINCIPAL, env.getProperty("java.naming.security.principal"));
props.setProperty(Context.SECURITY_CREDENTIALS, env.getProperty("java.naming.security.credentials"));
Context jndiContext = new InitialContext(props);;
ConnectionFactory connectionFactory = (ConnectionFactory) jndiContext.lookup("ConnectionFactory");
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory(); …Run Code Online (Sandbox Code Playgroud) 我已经厌倦了搜索谷歌并得到这样的.这些链接是指jboss eap 6.
1.如何在jboss eap 7中配置JMS?
2. Jboss eap 7有没有内置的JMS?或需要手动配置?
3.使用Jboss eap 7的应用程序?
jms ×10
java ×9
glassfish ×2
java-ee ×2
spring ×2
xml ×2
apache-camel ×1
asynchronous ×1
ejb ×1
ejb-3.0 ×1
glassfish-3 ×1
hornetq ×1
jboss-eap-7 ×1
spring-jms ×1