我是JMS/TIBCO和weblogic安装的新手。
我可以用旧的方式和新的方式把这个消息发到TIBCO。我想在Weblogic 12c中设置配置,并删除用户名、pwd、服务器URL和队列名(硬编码值)。
下面是旧方式的代码;我能够向队列发送一条消息。
private void tibcoEMSQueueSender() throws NamingException{
try {
ConnectionFactory myConnFactory;
Queue queue;
@SuppressWarnings("rawtypes")
Hashtable env = getEnvProps();
Context ctx = new InitialContext(env);
myConnFactory = (javax.jms.ConnectionFactory) ctx.lookup(Constants.JNDI_CONNECTION_FACTORY);
queue = (javax.jms.Queue) ctx.lookup(Constants.TIBCO_QUEUE_NAME);
Connection connection = myConnFactory.createConnection(Constants.USER_NAME, Constants.PASSWORD);
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer messageProducer = session.createProducer(queue);
TextMessage textMessage = session.createTextMessage();
textMessage.setText("Hello EMS");
messageProducer.send(textMessage);
connection.start();
session.close();
connection.close();
} catch (JMSException e) {
e.printStackTrace();
System.exit(0);
}
}
@SuppressWarnings({ "rawtypes", "unchecked" })
private Hashtable getEnvProps(){
Hashtable env = new Hashtable();
env.put("java.naming.security.credentials", Constants.PASSWORD);
env.put("java.naming.factory.initial","com.tibco.tibjms.naming.TibjmsInitialContextFactory");
env.put("java.naming.security.principal", Constants.USER_NAME);
env.put("java.naming.provider.url", Constants.SERVER_URL);
return env;
} 使用Spring模板的新方法。Spring版本: 4.1.6我使用最新的Spring和Hibernate创建了一个XML免费项目。因此,我使用@EnableJms进行配置。
在JMSConfiguration.java中
@Configuration
@EnableJms
@ComponentScan({ "com.xxx.xxx" })
@PropertySource("classpath:local_application.properties")
public class JMSConfiguration {
@Bean
public JndiTemplate jndiTemplate() {
JndiTemplate jndiTemplate = new JndiTemplate();
Properties jndiProps = new Properties();
jndiProps.setProperty("java.naming.factory.initial", "com.tibco.tibjms.naming.TibjmsInitialContextFactory");
jndiProps.setProperty("java.naming.provider.url",Constants.SERVER_URL);
jndiProps.setProperty("java.naming.security.principal",Constants.USER_NAME);
jndiProps.setProperty("java.naming.security.credentials",Constants.PASSWORD);
jndiTemplate.setEnvironment(jndiProps);
return jndiTemplate;
}
@Bean
public UserCredentialsConnectionFactoryAdapter authenticate() throws JMSException, NamingException {
UserCredentialsConnectionFactoryAdapter userCredentialsConnectionFactoryAdapter = new UserCredentialsConnectionFactoryAdapter();
userCredentialsConnectionFactoryAdapter.setUsername(Constants.USER_NAME);
userCredentialsConnectionFactoryAdapter.setPassword(Constants.PASSWORD);
userCredentialsConnectionFactoryAdapter.setTargetConnectionFactory(jmsConnectionFactory());
return userCredentialsConnectionFactoryAdapter;
}
public ConnectionFactory jmsConnectionFactory() throws NamingException, JMSException{
ConnectionFactory connectionFactory;
Context ctx = null;
Hashtable env = new Hashtable();
env.put("java.naming.security.credentials", Constants.PASSWORD);
env.put("java.naming.factory.initial","com.tibco.tibjms.naming.TibjmsInitialContextFactory");
env.put("java.naming.security.principal", Constants.USER_NAME);
env.put("java.naming.provider.url", Constants.SERVER_URL);
ctx = new InitialContext(env);
connectionFactory = (javax.jms.ConnectionFactory) ctx.lookup(Constants.JNDI_CONNECTION_FACTORY);
connectionFactory.createConnection(Constants.USER_NAME, Constants.PASSWORD);
return connectionFactory;
}
@Bean
public JndiObjectFactoryBean jmsQueueName() {
JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean();
jndiObjectFactoryBean.setJndiTemplate(jndiTemplate());
jndiObjectFactoryBean.setJndiName(Constants.TIBCO_QUEUE_NAME);
return jndiObjectFactoryBean;
}
@Bean(name="jmsTemplate")
public JmsTemplate jmsTemplate() throws JMSException, NamingException {
JmsTemplate jmsTemplate = new JmsTemplate(authenticate());
jmsTemplate.setSessionTransacted(false);
jmsTemplate.setReceiveTimeout(5000);
jmsTemplate.setDefaultDestination((Destination) jmsQueueName().getObject());
return jmsTemplate;
}
@Bean
public MessageSender queueMessageSender() {
return new MessageSender();
}
}我在控制器中自动加载MessageSender类,并能够将消息发送到Tibco队列。在上面的java代码中,我希望消除所有硬编码的值,并将它们写入weblogic12c服务器配置(比如使用tibco创建一个外部服务器,创建一个JNDI和一个队列。
有关上述守则的问题:
我在想,如果我使用tibco:://xxxxxxxxxxx:7222正确地设置了外部服务器,那么用户名和pwd应该能够与tibco服务器建立一个通信通道,并将消息发送到队列中。我想连接工厂的名称应该是匹配的。
你能帮我找到一篇关于这方面的文章或逐步分享你的经验吗?请。
发布于 2016-01-18 04:21:34
我创建了一个外部服务器,以避免在代码中硬编码密码。
这里是我在WLS中创建外部服务器所遵循的指南。
创建一个模块。
设置一个远程连接工厂。设置远程队列。设置初始上下文并传递凭据和主体。
使用Spring模板中的本地名称来建立连接和发送消息。
这是给TCP的。
https://stackoverflow.com/questions/33816818
复制相似问题