For the stand-alone basic .mxml I used a copy of the basic example
Renaud gave - with a different URL for the gateway which is located on
a separate server. For the cairngorm / FDS version, here are the
changes I made to the default FDS .xml files

1) In services-config.xml, add the service to the <services> section
beneath the 4 service include path links add the service:
<services>
        <service-include file-path="remoting-config.xml" />
        <service-include file-path="proxy-config.xml" />
        <service-include file-path="messaging-config.xml" />
        <service-include file-path="data-management-config.xml" />
        
        <service id="amfphp-service"
                 class="flex.messaging.services.RemotingService"     
           messageTypes="flex.messaging.messages.RemotingMessage">
            <destination id="AMFPHPDestination">
                <channels>
                    <channel ref="my-amfphp"/>
                </channels>
                <properties>
                    <source>*</source>
                </properties>
            </destination>
        </service>
    </services>


2) In services-config.xml, Add to the <channels> section add the
following channel:
<channel-definition id="my-amfphp"
class="mx.messaging.channels.AMFChannel">
            <endpoint
uri="http://externalURLaddress/amfphp/gateway.php";
class="flex.messaging.endpoints.AMFEndpoint"/>
        </channel-definition>

3) Here's the services.mxml remote object:
<cairngorm:ServiceLocator 
        xmlns:cairngorm="com.adobe.cairngorm.business.*"
        xmlns:mx="http://www.adobe.com/2006/mxml";>

        <mx:RemoteObject 
            id="roAMFPHPService"
            destination="AMFPHPDestination"
            source="AccountService"
            showBusyCursor="true">
       <mx:method name="checkLogin" />
    </mx:RemoteObject>
</cairngorm:ServiceLocator>

4) And the relevant parts of the login delegate which calls:
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.rpc.remoting.RemoteObject;
   
public class LoginDelegate
{
        protected var service:RemoteObject;
        protected var responder:Responder;
        
        public function LoginDelegate(p_responder:Responder)
                {
        trace("LoginDelegate::constructor");
                
                responder = p_responder;
service = ServiceLocator.getInstance().getService("AMFPHPDestination")
as RemoteObject;
                }
               
public function CheckLogin():void {
trace("LoginDelegate::CheckLogin function - " + p_AttemptedUser.UserID);
service.addEventListener(ResultEvent.RESULT, CheckLogin_onResult);
service.addEventListener(FaultEvent.FAULT, CheckLogin_onFault);
service.checkLogin("UsernameTest", "PasswordTest");
                }
 
 protected function CheckLogin_onResult(event:ResultEvent):void
{
        trace("LoginDelegate::CheckLogin_onResult - Output");
        trace(event.result);
        responder.onResult(new ResultEvent(ResultEvent.RESULT, false, true,
event.result));
        service.removeEventListener(ResultEvent.RESULT, CheckLogin_onResult);
        service.removeEventListener(FaultEvent.FAULT, CheckLogin_onFault);
}

And I receive the error "Destination 'AMFPHPDestination' must specify
at least one adapter." The php service isn't anything special, just
give username / pass, validate in query to the mySQL DB and return a
specific data element if valid. I know from ServiceCapture and the
other version that I don't have an issue on that side.

Much thanks!
Jamie

--- In flexcoders@yahoogroups.com, "Patrick Mineault"
<[EMAIL PROTECTED]> wrote:
>
> Could you post the services_config.xml file you have?
> 
> Patrick
> 
> 2006/12/18, Jamie O <[EMAIL PROTECTED]>:
> >
> >   Hello,
> >
> > I am able to do a stand-alone .mxml project using the samples you have
> > provided and connect well to my php methods / backend database. The
> > issue I have is when trying to deploy this as part of a Flex Data
> > Services / Cairngorm app I can't get the remote object to allow
> > compile or usage without error.
> >
> > Anyone have a cairngorm / FDS scope example for using AMFPHP 1.9?
> >
> > If I do the closest equivelent of adding the relevant contents of your
> > services-config.mxml to the already created one for FDS I get a
> > "Destination 'AMFPHPDestination' must specify at least one adapter"
> > error message when starting the server (Tomcat 5.5)
> >
> > If I do a purely-client side entry of the endpoint in the
> > services.mxml instantiation I get other errors - and this is also not
> > a way I want to go as the endpoint URL would be exposed.
> >
> > Renaud's examples don't seem to include cairngorm-ified versions as
> > was the case in the past and I haven't managed to crack this nut.
> >
> > Thx,
> > Jamie
> >
> > --- In flexcoders@yahoogroups.com <flexcoders%40yahoogroups.com>,
Patrick
> > Mineault
> > <patrick.mineault@> wrote:
> > >
> > > Hi all,
> > >
> > > I've finally gotten around to add AMF3 support to amfphp, so you can
> > > finally use Flex 2's RemoteObject with it. To test the new features,
> > > I've created a new Service Browser in Flex 2 which allows you to
> > > introspect services and test methods on the fly. I need people
to test
> > > out the new AMF3 support.
> > >
> > > New/changed features:
> > >
> > > - $this->methodTable is DEAD. All methods in /services are now
> > > considered remotely accessible, unless you set them to protected or
> > > private (PHP5) or start the method name with an (_), in which
case it
> > > will throw an error. If you want to get a description of a
method and
> > > it's arguments without looking at the class itself, add JavaDoc
to the
> > > method and you should see it in the new Service Browser.
> > > - _authenticate is dead, as a side-effect of the removal of the
> > > methodTable. You can secure methods by creating a special function
> > > called "beforeFilter($methodName)" in your class and return false to
> > > stop a method from being executed. (the _ and the beforeFilter
are the
> > > conventions used by CakePHP, so I figured I'd use those instead of
> > > rolling my own).
> > > - Circular references in AMF0 and AMF3 should now work. Class
mapping
> > > code has been ported to the AMF3 code also. To use remote class
> > mapping,
> > > use registerClassAlias or the [RemoteClass] metadata tag, then
read the
> > > instructions in advancedsettings.php
> > > - Returning a mysql_query will now return either an Array or an
> > > ArrayCollection depending on the setting in gateway.php. Other
database
> > > types are currently unsupported in AMF3 mode (they will be
supported as
> > > soon as I am sure the AMF3 code is perfect).
> > > - You can send ByteArray, ArrayCollection and ObjectProxy
instances as
> > > arguments to remote methods. You will receive the result as a
> > string, as
> > > the inner array and as the inner object, respectively. Currently
there
> > > is no way to send back these types to Flash, but there will be
in the
> > > next version.
> > > - /browser now brings up the brand spanking new Flex 2-based service
> > > browser. You can test methods directly through it. If the method
> > returns
> > > an array or arraycollection, the browser will attempt to show it
in a
> > > datagrid (sweet). Please feel free to modify servicebrowser.mxml
(it's
> > > very spaghetti-code-ish, but it works). You will need the Adobe
corelib
> > > to compile (google for the link)
> > >
> > > Limitations/things to keep in mind:
> > >
> > > - MySql works but not other databases
> > > - You can use a JSON string for arguments in the service browser.
> > > However you must wrap object keys in quotes (a limitation of Adobe
> > corelib).
> > > - Paged recordsets don't work anymore
> > > - Only tested in PHP5. PHP4 might show issues with circular
references.
> > > - Calling two methods on a remoteObject one after the other
(during the
> > > same frame) might not work.
> > > - Charles and ServiceCapture have some issues with AMF3
handling. You
> > > might see strings which seem out of place in your output while
it works
> > > fine in Flash. I will notify the people involved. You might want
to set
> > > PRODUCTION_SERVER to true in gateway.php if this is a recurrent
> > problem,
> > > in the meantime.
> > > - If you need to send to Flash a class and want it to be mapped to a
> > > class in a package, you need to add a key to the class called
> > > _explicitType with a value of "com.mypackage.TheClass" and use
> > > registerClassAlias or [RemoteClass] as usual ( a limitation of
php not
> > > supporting packages)
> > >
> > > All that being said, I need testers. Please download it here:
> > >
> > > http://5etdemi.com/uploads/amfphp-1.9.alpha.zip
> > >
> > > (although it states it is amfphp 1.9, there will be no amfphp 1.9.
> > > amfphp 2.0 will be amfphp 1.9 + JSON and possibly XML-RPC)
> > >
> > > If you run into any issues, please either:
> > >
> > > - Create a minimal test case which shows the reproducible bug, then
> > send
> > > it to me.
> > > - In gateway.php, uncomment $gateway->logIncomingMessages and
> > > logOutgoingMessages, create an in and an out folder and run it
again.
> > > Then send the log files (*.amf) to me.
> > >
> > > Please send the feedback to pm AT 5etdemi DOT com. I am confident it
> > > should be pretty stable, as most of the new code is lifted from
> > > Fluorine, but you never know. Once I am 100% sure the amf 3 code is
> > > bulletproof I will release another version with some publicity
on the
> > > blog and the homepage (currently keeping the new code low-profile).
> > >
> > > Thanks,
> > >
> > > Patrick
> > >
> >
> >  
> >
>


Reply via email to