ActiveMQ AJax Client - PullRequest
       19

ActiveMQ AJax Client

2 голосов
/ 27 апреля 2010

Я пытаюсь написать простой клиент Ajax для отправки и получения сообщений.Он успешно развернут, но я никогда не получал сообщения от клиента.Я бью себя, чтобы придумать, чего мне не хватает, но все равно не могу заставить это работать.

Вот мой код:

  1. Я создал динамическое веб-приложение с именем ActiveMQAjaxService и поместил activemq-web.jar и все необходимые зависимости в папку WEB-INF / lib.Таким образом, AjaxServlet и MessageServlet будут развернуты
  2. Я запускаю сервер activemq в командной строке: ./activemq => activemq успешно создан и отображает:

Прослушивание соединенийпо адресу: tcp: // lilyubuntu: 61616ИНФО |Разъем openwire началсяИНФО |ActiveMQ JMS Message Broker (локальный хост, ID: lilyubuntu-56855-1272317001405-0: 0) запущенИНФО |Вход в org.slf4j.impl.JCLLoggerAdapter (org.mortbay.log) через org.mortbay.log.Slf4jLogИНФО |Причал-6.1.9ИНФО |ActiveMQ WebConsole инициализирован.ИНФО |Инициализация Spring FrameworkServlet «диспетчер»ИНФО |Консоль ActiveMQ на http://0.0.0.0:8161/admin
ИНФОРМАЦИЯ |Инициализация весеннего корня WebApplicationContextИНФО |Соединитель vm: // localhost запущенИНФО |Camel Console at http://0.0.0.0:8161/camel
ИНФОРМАЦИЯ |Веб-демонстрации ActiveMQ на http://0.0.0.0:8161/demo
ИНФОРМАЦИЯ |Приложение для доступа к файлам RESTful на http://0.0.0.0:8161/fileserver
INFO |Запущено SelectChannelConnector@0.0.0.0: 8161

3) index.xml, который является HTML-кодом для тестирования клиента:

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<script type="text/javascript" src="amq/amq.js"></script> 
<script type="text/javascript">amq.uri='amq';</script> 
<title>Hello Ajax ActiveMQ</title> 
</head> 
<body> 
<p>Hello World!</p> 
<script type="text/javascript"> 
amq.sendMessage("topic://myDetector", "message"); 
var myHandler = 
{   
  rcvMessage: function(message) 
  { 
     alert("received "+message); 
  } 
}; 

function myPoll(first) 
{ 
        if (first) 
        { 
                amq.addListener('myDetector', 'topic://myDetector', myHandler.rcvMessage); 
        } 
} 

amq.addPollHandler (myPoll);

4) Web.xml:

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an "AS IS" BASIS, 
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
See the License for the specific language governing permissions and 
limitations under the License. 

->

<display-name>ActiveMQ Web Demos</display-name> 
<description> 
Apache ActiveMQ Web Demos 
</description> 

<!-- context config --> 
<context-param> 
    <param-name>org.apache.activemq.brokerURL</param-name> 
    <param-value>vm://localhost</param-value> (I also tried tcp://localhost:61616) 
    <description>The URL of the Message Broker to connect to</description> 
</context-param> 

<context-param> 
    <param-name>org.apache.activemq.embeddedBroker</param-name> 
    <param-value>true</param-value> 
    <description>Whether we should include an embedded broker or not</description> 
</context-param> 

<!-- servlet mappings --> 

<!-- the subscription REST servlet --> 
<servlet> 
    <servlet-name>AjaxServlet</servlet-name> 
    <servlet-class>org.apache.activemq.web.AjaxServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet> 
    <servlet-name>MessageServlet</servlet-name> 
    <servlet-class>org.apache.activemq.web.MessageServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    <!-- 
    Uncomment this parameter if you plan to use multiple consumers over REST 
    <init-param> 
            <param-name>destinationOptions</param-name> 
            <param-value>consumer.prefetchSize=1</param-value> 
    </init-param> 
    --> 

</servlet> 

<!-- the queue browse servlet --> 
<filter> 
  <filter-name>session</filter-name> 
  <filter-class>org.apache.activemq.web.SessionFilter</filter-class> 
</filter> 

<filter-mapping> 
  <filter-name>session</filter-name> 
  <url-pattern>/*</url-pattern> 
</filter-mapping> 

После всего этого я развертываю веб-приложение, и оноуспешно развернут, но когда я пробую его в http://localhost:8080/ActiveMQAjaxService/index.html, ничего не происходит.

Я могу успешно запустить демо-портфолиоPublisher по номеру http://localhost:8161/demo/portfolio/portfolio.html, и постоянно видеть обновленные цифры.Но для моего простого веб-приложения ничего не работает.

Любое предложение / подсказка приветствуется.Большое спасибо

Лили

Ответы [ 2 ]

1 голос
/ 28 апреля 2010

Попробуйте зайти в управление веб-консоль ; веб-страницы, и посмотреть, если вы можете отправить сообщение своему брокеру из этого контекста, что может привести к решению проблемы.

0 голосов
/ 17 апреля 2013

Я настроил web.xml в веб-приложении следующим образом, и оно работает.

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <display-name>msg_tomcat_activemq</display-name>
    <context-param>
        <param-name>org.apache.activemq.brokerURL</param-name>
        <param-value>tcp://192.168.1.105:61616</param-value>
    </context-param>

    <context-param>
        <param-name>org.apache.activemq.embeddedBroker</param-name>
        <param-value>true</param-value>
    </context-param>

    <servlet>
        <servlet-name>AjaxServlet</servlet-name>
        <servlet-class>org.apache.activemq.web.AjaxServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet>
        <servlet-name>MessageServlet</servlet-name>
        <servlet-class>org.apache.activemq.web.MessageServlet</servlet-class>
        <load-on-startup>1</load-on-startup>

     </servlet>

        <servlet-mapping>
        <servlet-name>AjaxServlet</servlet-name>
        <url-pattern>/amq/*</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>MessageServlet</servlet-name>
        <url-pattern>/message/*</url-pattern>
    </servlet-mapping>

<filter>
      <filter-name>session</filter-name>
      <filter-class>org.eclipse.jetty.continuation.ContinuationFilter</filter-class>
    </filter>
    <filter-mapping>
      <filter-name>session</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>

    <listener>
        <listener-class>org.apache.activemq.web.SessionListener</listener-class>
    </listener>
</web-app>
...