Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Не работает JMS Durable Subscriber / 12 сообщений из 12, страница 1 из 1
12.09.2013, 09:47:15
    #38394296
denis111111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает JMS Durable Subscriber
Стараюсь зделать 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
12.09.2013, 10:35:50
    #38394354
cdtyjv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает JMS Durable Subscriber
Вот исходники: 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
12.09.2013, 10:44:53
    #38394370
cdtyjv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает JMS Durable Subscriber
Так и есть, смотрите на строчку 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
12.09.2013, 11:03:54
    #38394407
denis111111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает JMS Durable Subscriber
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
12.09.2013, 11:17:54
    #38394433
cdtyjv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает JMS Durable Subscriber
Значит clientId надо выставлять как-то иначе. Скорее всего, на уровне конфигурации connection factory.
...
Рейтинг: 0 / 0
12.09.2013, 12:05:50
    #38394523
denis111111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает JMS Durable Subscriber
cdtyjv,

Да, clientId указан в настройках фабрики. И если в дебагере в методе init() посмотреть на clientId в connect, то он заполнен.
Но когда вызывается метод startConnection(), то clientId равен null.
...
Рейтинг: 0 / 0
12.09.2013, 15:04:59
    #38394849
denis111111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает JMS Durable Subscriber
Ясно почему не работают методы : 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
12.09.2013, 15:20:09
    #38394873
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает JMS Durable Subscriber
может у тебя несколько инстансов создается? причем один из них неправильно
...
Рейтинг: 0 / 0
12.09.2013, 16:15:01
    #38394960
denis111111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает JMS Durable Subscriber
Перенес создание 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
13.09.2013, 09:44:56
    #38395497
denis111111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает JMS Durable Subscriber
Использовал для 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
13.09.2013, 17:58:07
    #38396396
denis111111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает JMS Durable Subscriber
Так
Настроил 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
16.09.2013, 10:03:36
    #38397358
denis111111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает JMS Durable Subscriber
Такой еще вопрос...

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


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