powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Не работает JMS Durable Subscriber
12 сообщений из 12, страница 1 из 1
Не работает JMS Durable Subscriber
    #38394296
denis111111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Стараюсь зделать Durable Subscriber на проекте JSF, Glassfish 3.1.2.

Код бина:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
package core;

import java.io.Serializable;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.context.SessionScoped;
import javax.inject.Named;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.Topic;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicSubscriber;


@Named("ConsumerBean")
@SessionScoped
public class ConsumerBean implements Serializable {

    @Resource(lookup = "jms/DurableConnectionFactory")
    private ConnectionFactory connectionFactory;
    @Resource(lookup = "jms/Topic")
    private Topic topic;
    private MessageConsumer consumer = null;
    private Session session = null;
    TopicSubscriber durableSubscriber = null;
    private Connection connection = null;
    private MessageBean messageBean = new MessageBean();
    private String connectStatus = ConsumerBean.DISCONNECT;
    private static final String CONNECT = "connect";
    private static final String DISCONNECT = "disconnect";
    private String subName = "SubName";

    @PostConstruct
    private void init() {
        try {
            if (connection == null) {
                this.connection = connectionFactory.createConnection();
                this.session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

                //ClientId
            }
        } catch (JMSException ex) {
            Logger.getLogger(ConsumerBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void startConnection() {
        try {
            System.out.println("Starting subscriber");
            //connection.stop();
            this.durableSubscriber =  session.createDurableSubscriber(topic,this.subName);
            this.durableSubscriber.setMessageListener(messageBean);
            this.connection.start();
        } catch (JMSException ex) {
            Logger.getLogger(ConsumerBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void stopConnection() {
        try {
            this.durableSubscriber.close();
            connection.stop();
        } catch (JMSException e) {
            System.err.println("closeSubscriber: Exception occurred: " + e.toString());
        }
    }
    private String message = "message is not exist";

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    @PreDestroy
    private void destroy() {
        try {
            if (this.connection != null) {
                this.session.unsubscribe(this.subName);
                this.connection.close();
                this.connection = null;
            }
        } catch (JMSException ex) {
            Logger.getLogger(ConsumerBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public String getConnectStatus() {
        return connectStatus;
    }

    public void setConnectStatus(String connectStatus) {
        this.connectStatus = connectStatus;
    }
}



init() - создаю конект до JMS провайдера и сесию.
destroy() - закриваю подписку и коннект
startConnection() - создаю подписку
stopConnection() - приостанавливаю конект.

Когда пытаюсь вызвать метод startConnection() , то на строке this.durableSubscriber = session.createDurableSubscriber(topic,this.subName); вилетает такое:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
SEVERE: createConsumer on JMSService:jmsdirect failed for connectionId:5138115764682679808 and sessionId:5138115764703427840 due to 
SEVERE: javax.jms.JMSException: createConsumer on JMSService:jmsdirect failed for connectionId:5138115764682679808 and sessionId:5138115764703427840 due to unkown JMSService server error.
	at com.sun.messaging.jms.ra.DirectSession._createAndAddConsumer(DirectSession.java:1647)
	at com.sun.messaging.jms.ra.DirectSession.createDurableSubscriber(DirectSession.java:343)
	at core.ConsumerBean.startConnection(ConsumerBean.java:66)
	at core.ConsumerBean$Proxy$_$$_WeldClientProxy.startConnection(ConsumerBean$Proxy$_$$_WeldClientProxy.java)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at javax.el.BeanELResolver.invokeMethod(BeanELResolver.java:779)
	at javax.el.BeanELResolver.invoke(BeanELResolver.java:528)
	at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:257)
	at com.sun.el.parser.AstValue.invoke(AstValue.java:248)
	at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:302)
	at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:39)
	at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
	at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:148)
	at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
	at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:769)
	at javax.faces.component.UICommand.broadcast(UICommand.java:300)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
	at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
	at java.lang.Thread.run(Thread.java:722)
Caused by: com.sun.messaging.jmq.jmsservice.JMSServiceException: addConsumer: Add consumer failed. Connection ID: 5138115764682679808, session ID: 5138115764703427840
	at com.sun.messaging.jmq.jmsserver.service.imq.IMQDirectService.addConsumer(IMQDirectService.java:1331)
	at com.sun.messaging.jms.ra.DirectSession._createAndAddConsumer(DirectSession.java:1597)
	... 49 more
Caused by: com.sun.messaging.jmq.jmsserver.util.BrokerException: [B2106]: Creation of consumer [null:SubName] from connection IMQDirectConn[AUTHENTICATED,guest@192.168.0.17:0,jmsdirect:0] on the auto-created destination T:PhysicalTopic failed
	at com.sun.messaging.jmq.jmsserver.data.handlers.ConsumerHandler.createConsumer(ConsumerHandler.java:778)
	at com.sun.messaging.jmq.jmsserver.data.protocol.ProtocolImpl.createConsumer(ProtocolImpl.java:526)
	at com.sun.messaging.jmq.jmsserver.service.imq.IMQDirectService.addConsumer(IMQDirectService.java:1314)
	... 50 more
Caused by: java.lang.NullPointerException
	at com.sun.messaging.jmq.jmsserver.core.Subscription.calcHashcode(Subscription.java:283)
	at com.sun.messaging.jmq.jmsserver.core.Subscription.<init>(Subscription.java:310)
	at com.sun.messaging.jmq.jmsserver.core.Subscription.subscribe(Subscription.java:938)
	at com.sun.messaging.jmq.jmsserver.core.Subscription.subscribe(Subscription.java:905)
	at com.sun.messaging.jmq.jmsserver.core.Subscription.findCreateDurableSubscription(Subscription.java:1026)
	at com.sun.messaging.jmq.jmsserver.core.Subscription.findCreateDurableSubscription(Subscription.java:982)
	at com.sun.messaging.jmq.jmsserver.data.handlers.ConsumerHandler.createConsumer(ConsumerHandler.java:650)
	... 52 more



Все делаю как написано в туториале. Просто й Topic Subscriber работает нормально.
Метод connection.stop(); тоже не работает.
На гласфише есть примеры по JMS Durable Subscriber, там не веб проект а десктоп с одним методом main, в нем работает нормально.
Вобщем если кто-то работал з JMS Durable Subscriber на GlassFish то помогите!
...
Рейтинг: 0 / 0
Не работает JMS Durable Subscriber
    #38394354
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот исходники: http://grepcode.com/file/repo1.maven.org/maven2/org.glassfish.mq/imqutil/4.5.2/com/sun/messaging/jmq/jmsserver/core/Subscription.java
Как видно, NullPointerException вылетает, если не выставлен clientId или durableName.
Надо просто аккуратненько пройтись в дебагере, и посмотреть откуда должны прийти clientId и durableName, и выставить их.
...
Рейтинг: 0 / 0
Не работает JMS Durable Subscriber
    #38394370
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так и есть, смотрите на строчку 1597: http://grepcode.com/file/repo1.maven.org/maven2/org.glassfish.mq/jms/4.5.2/com/sun/messaging/jms/ra/DirectSession.java#1597
Он берет clientId из Connection.
Так что просто проставьте clientId, и проблема уйдет.

Вообще, не бойтесь копаться в исходниках. NullPointerException - это явный баг. А потому вряд ли вам кто-то по нему сразу ответит: "Да у меня такое было, решилось так-то". Нужно просто немного усилий приложить, и вы увидите, что все прекрасно решается самостоятельно.
...
Рейтинг: 0 / 0
Не работает JMS Durable Subscriber
    #38394407
denis111111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cdtyjv,

Спасибо.

Сперва нужно розобратся что такое grepcode.com ))
Качаю исходники пока из http://download.java.net/mq/open-mq/4.5/b29-fcs/openmq4_5-source.zip

Есть такой метод как connection.setClientID("someId");

Но он глючит как и connection.stop();

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
WARNING: MQJMSRA_DC2001: Unsupported:setClientID():inACC=false:connectionId=5138115765956875776
SEVERE: javax.jms.JMSException: MQJMSRA_DC2001: Unsupported:setClientID():inACC=false:connectionId=5138115765956875776
	at com.sun.messaging.jms.ra.DirectConnection._unsupported(DirectConnection.java:988)
	at com.sun.messaging.jms.ra.DirectConnection.setClientID(DirectConnection.java:487)
	at core.ConsumerBean.startConnection(ConsumerBean.java:66)
	at core.ConsumerBean$Proxy$_$$_WeldClientProxy.startConnection(ConsumerBean$Proxy$_$$_WeldClientProxy.java)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at javax.el.BeanELResolver.invokeMethod(BeanELResolver.java:779)
	at javax.el.BeanELResolver.invoke(BeanELResolver.java:528)
	at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:257)
	at com.sun.el.parser.AstValue.invoke(AstValue.java:248)
	at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:302)
	at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:39)
	at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
	at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
	at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:148)
	at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
	at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:769)
	at javax.faces.component.UICommand.broadcast(UICommand.java:300)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
	at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
	at java.lang.Thread.run(Thread.java:722)



Щас посмотрю в исходниках...
Просто странно что очень немного инфи по этой проблеме.
...
Рейтинг: 0 / 0
Не работает JMS Durable Subscriber
    #38394433
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значит clientId надо выставлять как-то иначе. Скорее всего, на уровне конфигурации connection factory.
...
Рейтинг: 0 / 0
Не работает JMS Durable Subscriber
    #38394523
denis111111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cdtyjv,

Да, clientId указан в настройках фабрики. И если в дебагере в методе init() посмотреть на clientId в connect, то он заполнен.
Но когда вызывается метод startConnection(), то clientId равен null.
...
Рейтинг: 0 / 0
Не работает JMS Durable Subscriber
    #38394849
denis111111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ясно почему не работают методы : connection --> setClientID(""), stop(), setExceptionListener

В самом connection есть переменная

Код: java
1.
2.
3.
4.
5.
/**
     *  Flags whether this DirectConnection is in the Application Client
     *  Container or not
     */
    private final boolean inACC;



Вот она и блокирует эти методы.

Но бог с ними...
Я не могу создать createDurableSubscriber, потому, что clientId = null. Его зануляет метод cleanup() из класа com.sun.messaging.jms.ra.ManagedConnection.

Пока не могу понять почему он срабатывает.
Метод который должен его вызывать под дебагером не останавливается.
...
Рейтинг: 0 / 0
Не работает JMS Durable Subscriber
    #38394873
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может у тебя несколько инстансов создается? причем один из них неправильно
...
Рейтинг: 0 / 0
Не работает JMS Durable Subscriber
    #38394960
denis111111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Перенес создание connection, session, DurableSubscriber , в онид метод:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 public void startConnection() {
        try {
            if (connection == null) {
                this.connection = connectionFactory.createConnection();
                this.session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
                this.durableSubscriber = session.createDurableSubscriber(topic, this.subName);
                this.durableSubscriber.setMessageListener(messageBean);
                this.connection.start();
            }
        } catch (JMSException ex) {
            Logger.getLogger(ConsumerBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }



Работает.

Напомню что это jsf и методы я вызиваю из браузера:
Код: html
1.
2.
3.
4.
5.
 <h:form>
            <h:commandButton value="Init" actionListener="#{ConsumerBean.init()}" />
            <h:commandButton value="Connect" actionListener="#{ConsumerBean.startConnection()}" />
            <h:commandButton value="Disconnect" actionListener="#{ConsumerBean.stopConnection()}" />
        </h:form>


И тоб-то если сперва вызывать init(), а потом startConnection() в двух разных http-запросах, то возникает черная магия и connection странным образом портиться.
...
Рейтинг: 0 / 0
Не работает JMS Durable Subscriber
    #38395497
denis111111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Использовал для Durable Subscriber - Message Driven Bean. Все работает:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
@MessageDriven(mappedName = "jms/Topic", activationConfig = {
    @ActivationConfigProperty(propertyName = "addressList", propertyValue = "mq://localhost:7676/jms"),
    @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"),
    @ActivationConfigProperty(propertyName = "subscriptionDurability", propertyValue = "Durable"),
    @ActivationConfigProperty(propertyName = "clientId", propertyValue = "MyID"),
    @ActivationConfigProperty(propertyName = "subscriptionName", propertyValue = "MySub")
})
public class MessageBeanMDB implements MessageListener {

    @Override
    public void onMessage(Message message) {
        try {
            TextMessage textMess = (TextMessage) message;
            System.out.println("Message has recieved: " + textMess.getText());
        } catch (JMSException ex) {
            Logger.getLogger(MessageBeanMDB.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}



Теперь думаю зделаю на Producer(отправляет JMS сообщения ) транзакцию

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
 @PostConstruct
    private void init() {
        try {
            if (connection == null) {
                connection = durableConnectionFactory.createConnection();
            }
            if (session == null) {
                session = connection.createSession(true, Session.SESSION_TRANSACTED);
                producer = session.createProducer(topic);
            }
            System.out.println("---init---");
        } catch (JMSException ex) {
            Logger.getLogger(ProducerBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void commit() {
        try {
            System.out.println(session.getTransacted());
            this.session.commit();
            System.out.println("Commit!");
        } catch (JMSException ex) {
            Logger.getLogger(ProducerBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void sendMessage() {
        try {
            TextMessage mess = session.createTextMessage();
            mess.setText(messageStr);
            producer.send(mess);
            System.out.println("You message is: " + this.messageStr);
        } catch (JMSException ex) {
            Logger.getLogger(ProducerBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }



И что вы думаете? Когда я вызываю метод commit() , то session оказывается без транзакции!
Подобная хрень все время творится на JSF, в апликейшн приложениях все работает...
Скажыте это реально зделать JMS на JSF Glassfish ?
...
Рейтинг: 0 / 0
Не работает JMS Durable Subscriber
    #38396396
denis111111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так
Настроил Topic и ConnectionFactory через утилиту imqadmin.exe, которая примерно находится в C:\glassfish3\mq\bin

Подтянул их в бин через:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
  private Object getLookup(String lookupName) throws NamingException {
        Hashtable env = new Hashtable();
        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");
        env.put(Context.PROVIDER_URL, "file:///C:/glassfish3/mq/tmp");
        Context context = new InitialContext(env);
        Object o = context.lookup(lookupName);
        return o;
    }



И таки смог создать Durable subscriber.


Не знаю почему, но если настроивать Topic и ConnectionFactory через Glassfish, то возникает ошибка, clientId в connection зануляется. Почему это происходит не знаю.
...
Рейтинг: 0 / 0
Не работает JMS Durable Subscriber
    #38397358
denis111111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такой еще вопрос...

Если я JMS брокер находится например 123.123.123.123, а програма клиент, которая должна получать сообщения на 31.31.31.31.
То мне нужно вытятуть административные обьекты з 123.123.123.123, ConnectionFactory, Destination?
Через механизм JNDI?
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Не работает JMS Durable Subscriber
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]