to:znjq1001(追风)
能说详细点吗?具体应该怎么做呢?
能说详细点吗?具体应该怎么做呢?
解决方案 »
- iBatis 查询错误,不解请高人指教!送高分!
- 【求助!】webwork进行文件上传,如何使服务器上保存的文件名与原始文件名(包括扩展名)一致,或者扩展名一致,前面是一个顺序编号的字符串?
- 关于Struts2.0的问题
- JBPM 在ORACLE下 违反唯一约束的问题
- 高手求救!!!Spring mail发送的邮件无主题,无收件人?
- 请高手帮忙看一下这段代码…………谢谢了
- 关于html:select取值的问题
- .NET与J2EE哪个方向比较好??
- ==== 怎样拷贝整个目录 ====
- spring的包扫描的base-package配置com.test和com.test.*的区别
- jdbc问题
- 菜鸟跪求:JDBC连接ORACLE!!!!
你到dev2dev.bea.com上找找吧。
这样的话,再使用JMS当然就能找到
程序中用MessageDriverBean实现JMS。Tomcat因为只包含Web容器,因此不能支持JMS.
A发消息给B
对于A来说B是远程接收器,因此B要设成监听A
反之亦然
你好,能不能说的详细点?或者指点一些文档给我参考一下,我急需。
谢谢。
提得不错
请看
package csm.jms;
import javax.swing.*;
import javax.naming.*;
import javax.jms.*;
import java.util.*;
import csm.jms.exception.*;
import csmcore.jms.entitybean.*;
import csmcore.jms.entityview.*;
import csmcore.jms.exception.*;
import javax.ejb.*;
import java.rmi.*;
import csmcore.jms.sessionbean.*;
public class CsmPublisher {
private String hostName="";
private String topicName="";
private CsmSubPubConnMgr mgr=null;
private JmsClientDetail bean=null;
private TopicConnectionFactory topicFactory=null;
private TopicSession topicSession=null;
private TopicPublisher publisher=null;
private Topic topic=null;
public CsmPublisher(String host,String topic)
{
this.hostName = host;
this.topicName = topic;
mgr = CsmSubPubConnMgr.getInstance(host, topic);
bean = mgr.getJmsClientDetail();
topicFactory = mgr.getFactory();
//topic = mgr.getTopic();
}
public void sendMsg(String msg)throws JmsPublisherException{
try
{
String uid=bean.assignUser("p");
if(!uid.equals("none"))
{
TopicConnection conn = topicFactory.createTopicConnection(uid, uid);
topicSession = conn.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
publisher = topicSession.createPublisher(mgr.getTopic());
conn.start();
TextMessage txtMsg = topicSession.createTextMessage();
txtMsg.setText(msg);
publisher.publish(txtMsg);
conn.close();
bean.unassignUser(uid);
}else
{
JOptionPane.showMessageDialog(null,"用于发送的客户连接数已经用尽");
}
}catch(Exception ex){
throw new JmsPublisherException("连接JMS服务器出错:"+ex);
}
}
}package csm.jms;
import javax.naming.*;
import javax.jms.*;
import java.util.*;
import csm.jms.exception.*;
import csmcore.jms.entitybean.*;
import csmcore.jms.entityview.*;
import csmcore.jms.exception.*;
import javax.ejb.*;
import java.rmi.*;
import csmcore.jms.sessionbean.*;public class CsmSubPubConnMgr {
private static Context ctx=null;
private static TopicConnectionFactory topicFactory=null;
private static TopicConnection conn=null;
private static TopicSession topicSession=null;
private static Topic topic=null;
private static TopicSubscriber sub=null;
private static CsmSubPubConnMgr m_instance=null;
private static JmsClientDetail bean=null;
private CsmSubPubConnMgr() {
}
public JmsClientDetail getJmsClientDetail(){
return bean;
}
public Topic getTopic(){
return topic;
}
public TopicConnectionFactory getFactory(){
return topicFactory;
}
synchronized public static CsmSubPubConnMgr getInstance(String hostName,String topicName)
{
if(m_instance==null)
{
try
{
Properties p = new Properties();
System.setProperty("java.security.policy","policy");
System.setProperty("javax.net.ssl.trustStore", "csmkey");
System.setProperty("javax.net.debug","ssl");
Properties sessionp = System.getProperties();
p.put(Context.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
p.put(Context.URL_PKG_PREFIXES, "org.jboss.naming");
p.put(Context.PROVIDER_URL, hostName);
//JOptionPane.showMessageDialog(null,hostName+":343");
p.setProperty("jnp.timeout", "0");
p.setProperty("jnp.sotimeout", "0");
p.put(Context.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
p.put(Context.PROVIDER_URL, hostName);
ctx = new InitialContext(p);
Object obj = ctx.lookup("JmsClientDetail");
JmsClientDetailHome home = (JmsClientDetailHome) javax.rmi.PortableRemoteObject.narrow(
obj, JmsClientDetailHome.class);
bean = home.create();
topic = (Topic) ctx.lookup(topicName);
topicFactory = (TopicConnectionFactory) ctx.lookup("ConnectionFactory");
}catch(Exception ex){
System.out.println("jms error:"+ex);
return null;
}
m_instance=new CsmSubPubConnMgr();
}
return m_instance;
}
}import csmcore.jms.entitybean.*;
import csmcore.jms.entityview.*;
import csmcore.jms.exception.*;
import javax.ejb.*;
import java.rmi.*;
import csmcore.jms.sessionbean.*;public class CsmSubscriber extends Thread implements MessageListener{
private static TopicSubscriber sub=null;
private static String csmMsg="";
private static TopicConnection conn=null;
private static TopicConnectionFactory factory=null;
private static TopicSession topicSession=null;
private static CsmSubPubConnMgr mgr=null;
private static JmsClientDetail bean=null;
private static Topic topic=null;
private static String uid="";
private static CsmSubscriber m_instance=null;
public String returnUid(){
return this.uid;
}
public void closeProcess(){
try
{
conn.close();
//JOptionPane.showMessageDialog(null,""+uid);
bean.unassignUser(uid);
}catch(Exception ex){
JOptionPane.showMessageDialog(null,"error:"+ex);
}
}
public void closeProcess(String userName){
try
{
conn.close();
//JOptionPane.showMessageDialog(null,""+uid);
bean.unassignUser(userName);
}catch(Exception ex){
JOptionPane.showMessageDialog(null,"error:"+ex);
}
}
synchronized public static CsmSubscriber getInstance(String hostName,String topicName){
if(m_instance==null)
{
try {
System.out.println("begin");
mgr = CsmSubPubConnMgr.getInstance(hostName, topicName);
System.out.println("done1");
factory = mgr.getFactory();
System.out.println("done2");
bean = mgr.getJmsClientDetail();
System.out.println("done3");
uid = bean.assignUser("s");
//JOptionPane.showMessageDialog(null,"assign user:"+uid);
if (!uid.equals("none")) {
conn = factory.createTopicConnection(uid, uid);
System.out.println("done3");
topic = mgr.getTopic();
System.out.println("done4");
//conn.setClientID("csmsubid");
topicSession = conn.createTopicSession(false,
Session.AUTO_ACKNOWLEDGE);
System.out.println("done5");
sub = topicSession.createDurableSubscriber(topic, "csmjms");
System.out.println("done6");
}
else {
JOptionPane.showMessageDialog(null, "用于接收的客户连接数已经用尽");
}
//JOptionPane.showMessageDialog(null,""+sub.getTopic().toString());
}
catch (Exception ex) {
JOptionPane.showMessageDialog(null, "init error:" + ex);
return null;
}
m_instance=new CsmSubscriber();
}
return m_instance;
}
private CsmSubscriber() { }
public void run()
{
try
{ sub.setMessageListener(this);
conn.start();
}catch(Exception ex)
{
JOptionPane.showMessageDialog(null,"set listener error:"+ex);
} }
public String getMessage()
{
try
{
return this.csmMsg;
}catch(Exception ex){
JOptionPane.showMessageDialog(null,"error:"+ex);
return "";
}
}
public void onMessage(Message msg)
{
try
{ TextMessage tm=(TextMessage)msg;
//JOptionPane.showMessageDialog(null,"tm:"+tm.getText());
this.csmMsg=tm.getText();
//return;
}catch(Exception ex){
JOptionPane.showMessageDialog(null,"error:"+ex);
}
}
}
发送方:
TopicConnection conn = topicFactory.createTopicConnection(uid, uid);
topicSession = conn.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
publisher = topicSession.createPublisher(mgr.getTopic());
conn.start();
TextMessage txtMsg = topicSession.createTextMessage();
txtMsg.setText(msg);
publisher.publish(txtMsg);
conn.close();
接收方:
public void onMessage(Message msg)
{
try
{ TextMessage tm=(TextMessage)msg;
//JOptionPane.showMessageDialog(null,"tm:"+tm.getText());
this.csmMsg=tm.getText();
//return;
}catch(Exception ex){
JOptionPane.showMessageDialog(null,"error:"+ex);
}
记住,我上面的是全部的源码,你会看到一个bean = mgr.getJmsClientDetail();
这是一个EJB方法,作用在于动态的在运行时给JMS分配一个CLIENTID和PWD,为什么要这样,因为JBOSS不能N个客户端共用一个CLIENTID,而WEBLOGIC可以,因此一个CLIENT端要连,就要分配一个(动态的改JBOSS内的XML和数据库)中的一个CLIENTID
下面给出JMS BEAN的源码
package csmmdb;import javax.ejb.MessageDrivenBean;
import javax.jms.MessageListener;
import javax.ejb.MessageDrivenContext;
import javax.ejb.CreateException;
import javax.jms.Message;
import javax.jms.*;
public class csmjmsBean
implements MessageDrivenBean, MessageListener {
MessageDrivenContext messageDrivenContext;
public void ejbCreate(){
} public void ejbRemove() {
}
public String getAss(){
return "asshole";
}
public void onMessage(Message msg) {
try
{
TextMessage tm=(TextMessage)msg;
System.out.println(tm.getText()); }catch(Exception ex){
System.out.println("jms server error:"+ex);
}
} public void setMessageDrivenContext(MessageDrivenContext messageDrivenContext) {
this.messageDrivenContext = messageDrivenContext;
}
}
ejb-jar.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
<ejb-jar>
<display-name>csmjms</display-name>
<enterprise-beans>
<message-driven>
<display-name>csmjms</display-name>
<ejb-name>csmjms</ejb-name>
<ejb-class>csmmdb.csmjmsBean</ejb-class>
<transaction-type>Container</transaction-type>
<message-driven-destination>
<destination-type>javax.jms.Topic</destination-type>
<subscription-durability>Durable</subscription-durability>
</message-driven-destination>
</message-driven>
</enterprise-beans>
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>csmjms</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>
jboss.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 3.2//EN" "http://www.jboss.org/j2ee/dtd/jboss_3_2.dtd">
<jboss>
<enterprise-beans>
<message-driven>
<ejb-name>csmjms</ejb-name>
<destination-jndi-name>topic/csmjms</destination-jndi-name>
<mdb-user>csm</mdb-user>
<mdb-passwd>isdnymk</mdb-passwd>
<mdb-subscription-id>csmjms</mdb-subscription-id>
</message-driven>
</enterprise-beans>
</jboss>
远程连接有没有简单的方法:比如不用 ejb 来?Jboss 4.0 启动后 jms 的 1099 端口开启,等待连接,
Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY,
"org.jnp.interfaces.NamingContextFactory");
properties.put(Context.URL_PKG_PREFIXES, "org.jnp.interfaces");
properties.put(Context.PROVIDER_URL, "wangxl:1099");
//properties.put(Context.PROVIDER_URL, "jnp://wangxl:1099");
//properties.put(Context.PROVIDER_URL, "jnp://10.4.0.54:1099");都可以的,但这样尽限于本机的连接方式,我配置了一台 JBoss ,现在想从另一台客户端上来
连接 这个 Jms 队列什么的,来完成收发信息。
IBM 的MQ 完全能够完成这样的功能,我想Jboss 一定也能行,
JBoss 服务器上的配置方法,我还一头雾水,lifetragedy 你有这方面的配置经验或者有什么方向么?
你先把WEBLOGIC7。0配CONNECTION搞搞懂,然后再看一下JAVA的白皮书,就知道我上面的语句干吗这样写了
哎,现在搞定了。其实就是在服务器中的Hosts(Linux存在这个问题。)加个自己的 Ip 地址的映射就行了。大概是太简单了,各位会大都不在点子上。失望。