|
|
|
Вопрос по JMS
|
|||
|---|---|---|---|
|
#18+
Господа Не могу врубиться в суть JMS На сервере запускается какой-нить сервлет, который инициирует чтото типа Queue и ConnectionFactory и дальше MessageProducer producer = jmsSession.createProducer(queue); Message message = jmsSession.createTextMessage(text); producer.send(message); Тут же на сервере крутиться bean implements MessageDrivenBean, MessageListener, в котором переопределены такие методы ejbCreate() , setMessageDrivenContext(MessageDrivenContext cxt) и onMessage(Message msg) - последний реагирует на получение сообщений. Так в чем весь прикол я чтото не пойму -я что, могу этот bean установить на удаленного клиента(но он не инстаируеться вне сервера)? или они вместе должны крутиться на одном сервере, а клиент както к очереди подключаться? Кстати, было бы неплохо такой раздел FAQ сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2005, 10:00 |
|
||
|
Вопрос по JMS
|
|||
|---|---|---|---|
|
#18+
Так в чем весь прикол я чтото не пойму -я что, могу этот bean установить на удаленного клиента(но он не инстаируеться вне сервера)? или они вместе должны крутиться на одном сервере, а клиент както к очереди подключаться? Сейчас делаю такую фишку, есть JBoss на нем много всяких EJB в том числе и Message DrivenBeans, есть клиент. который является обычным апликейшеном и установлен на др. машине, если клиенту нужно обратится к MDrivenBean'у то используется RMI-IIOP и JNDI, а вот если бину нужно обратиться к клиенту, то уже проблемы, можно конечно через тот же RMI, но это очень геморойно. Самый простой вариант в этом случае, создать очердь в JBoss, подклюить к ней MDBean (не проблема), а мой апликейшен подключается примерно так: Код: plaintext 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. и через эту очередь они оч. хорошо общаются :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2005, 10:40 |
|
||
|
Вопрос по JMS
|
|||
|---|---|---|---|
|
#18+
osonГоспода Не могу врубиться в суть JMS На сервере запускается какой-нить сервлет, который инициирует чтото типа Queue и ConnectionFactory и дальше MessageProducer producer = jmsSession.createProducer(queue); Message message = jmsSession.createTextMessage(text); producer.send(message); Тут же на сервере крутиться bean implements MessageDrivenBean, MessageListener, в котором переопределены такие методы ejbCreate() , setMessageDrivenContext(MessageDrivenContext cxt) и onMessage(Message msg) - последний реагирует на получение сообщений. Так в чем весь прикол я чтото не пойму -я что, могу этот bean установить на удаленного клиента(но он не инстаируеться вне сервера)? или они вместе должны крутиться на одном сервере, а клиент както к очереди подключаться? Кстати, было бы неплохо такой раздел FAQ сделать. Не обязаны они быть на одном сервере. А настройка подключения зависит от того на чём это всё "крутится". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2005, 10:40 |
|
||
|
Вопрос по JMS
|
|||
|---|---|---|---|
|
#18+
Спасибо wessen. То есть клиент на другой машиен использует JNDIName="java:/ConnectionFactory" чтоб создать QueueConnectionFactory -> QueueConnection -> QueueSession, а JNDIName="java:/queue/Adapter2ConnectorDirectQueue" чтоб создать MessageReceiver. Метод onMessage запускается при появлении в очереди события. Вопрос - а где простой аппликейшн должен искать эти JNDI? Какой-нить xml документ ему нужен или что? Он де xml документов, что на сервере не видит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2005, 11:13 |
|
||
|
Вопрос по JMS
|
|||
|---|---|---|---|
|
#18+
osonСпасибо wessen. То есть клиент на другой машиен использует JNDIName="java:/ConnectionFactory" чтоб создать QueueConnectionFactory -> QueueConnection -> QueueSession, а JNDIName="java:/queue/Adapter2ConnectorDirectQueue" чтоб создать MessageReceiver. Метод onMessage запускается при появлении в очереди события. Вопрос - а где простой аппликейшн должен искать эти JNDI? Какой-нить xml документ ему нужен или что? Он де xml документов, что на сервере не видит? Как правильно подметил господин mozheyko_d, все зависит от того, на чем крутятся EJB, что косается конкретно JBoss, могу разъяснить. Во первых на клинте должны лежать домашний и внешний интерфейсы EJB компонента который ты юзаешь, так же нужен файл jndi.properties , для JBoss должен быть таким : Код: plaintext 1. 2. 3. 4. Класс InitialContext берет данные и этого файла, соответственно клиенту в класспас нужно указать библиотеку спецефичную для JBoss, ну типа jbossall-client.jar . Туда входят стандартные интерфейсы и классы javax.ejb.* EJB , Классы сервисов Java Authentication и Authorization Service, JBossSX классы расширенной безопасности, Прокси и стаб классы для JBoss EJB, клиентские классы провайдера JBoss JNDI. Вот вроде и все,..... кстати EJB с которыми обшаешся через JMS не обязятельно должня быть MessageDriven. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2005, 11:32 |
|
||
|
Вопрос по JMS
|
|||
|---|---|---|---|
|
#18+
osonСпасибо wessen. То есть клиент на другой машиен использует JNDIName="java:/ConnectionFactory" чтоб создать QueueConnectionFactory -> QueueConnection -> QueueSession, а JNDIName="java:/queue/Adapter2ConnectorDirectQueue" чтоб создать MessageReceiver. Метод onMessage запускается при появлении в очереди события. Вопрос - а где простой аппликейшн должен искать эти JNDI? Какой-нить xml документ ему нужен или что? Он де xml документов, что на сервере не видит? Для Jboss можно прямо в коде сервлета написать: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2005, 11:59 |
|
||
|
Вопрос по JMS
|
|||
|---|---|---|---|
|
#18+
mozheyko_d Для Jboss можно прямо в коде сервлета написать: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. - тот сервлет типа на сервере лежит и клиент (например апп) вызывает его - так что ли? Апп сервер - resin ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2005, 12:05 |
|
||
|
Вопрос по JMS
|
|||
|---|---|---|---|
|
#18+
oson mozheyko_d Для Jboss можно прямо в коде сервлета написать: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. - тот сервлет типа на сервере лежит и клиент (например апп) вызывает его - так что ли? Апп сервер - resin Вопрос был можно ли вынести MDB на другой сервер и как к нему тогда прицепиться из сервлета? Ответ: можно, в сервлете напиши этот код для отсылки сообщений, а на другом сервере установи свой MDB обработчик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2005, 12:08 |
|
||
|
Вопрос по JMS
|
|||
|---|---|---|---|
|
#18+
Хотя в случае с resin, код придётся всё-таки изменить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2005, 12:11 |
|
||
|
Вопрос по JMS
|
|||
|---|---|---|---|
|
#18+
Все ясно - только как указать JNDI для клиента типа JFrame на удаленной машине при работе с resin? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2005, 16:58 |
|
||
|
Вопрос по JMS
|
|||
|---|---|---|---|
|
#18+
osonВсе ясно - только как указать JNDI для клиента типа JFrame на удаленной машине при работе с resin? Не понял чего нада? oson Апп сервер - resin А Resin это сервер приложений разве, я все время думал, что это сервлет контейнер.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2005, 17:13 |
|
||
|
Вопрос по JMS
|
|||
|---|---|---|---|
|
#18+
Хотя да, все таки Resin сервер приложение - http://www.caucho.com (Гугл рулит) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2005, 17:22 |
|
||
|
Вопрос по JMS
|
|||
|---|---|---|---|
|
#18+
osonВсе ясно - только как указать JNDI для клиента типа JFrame на удаленной машине при работе с resin? А что такого страшного в моём примере? Какая строчка не сработает на "клиенте типа JFrame" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2005, 18:37 |
|
||
|
Вопрос по JMS
|
|||
|---|---|---|---|
|
#18+
Я имел ввиду как записать для JFrame клиента resin properties ### JBossNS properties java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory java.naming.provider.url=jnp://some-host:1099 java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces А вот за сервлет если можешь (сорри за непонятливость) обьясни структуру - я чёйто не доганяю. Ну вот крутиться сервлет с твоим кодом. Там он создает Hashtable jndiParameters.... На другой машине нет сервера - просто запускаем class JFrame. которому надо QueueConnectionFactory factory=(QueueConnectionFactory) jndiLookup(initContext, queueConnFactoyJNDIName); Queue queue=(Queue)Utilities.jndiLookup(initContext, queueJNDIName); Как он его получает от сервлета - я не понял? И в каком формате? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2005, 11:57 |
|
||
|
Вопрос по JMS
|
|||
|---|---|---|---|
|
#18+
slolenЯ имел ввиду как записать для JFrame клиента resin properties ### JBossNS properties java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory java.naming.provider.url=jnp://some-host:1099 java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces Это параметры для JBoss, для resin они другие - какие незнаю надо читать доки по нему. slolen А вот за сервлет если можешь (сорри за непонятливость) обьясни структуру - я чёйто не доганяю. Ну вот крутиться сервлет с твоим кодом. Там он создает Hashtable jndiParameters.... На другой машине нет сервера - просто запускаем class JFrame. которому надо QueueConnectionFactory factory=(QueueConnectionFactory) jndiLookup(initContext, queueConnFactoyJNDIName); Queue queue=(Queue)Utilities.jndiLookup(initContext, queueJNDIName); Как он его получает от сервлета - я не понял? И в каком формате? Это код для подключения к очереди сообщений и отсылки их в неё (понятно сказал? ;-)) и если в параметре Context.PROVIDER_URL указать правильный сервер с работающим например JBoss, то этот код отлично работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2005, 12:10 |
|
||
|
Вопрос по JMS
|
|||
|---|---|---|---|
|
#18+
mozheyko_d ... String myRemoteMDBServer = "1.1.1.1"; // здесь ip или имя сервака Hashtable jndiParameters = new Hashtable(); jndiParameters.put( Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); jndiParameters.put( Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces"); jndiParameters.put( Context.PROVIDER_URL, myRemoteMDBServer + ":1099"); InitialContext jndiContext = new InitialContext( jndiParameters); QueueConnectionFactory factory = ( QueueConnectionFactory)jndiContext.lookup( "ConnectionFactory"); Queue queue = ( Queue) jndiContext.lookup( "queue/testQueue"); QueueConnection connection = factory.createQueueConnection(); QueueSession session = connection.createQueueSession( false, QueueSession.AUTO_ACKNOWLEDGE); ... [/src] - это код на клиенте то есть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2005, 12:21 |
|
||
|
Вопрос по JMS
|
|||
|---|---|---|---|
|
#18+
slolen mozheyko_d ... String myRemoteMDBServer = "1.1.1.1"; // здесь ip или имя сервака Hashtable jndiParameters = new Hashtable(); jndiParameters.put( Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); jndiParameters.put( Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces"); jndiParameters.put( Context.PROVIDER_URL, myRemoteMDBServer + ":1099"); InitialContext jndiContext = new InitialContext( jndiParameters); QueueConnectionFactory factory = ( QueueConnectionFactory)jndiContext.lookup( "ConnectionFactory"); Queue queue = ( Queue) jndiContext.lookup( "queue/testQueue"); QueueConnection connection = factory.createQueueConnection(); QueueSession session = connection.createQueueSession( false, QueueSession.AUTO_ACKNOWLEDGE); ... [/src] - это код на клиенте то есть угу И не важно сервлет он, просто Java приложение или ещё кто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2005, 12:25 |
|
||
|
Вопрос по JMS
|
|||
|---|---|---|---|
|
#18+
package p2p; import javax.jms.Queue; import javax.jms.QueueConnection; import javax.jms.QueueConnectionFactory; import javax.jms.QueueSender; import javax.jms.QueueSession; import javax.jms.Session; import javax.jms.TextMessage; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NameNotFoundException; import javax.naming.NoInitialContextException; public class SimpleSender { public static void main(String[] args) { try { Context ctx = new InitialContext(); QueueConnectionFactory qcf = null; try { qcf = (QueueConnectionFactory)ctx.lookup("java:comp/env/jms/QueueConnectionFactory"); } catch (NoInitialContextException nice) { nice.printStackTrace(); } QueueConnection con = qcf.createQueueConnection(); QueueSession session = con.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); Queue queue = null; try { queue = (Queue)ctx.lookup("jms/MyQueue"); } catch(NameNotFoundException nnfe){ queue = session.createQueue("MyQueue"); ctx.bind("jms/MyQueue",queue); } TextMessage textMessage = session.createTextMessage(); QueueSender sender = session.createSender(queue); con.start(); long sendInterval; try { sendInterval = Long.parseLong(args[0]); } catch(Exception rae){ sendInterval = 1000; } for(int i=0;i<1000;i++) { textMessage.setText("Hi! It's my message number "+i); sender.send(textMessage); try { Thread.sleep(sendInterval); }catch(Exception se){ System.out.println("Got an exception "+se.getMessage()); } } } catch(Exception e) { e.printStackTrace(); } } } Написал я этот сендер а запустить его не могу как и где мне этот jms/QueueConnectionFactory прописать. Где тут JBoss спользовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2006, 17:59 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=32888880&tid=2150453]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
191ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
| others: | 235ms |
| total: | 528ms |

| 0 / 0 |
