• Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
Exit
0

CF 9.01 Upgrade breaks Flex Gateway - Help!!!!

Community Beginner ,
Sep 01, 2010 Sep 01, 2010

Copy link to clipboard

Copied

I have an AIR app which is using DataServicesMessaging with subtopics enabled.  I can create the Consumer in AIR but when I subscribe, I get the following error:

"Error","cfthread-0","08/31/10","21:03:35",,"CATALOG_ATTRIBUTES_831AE0FE-B7D2-90A5-87AD-CAC5E01116D9: Event handler exception."

flex.messaging.MessageException: Event handler exception.

at coldfusion.flex.CFEventGatewayAdapter.allowSend(CFEventGatewayAdapter.java:376)

at flex.messaging.services.messaging.SubscriptionManager.addSubtopicSubscribers(SubscriptionManager.java:330)

at flex.messaging.services.messaging.SubscriptionManager.addSubtopicSubscribers(SubscriptionManager.java:311)

at flex.messaging.services.messaging.SubscriptionManager.getSubscriberIds(SubscriptionManager.java:264)

at flex.messaging.services.MessageService.pushMessageToClients(MessageService.java:495)

at coldfusion.flex.CFEventGatewayAdapter.send(CFEventGatewayAdapter.java:250)

at coldfusion.eventgateway.flex.FlexMessagingGateway.outgoingMessage(FlexMessagingGateway.java:204)

at coldfusion.runtime.CFPage.SendGatewayMessage(CFPage.java:269)

at cfCatalogService2ecfc315059253$func_CFFUNCCFTHREAD_CFCATALOGSERVICE2ECFC3150592531.runFunction(C:\inetpub\wwwroot\staging9sites\staging9si\com\pmdm\suppliers\services\CatalogService.cfc:110)

at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472)

at coldfusion.runtime.UDFMethod$ArgumentCollectionFilter.invoke(UDFMethod.java:368)

at coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55)

at coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321)

at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:220)

at coldfusion.runtime.UDFMethod.invokeCFThread(UDFMethod.java:201)

at coldfusion.thread.Task.invokeFunction(Task.java:274)

at coldfusion.thread.Task.run(Task.java:140)

at coldfusion.scheduling.ThreadPool.run(ThreadPool.java:201)

at coldfusion.scheduling.WorkerThread.run(WorkerThread.java:71)

TOPICS
Flash integration

Views

4.5K

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Sep 02, 2010 Sep 02, 2010

Copy link to clipboard

Copied

Looking at the stack trace it would appear there is an issue with allowing subtopic subscriptions - perhaps there's some configuration parameters that have changed in CF 9.01?  The error occurs the very moment that I attempt to subscribe to the destination.

Anyone from Adobe can comment?????

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Sep 02, 2010 Sep 02, 2010

Copy link to clipboard

Copied

Here's how the error looks from the AIR app:

[MessageFaultEvent faultCode="Server.Processing" faultDetail=null faultString="Event handler exception." rootCause=null type="fault" bubbles=false cancelable=false eventPhase=2]

Not real helpful.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe Employee ,
Sep 02, 2010 Sep 02, 2010

Copy link to clipboard

Copied

Jeff,

       In CF 9.0.1 allowSend and allowSubscribe event calls is delegated to the user defined allowSend and allowSubscribe methods defined on the gateway cfc. This would allow you to get control to prevent anyone from subscribing or sending to a particular subtopic. These methods can return either a true or false based on whether subscription or sending should be allowed for that user.

The only condition though is that these functions will be invoked in gateway cfc only if the gateway id is specified under the messaging destination in messaging-config.xml instead of the default * present under the destination.

1. While subscribing, consumer.subtopic has to be set to the subtopic string.

2. While sending, DSSubtopic has to be set on the message header.
msg.headers["DSSubtopic"] = "abc";

3. In onincomingmessage, DSSubtopic has to be on the message header by picking it up from the event object.

   <cfset msg.headers["DSSubtopic"] = event.data.headers.DSSubtopic />   

4. allow-subpoic has to set to true in the messaging-config.xml destination.4.

            <server>
    <allow-subtopics>true</allow-subtopics>
   </server>

It looks to me that this error is coming up when allowSend is being invoked on the gateway cfc. Although care is taken that if the method is not defined in the gateway cfc, a default true is returned back. Try adding an allowSend method that takes in an argument of type any that just returns true.

Also can you give me a sample code that is causing this error? Both the code on the client side that subscribes and the entry in messaging-config.xml.

Rakshith

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Sep 03, 2010 Sep 03, 2010

Copy link to clipboard

Copied

Rakshith,

Thanks for your help!  Here's what I've got in my messaging-config.xml:

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

<service id="message-service"

    class="flex.messaging.services.MessageService"

    messageTypes="flex.messaging.messages.AsyncMessage">

    <adapters>

        <adapter-definition id="cfgateway" class="coldfusion.flex.CFEventGatewayAdapter" default="true" />

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

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

    </adapters>

    <!-- ======================================== -->

    <!--  ColdFusion Messaging Gateway            -->

    <!-- ======================================== -->

    <destination id="ColdFusionGateway">

        <adapter ref="cfgateway" />

        <properties>

            <!--

                Star ('*') means gatewayid is found in the 'gatewayid' message header.

                To restrict this destination to a specific gateway, enter its ID here

            -->

            <gatewayid>PMSIMessages</gatewayid>

<server>

<durable>false</durable>

<allow-subtopics>true</allow-subtopics>

</server>

            <!--

                If ColdFusion is running on a different host, enter that here.

                Default is to expect ColdFusion and Flex to share the same web application.

You must enter 'localhost' if CF and Flex are not in the same web app.

            <gatewayhost>10.1.1.1</gatewayhost>

            -->

            <!--

                List the IP addresses of CF machines allowed to send messages to this destination

                If not set, the default is to allow only this computer to connect.

            <allowedIPs>10.1.1.1,10.2.2.2</allowedIPs>

            -->

            <!--

                Credentials to pass along in the headers as CFUsername/CFPassword.

                It is generally better to use setRemoteCredentials() API on client.

            <remote-username></remote-username>

            <remote-password></remote-password>

            -->

            <!--

                You can add general Flex Messaging network and server properties here.

             -->

        </properties>

<!-- You should use the ColdFusion specific channels -->

        <channels>

            <channel ref="cf-polling-amf"/>

        </channels>

    </destination>

    <destination id="clientNotifierGateway">

    <adapter ref="actionscript"/>

    <channels>

    <channel ref="java-amf"/>

    </channels>

     </destination>

</service>

Here's my gateway CFC:

<cfcomponent output="false">

   <cffunction name="onIncomingMessage" access="remote" returntype="any">

         <cfargument name="event" type="struct" required="true"/>

<cfscript>

      x = structNew();

      x['body'] = event.data;

      x['destination'] = "ColdFusionGateway";

      x['headers'] = structNew();

      x.headers['username'] = "System";

      x.headers['DSSubtopic'] = event.data.headers.DSSubtopic;

      x.lowercasekeys = "yes";

      </cfscript>

 

  <cfreturn x/>

</cffunction>

<cffunction name="allowSend" access="public" returntype="boolean">

<cfargument name="subtopic" type="any" required="true"/>

<cfreturn true/>

</cffunction>

<cffunction name="allowSubscribe" access="public" returntype="boolean">

<cfargument name="subtopic" type="any" required="true"/>

<cfreturn true/>

</cffunction>

</cfcomponent>

Jeff

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Sep 03, 2010 Sep 03, 2010

Copy link to clipboard

Copied

Rakshith,

I forgot to include the client side code. Here you go:

messageSubscriber = new Consumer();

messageSubscriber.channelSet = new ChannelSet()

var endPoint:String = appModel.activeMode.serviceURL + '/flex2gateway/cfamfpolling';

var channel:AMFChannel = new AMFChannel("cf-polling-amf",endPoint);

channel.enableSmallMessages = false;

messageSubscriber.channelSet.addChannel(channel);

messageSubscriber.addEventListener(MessageEvent.MESSAGE, onMessageReceived);

messageSubscriber.addEventListener(MessageFaultEvent.FAULT,onMessageError);

messageSubscriber.destination = "ColdFusionGateway";

messageSubscriber.subtopic = UIDUtil.createUID();

messageSubscriber.subscribe();

Jeff

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Sep 03, 2010 Sep 03, 2010

Copy link to clipboard

Copied

Rakshith,

Here's the raw request data from Flash Builder Network Monitor.  I've removed host name for security reasons.

POST /flex2gateway/cfamfpolling HTTP/1.1

Content-Type: application/x-amf

User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en) AppleWebKit/531.9 (KHTML, like Gecko) AdobeAIR/2.0.2

Referer: app:/PMSIFlex4.swf

X-Flash-Version: 10,1,53,64

Accept: */*

Accept-Language: en-us

Accept-Encoding: gzip, deflate

Cookie: CFAUTHORIZATION_PMSMS_20100903_03=amJhdHRlcnNoYWxsQGNvbWNhc3QubmV0DXRyYW50b3I1MQ1QTVNNU18yMDEwMDkwM18wMw==; JSESSIONID=3830564a83cfc4c59efb7e5ac77692645221; CFTOKEN=19927261; CFID=12012; nuuid=3f7376d4-bec5-102d-8926-001e0b5ddf58

Content-Length: 349

Flex Message (flex.messaging.messages.CommandMessage)     operation = subscribe    selector = null    clientId = null    correlationId =     destination = ColdFusionGateway    messageId = 0D653381-10E7-A801-B9F2-D7BBDF71AA8B    timestamp = 0    timeToLive = 0    body = {}    hdr(DSId) = 98CE40E4-0B1E-04DC-3DBB-45AD576213A9    hdr(DSSubtopic) = 175C777A-ACAB-BF69-BCD2-D7BBDF6EC70D    hdr(DSEndpoint) = messageChannel

Jeff

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe Employee ,
Sep 03, 2010 Sep 03, 2010

Copy link to clipboard

Copied

Jeff,

Thanks for the sample code and network monitor data. The info you have provided should help us reproduce the issue here.

I will get back to you once we try this out.

Rakshith

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Sep 07, 2010 Sep 07, 2010

Copy link to clipboard

Copied

Rakshith,

One additional note - we're running CF in multi-server mode and the problem we're having is on an instance created before the upgrade using Instance Manager.  Would there be any value in a clean re-install of CF 9.01 not as a upgrade but as a new install? I'd rather not go to all that trouble, but I'm just asking.

Jeff

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe Employee ,
Sep 07, 2010 Sep 07, 2010

Copy link to clipboard

Copied

Jeff,

My team mate here tried to reproduce the issue. He is somehow not encountering the issue. I will check again with him.

CF 9.0.1 does not a full installer. Upgrading from CF 9.0 is the only option.

Rakshith

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Sep 07, 2010 Sep 07, 2010

Copy link to clipboard

Copied

Rakshith,

So if you download CF as a trial, you'll only be installing CF 9.0 and have to install 9.01 separately?

Could there be value in re-creating the CF instance we're using?  I'm wondering if the upgrade has an issue with instances previously created via Instance Manager.  Just grasping at straws here.

Jeff

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Sep 07, 2010 Sep 07, 2010

Copy link to clipboard

Copied

On another machine, running OS X and CF 9.0.1 Developer Edition, messaging is working fine.  So it would appear that the problem is 'environment specific'.   The production machine in question is running Windows 2008 32-bit with CF Multi-Server.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe Employee ,
Sep 07, 2010 Sep 07, 2010

Copy link to clipboard

Copied

Are you saying that the same code runs fine on the OS X developer edition? If yes, then it would be worth going through the upgrade process again.

I don't think the issue can be environment specific.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Sep 08, 2010 Sep 08, 2010

Copy link to clipboard

Copied

I've resolved the issue.  The gateway CFC was residing in an application root that also referenced Mach-ii and ColdSpring.  Previously, it appears that the Application.cfc wasn't getting invoked when subscribing to the destination - now it is and was throwing a framework exception.  I've moved my gateway CFC to its own application and now it's working as expected.

Thanks for your help.

Jeff

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe Employee ,
Sep 08, 2010 Sep 08, 2010

Copy link to clipboard

Copied

That's good to know.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Beginner ,
Sep 08, 2010 Sep 08, 2010

Copy link to clipboard

Copied

On a related topic, is there more information available on the allowSend and allowSubscribe functions?  A sample CFC perhaps?

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe Employee ,
Sep 09, 2010 Sep 09, 2010

Copy link to clipboard

Copied

The only information we have now is here http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSd160b5fdf5100e8f512047ac12a37f1eafb-8000.html

Perhaps I can come up with a blog entry describing this one in detail.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Feb 08, 2011 Feb 08, 2011

Copy link to clipboard

Copied

Hi,

I''m getting a non-descriptive error

Error Occurred While Processing Request - Google Chrome.jpg

The stack trace says the following

Error Occurred While Processing Request - Google Chrome_2.jpg

I don't know how to fix this. In my CFC I have

     <cffunction name="allowSend" access="public" returntype="boolean">           <cfargument name="subtopic" type="any" required="true"/>                      <cfreturn true/>                 </cffunction>

Hope anyone can help

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Feb 09, 2011 Feb 09, 2011

Copy link to clipboard

Copied

I'm running 8.0.1, but might be helpful to you anyway. Another undocumented change in this patch is that CFC functions called from Flex must have access="remote" set on them; without this patch they did not. I woke up today to a "our (Flex-based) site is down, help!" call and found my exception.log full of

"The method 'foo' in component bar cannot be accessed remotely. "

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Feb 09, 2011 Feb 09, 2011

Copy link to clipboard

Copied

LATEST

Hi

thanks for the reply. My issue however appears when addressing the gateway from Coldfusion. I do not address the gateway from Flex.

Regards,

Joost

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Adobe Employee ,
Sep 07, 2010 Sep 07, 2010

Copy link to clipboard

Copied

Yes, that's right.

You will be installing CF 9.01 and you have to upgrade that to CF 9.0.1 using the CF 9.0.1 updater.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Resources
Documentation