Avatar

Level 1

Hello,

could someone help me with a simple chat application? I've installed lcds with integrated tomcat and i've created a new flex project using lcds template


I have this result

Consumer faultCode: Server.Processing
Consumer faultDetail: null

Consumer faultstring: No destination with id 'chat' is registered with any service.

My web.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
    <display-name>LiveCycle Data Services</display-name>
    <description>LiveCycle Data Services Application</description>

    <!-- MessageBroker Servlet -->
    <servlet>
        <servlet-name>MessageBrokerServlet</servlet-name>
        <display-name>MessageBrokerServlet</display-name>
        <servlet-class>flex.messaging.MessageBrokerServlet</servlet-class>
        <init-param>
            <param-name>services.configuration.file</param-name>
            <param-value>/WEB-INF/flex/services-config.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>MessageBrokerServlet</servlet-name>
        <url-pattern>/messagebroker/*</url-pattern>
    </servlet-mapping>

</web-app>

My services-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<services-config>

    <services>
        <service-include file-path="messaging-config.xml" />
               
        <!--
        Application level default channels. Application level default channels are
        necessary when a dynamic destination is being used by a service component
        and no ChannelSet has been defined for the service component. In that case,
        application level default channels will be used to contact the destination.
        -->  
        <default-channels>
           <channel ref="my-amf"/>
        </default-channels>

    </services>
    <channels>
        <!-- Servlet Based endpoints -->
        <channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
            <endpoint url="http://localhost:8400/lcds/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"/>
            <properties>
                <polling-enabled>false</polling-enabled>
            </properties>
        </channel-definition>
    </channels>
</services-config>


My messaging-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<service id="message-service"
    class="flex.messaging.services.MessageService">

    <default-channels>
        <channel ref="my-amf"/>
    </default-channels>

    <adapters>
        <adapter-definition id="actionscript" class="flex.messaging.services.messaging.adapters.ActionScriptAdapter" default="true" />
        <adapter-definition id="jms" class="flex.messaging.services.messaging.adapters.JMSAdapter"/>
    </adapters>

   <destination id="chat">
      <properties>
          <adapter ref="actionscript"/>
  
          <network>
              <subscription-timeout-minutes>0</subscription-timeout-minutes>
          </network>
          <server>
            <message-time-to-live>0</message-time-to-live>
              <allow-subtopics>true</allow-subtopics>
              <subtopic-separator>.</subtopic-separator>
          </server>
      </properties>
   </destination>

</service>

My .mxml

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
               xmlns:s="library://ns.adobe.com/flex/spark"
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
               creationComplete="consumer.subscribe()">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
        <mx:Producer id="producer" destination="chat" fault="producer_faultHandler(event)"/>
        <mx:Consumer id="consumer" destination="chat" message="messageHandler(event.message)" fault="consumer_faultHandler(event)"/>
    </fx:Declarations>
   
    <fx:Script>
        <![CDATA[
            import mx.messaging.events.MessageFaultEvent;
            import mx.messaging.messages.AsyncMessage;
            import mx.messaging.messages.IMessage;
           
            private function send():void
            {
            var message:IMessage = new AsyncMessage();
            message.body.chatMessage = msg.text;
            producer.send(message);
            msg.text = "";
            }
           
            private function messageHandler(message:IMessage):void
            {
            log.text += message.body.chatMessage + "\n";   
            }
       
            protected function producer_faultHandler(event:MessageFaultEvent):void
            {
                // TODO Auto-generated method stub
                log.text += "\n Producer faultCode: " + event.faultCode;
                log.text += "\n Producer faultDetail: " + event.faultDetail;
                log.text += "\n Producer faultstring: " + event.faultString;
            }
           
            protected function consumer_faultHandler(event:MessageFaultEvent):void
            {
                // TODO Auto-generated method stub
                log.text += "\n Consumer faultCode: " + event.faultCode;
                log.text += "\n Consumer faultDetail: " + event.faultDetail;
                log.text += "\n Consumer faultstring: " + event.faultString;
            }
           
        ]]>
    </fx:Script>
    <mx:Panel title="Chat" width="100%" height="100%">
        <mx:TextArea id="log" width="100%" height="100%"/>
        <mx:ControlBar>
            <mx:TextInput id="msg" width="100%" enter="send()"/>
            <mx:Button label="Send" click="send()"/>
        </mx:ControlBar>
    </mx:Panel>
   
</s:Application>

Can someone tell me where is the problem. What i'm doing wrong?