Swiz Flex 4 Remote Object and AMF
Hi flex gurus,
Somebody please help me walk through this. Just today I decided to convert my existing flex code to Swiz framework. I have just this one question for the moment, what is the correct way of calling remote object down to Swiz? Please show me some example how to do it. I was thinking to use delegate class after I figure out this one.
Many thanks in advance.
The following page describes the scope attribute (and examples of where it should be used) for a destination:
http://help.adobe.com/en_US/LiveCycleDataServicesES/3.1/Developing/WS3a1a89e415cd1e5d-d524 5eb1221394e36f-8000Update.html
Starting BlazeDS 4.0 release, there is a single developer guide for BlazeDS and LCDS. Content that only applies to LCDS is indicated in the guide. Developer Guide: Using LiveCycle Data Services 3.1
Rohit
Similar Messages
-
Amfphp - flex remote object error event handler
I'm using amfphp and I want it to return an error that the flex remote object error event handler will pick up. At the moment I can get only the result handler to do anything in flex.
Hi,
Try throwing an exception in the remote method. For example,
function inverse($x) {
if (!$x) {
throw new Exception('Division by zero.');
else return 1/$x; -
Iphone apps using flex remote objects with CF???
I am used to making web applications that use flex remote objects to interact with CF.
Is it possible to use remoting from an iphone app cross compiled using flash builder to interact with Cf remoting on a remote server?Interseting, config files always seem to me like a strange way to do things.
I'm not exactly sure what you mean by this, but by default, that's how remoting works in Flex - you have channels and destinations defined on your server, and your compiler points to your config files and reads those values. So it's a little extra work to define them in AS instead.
Can you give me any tips on authenticating requests to cfc's from mobiles and how to protect my servers once I exposes cfc's to apps not hosted on the same server as CF?
There isn't really anything mobile-specific you need to do here. Exposing CFCs isn't any different than exposing CFM files that are accessed via a browser. You can use the standard CF session management and CF authentication (cflogin) - there are some examples available by Googling "coldfusion cflogin flex remoting".
Dave Watts, CTO, Fig Leaf Software -
Creating remote objects and passing the retrieved data to modules
I found at this Adobe tutorial a nice "RemoteService" class that creates a RemoteObject and contains the functions for handling the result and fault events. If I wanted to use this approach, how could I pass the data from the result handler to interfaces that modules from the main application could use?
I could put the RemoteService/RemoteObject in the modules, but (in my opinion- and I could be wrong) the best design seems to be using the remote calls in the main app and passing the data along to the modules.
Ultimately, I would like to know what the "best practices" are for creating remote objects and passing the retrieved data to modules
Thanks!public void mouseClicked(MouseEvent e) {
X x = new X(e.getX(), e.getY());
}I don't see the difficulty. -
Remote object trying to return another remote object and a ClassCastExcepti
I have a server running with a TreeModel (the tree model implements Remote). I also have the the TreeNodes all linked together on the server. Now, I can get to the TreeModel on the server and the root node of the remote tree model.
treeModelStub = (treeModelIface)Naming.lookup(url+"remoteTM"); //works
rootStub = (remoteTreeNodeIface)treeModelStub.getRoot(); //works. The call to getRoot returns Object
But when I call
remoteTreeNodeIface aChild = (remoteTreeNodeIface)rootStub.getChildAt(index) //Does not work. "Exception in thread "main" java.lang.ClassCastException
at remoteTreeNode_Stub.getChildAt(Unknown Source)
The remote tree node method getChildAt returns TreeNode because the class implements TreeNode:
public class remoteTreeNode extends UnicastRemoteObject implements rdcaDataIface, Comparable, TreeNode {
public TreeNode getChildAt(int idx) {
System.out.println("DEBUG: class is "+this.getClass()); // class is remoteTreeNode
return (remoteTreeNode)children.get(idx);
The remote interface is defined as:
public interface rdcaDataIface extends java.rmi.Remote {
public TreeNode getChildAt(int idx) throws RemoteException;
Any ideas why this does not work. Why can a remote object of type Object be returned just fine, but a TreeNode not be returned?
Thank you for your help,
BrentI have a server running with a TreeModel (the tree
model implements Remote). I also have the the
TreeNodes all linked together on the server. Now, I
can get to the TreeModel on the server and the root
node of the remote tree model.
treeModelStub =
(treeModelIface)Naming.lookup(url+"remoteTM");
//works
rootStub =
(remoteTreeNodeIface)treeModelStub.getRoot();
//works. The call to getRoot returns Object
But when I call
remoteTreeNodeIface aChild =
(remoteTreeNodeIface)rootStub.getChildAt(index)******************************************
can only be casted to rdcaDataIface. The returned object is an instanceof the rdcaDataIface_stub, which have nothing to do with TreeNode.
//Does not work. "Exception in thread "main"
java.lang.ClassCastException
at remoteTreeNode_Stub.getChildAt(Unknown
t(Unknown Source)
The remote tree node method getChildAt returns
TreeNode because the class implements TreeNode:
public class remoteTreeNode extends
UnicastRemoteObject implements rdcaDataIface,
Comparable, TreeNode {
public TreeNode getChildAt(int idx) {
System.out.println("DEBUG: class is
lass is "+this.getClass()); // class is
remoteTreeNode
return (remoteTreeNode)children.get(idx);
The remote interface is defined as:
public interface rdcaDataIface extends java.rmi.Remote
public TreeNode getChildAt(int idx) throws
ows RemoteException;
Any ideas why this does not work. Why can a remote
object of type Object be returned just fine, but a
TreeNode not be returned?
Thank you for your help,
Brent -
SSL Flex Remote Object - no remoting-config file
I realize that this topic has been discussed a lot, and I think
I have the solution figured out.
The problem is that I have to edit the remoting-config file - and there isn't one!
I've hunted high and low on the server, and I just don't have the file.
We are using Coldfusion 8,0,0,176276 Enterprise, and I have an instance for my flex applicaitons (we have multiple instances running, and none of them have the file). The server is running on a Solaris VM.
How do I fix this problem??
Thanks!
JennMy context root is specified as the default "/" When I remove the context root variable from the services-config.xml, it can't find the file. I don't know where I can change context root, but I am confused as to what it should be, regardless.
Add the -context-root to the compiler options, just like -services and set it to an empty string
-services="/Applications/JRun4/servers/cfusion/cfusion-ear/cfusion-war/WEB-INF/f lex/servics-config.xml" -context-root="" -
Rmi and reference to remote object
how I can obtain a reference to a remote object and not its value?
This will happen automatically once it is exported and you return it from the server via an RMI call, e.g. Naming.lookup() or as the result of another remote method.
-
RMI and Threads: Calling wait() on a remote object
I created a counter as a remote object.
Multiple clients are displaying the counter value.
If one of the clients increments the counter, I want the displayed counter value on every client to be updated to the new value (of the counter on the server).
Therefore every client starts a new thread to "listen" for changes of the countervalue. I wanted to call the wait() method on the remote object (the remote counter). But i think it will be called on the stub instead of on the actual remote object.
Therefore i created a extra method waitForChange() on the remote object.
public void waitForChange() throws RemoteException, InterruptedException {
synchronized(this) {
wait();
This method only calls the wait() method. Now I'm sure it's called on the remote object and not on the stub.
This works, but my question is: is there a better way to do this?
Code:
==========================================
The remote interface
==========================================
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface RemoteCounter extends Remote {
void incrementCounter() throws RemoteException;
int getCounterValue() throws RemoteException;
void waitForChange() throws RemoteException, InterruptedException;
} ==========================================
The implementation of the remote interface
==========================================
import java.rmi.*;
import java.rmi.activation.*;
import RemoteCounter;
public class RemoteCounterImpl extends Activatable
implements RemoteCounter {
private static final long serialVersionUID = 1L;
private int counter = 0;
protected RemoteCounterImpl(ActivationID id, MarshalledObject data) throws RemoteException {
super(id, 0);
public void incrementCounter() throws RemoteException {
synchronized(this) {
counter++;
notifyAll(); //Inform all clients of the new countervalue;
public void waitForChange() throws RemoteException, InterruptedException {
synchronized(this) {
wait();
public int getCounterValue() throws RemoteException {
return counter;
}==========================================
A piece of code registering the remote object
==========================================
ActivationDesc desc = new ActivationDesc(agi, "RemoteCounterImpl", codebase, data);
//Register with rmid
RemoteCounter counter = (RemoteCounter)Activatable.register(desc);
// Bind the stub to a name in the registry running on 1099
Naming.bind("Counter", counter);==========================================
The panel containing a button, a label
which starts a new thread listening for
counter value changes
==========================================
import javax.swing.*;
import java.awt.Dimension;
import java.awt.event.*;
import java.rmi.*;
import org.personal.exam.services.RemoteCounter;
public class PanelCounter extends JPanel {
private static final long serialVersionUID = 1L;
JLabel labelX = new JLabel("Press testbutton");
Thread t;
RemoteCounter remoteCounter;
public PanelCounter() {
try {
jbInit();
} catch(Exception e) {
e.printStackTrace();
private void jbInit() throws Exception
this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
this.setPreferredSize(new Dimension(450,300));
// The securityManager is required to make is possible
// to download classes from the server
if (System.getSecurityManager() == null) {
System.setSecurityManager(new RMISecurityManager());
//Create a testButton to increment the counter
JButton testButton = new JButton("Increment");
testButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
incrementCounter();
this.add(testButton);
//Add a label to display the counter value
this.add(labelX);
// Create thread to listen for counter value changes
try {
remoteCounter = (RemoteCounter)Naming.lookup("Counter");
CounterValueChecker cvl = new CounterValueChecker(labelX, remoteCounter);
//Start a thread to listen for changes of the countervalue
t = new Thread(cvl);
t.start();
} catch(Exception e) {
e.printStackTrace();
this.setVisible(true);
private void incrementCounter() {
String message = "error";
try {
remoteCounter.incrementCounter();
message = "Current value is " + remoteCounter.getCounterValue();
} catch(Exception e) {
System.out.println("Test Exception: " + e.getMessage());
e.printStackTrace();
labelX.setText(message);
}==========================================
The runnable implementation used by the
thread to wait for counterchanges
==========================================
import java.rmi.RemoteException;
import javax.swing.JLabel;
import org.apache.log4j.Logger;
import RemoteCounter;
public class CounterValueChecker implements Runnable {
private JLabel counterLabel;
private RemoteCounter remoteCounter;
public boolean keepChecking= true;
private Logger logger = Logger.getLogger(this.getClass());
public CounterValueChecker(JLabel counterLabel, RemoteCounter remoteCounter){
this.counterLabel = counterLabel;
this.remoteCounter = remoteCounter;
public void run() {
while(keepChecking) {
int newVal = -1;
synchronized(remoteCounter) {
try {
//remoteCounter.wait();
//this does not work. I think because the wait() method is called on the
//stub instead of on the actual remote object
remoteCounter.waitForChange();
} catch (InterruptedException e) {
keepChecking = false;
break;
} catch (RemoteException re) {
re.printStackTrace();
try {
newVal = remoteCounter.getCounterValue();
} catch (RemoteException re) {
re.printStackTrace();
counterLabel.setText("New value: " + newVal);
}This is just a little test. Actually I want to notify clients of changes in data displayed in a Table. If one client saves one record of the data, i want the new record to be displayed immediatly on all clients that are viewing the same data.I've been doing some reading about RMI and callback.
As I understand it, there's a remote object is running on the client now as wel. And the server makes a call to the client.
But now the server makes a call to one client.
And the point is, I want all clients to be updated with the new value.
Does this mean, I have to keep a list with references to all clients connected to the server?
I my code the notifyAll() method causes all waiting Threads (running on several clients) to wake up and do something (getting the new counter value). -
Can't load all properties of a remote object
Hi,
I have a java class called
Employe which has a field of type
Group(an java class)
when i get the Employe Object in flex using remote Object and
try to access Group's properties like
employe.goup.name, i get:
"Error #1009: Cannot access a property or method of a null
object reference".
Can some one please help me! Thank you.Please check your Node Object, I mean all Objects that you are going to save is serialized or not.
-
HOW TO PASS NON REMOTE OBJECT PARAMETER
good day,
hi im new to java and rmi, and i need help pls, my question is how can i pass a non-remote object/local object as a parameter to a remote method. can u pls give a code for the:
1. client that will invoke the remote method and pass the object in remote objects method.
2. object that will be passed to the server/remote object( a serilizable object of course).
3. the remote object and the method that will receive the object parameter.
thank you very much for your kindness,
p.s.
you can email me to [email protected]
batusai,When you create the object locally, and pass it to the server, at that point it exists on both systems/in both jvms.
Why don't you write your own example, and try it. If you get in trouble, post the code, and we will help you. -
Daisy-chaining remote object calls
If you want to get data from a series of CFCs using remote
object, and each call depends on data received from the previous
call, you have to daisy-chain the functions making the calls,
otherwise there is no way to guarantee that the data is available
in time (in practice it is never available in time) because the
main thread races on regardless.
Now if you want to refresh parts of the data, or you want to
get a different set of data from one or more of the same CFCs, you
either can use the same functions and set up a different set of
daisy-chains with multiple boolean tests to see which chain of
links should be being followed ( and this ends up something akin to
a four-dimensional Hampton Court maze), or you have to duplicate
the remote calls over and over again in different sets of functions
and resultHandlers. Either way you end up with a horrible mess.
Is there any way to write a class that can suspend the main
thread, pending a remote call listener sending a resume main thread
event.
The other way that would work (though this would not be as
good) is to change addEventListener, so that you can pass arguments
into the resultHandler.
Does anyone have any ideas that could lead to a solution to
this problem? It's giving me gray hair.
Doug"suspend the main thread, pending a remote call.." No. Can't
be done.
..."pass arguments into the resultHandler..." Yes, this is
done using the AsyncToken. (ACT pattern)
The send() methods returns an AsyncToken object. You can use
this dynamic object to add almost anything you want to the token,
including strings, and functions (google the term "closure").
As I am still not comfortable with anonymous functions, I
like to pass strings. I pass an identifier, which I can use in a
switch statement to determine the next step. Sometimes I pass a
"nextStep" string to define finer grain conditionality.
I use a single dataService object and result handler function
for all calls.
Tracy -
Logical model cannot refer to 'remote objects'?
Hi
Using DM 3.3.0.747.
In the relational model one can drag and drop in a table from another relational model from a separate design. This shows that table as a linked table and can be refreshed via the 'Synchronize Remote Objects' and allows that table to be referenced from your 'local' tables (i.e. used in foreign keys).
I tried the same, but for a logical model entity. This does not work/is not allowed? What is the expected behaviour?
We would like to use this for logical models as well. (So that we may develop/document the logical models separate, but use common/shared entities in the same way possible in relational models. This will help us a lot in keeping the models smaller and easier to manage and version control.)
Thank you & RegardsHi Ed,
I presume you had some relationships in the Logical Model that you were expecting to be engineered to Foreign Key relationships in the Relational Model.
Please can you provide more detail to help resolve your problem. For example:
Was the problem on an initial engineer from the logical model? Or on a re-engineer?
Are you using Entity subtyping in your Logical Model?
Are there any relevant error messages in the log file? (This is normally file datamodeler.log in folder datamodeler\datamodeler\log.)
David -
Premature Garbage Collection of Remote Objects
I have a problem with distributed garbage collection and RMI. In CSPoker we try to support RMI for client-server communication. The client looks up the server through the registry, calls the login method and receives back a Remote Object reference called ServerContext. The client can register Remote even listener Objects with the server.
In both directions we occasionally see:
java.rmi.NoSuchObjectException: no such object in table
The behaviour is completely unpredictable. Some developers never see it, others see it all the time. Even on the same machine, sometimes it failes immediately
and sometimes it fails after a while. One person running the Sun JRE 6 on Windows has this poblem most frequently.
Can this be a bug or do we misinterpret something? The way we see it, as long as the client leases the Remote Object it shouldn't be GCed. All tests are run on localhost so no network partition can occur.
The problem would probably be solved if we hold static references to all Remote Objects in the local JVM. This is not an option because we want the Objects to be GCed once the lease expires.
Here are 2 debugging outputs of server runs with RMI logging enabled:
http://cspoker.pastebin.com/f27a7d6fc
As you can see, the lease requests are coming through but a NoSuchObjectException is thrown and the Object is finalized.
http://cspoker.pastebin.com/f732797d2Thanks for the quick reply.
For instance:
11:56:02,427 DEBUG (org.cspoker.common.api.shared.context.ForwardingRemoteServerContext.java:72) [finalize] - Garbage collecting old context: org.cspoker.server.rmi.export.ExportingServerContext@15a8767
07.11.2008 11:56:02 sun.rmi.server.UnicastServerRef logCall
FEINER: RMI TCP Connection(2)-10.0.4.106: [10.0.4.106: sun.rmi.transport.DGCImpl[0:0:0, 2]: java.rmi.dgc.Lease dirty(java.rmi.server.ObjID[], long, java.rmi.dgc.Lease)]
07.11.2008 11:56:03 sun.rmi.transport.Transport serviceCall
FEIN: RMI TCP Connection(2)-10.0.4.106: [10.0.4.106] exception:
java.rmi.NoSuchObjectException: no such object in table
at sun.rmi.transport.Transport.serviceCall(Transport.java:129)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:466)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:707)
at java.lang.Thread.run(Thread.java:595)The context Object is exported and returned to the client here :
return (ExternalRemoteServerContext) UnicastRemoteObject.exportObject(context, 0);Then [the object|http://code.google.com/p/cspoker/source/browse/trunk/server/rmi/src/main/java/org/cspoker/server/rmi/export/ExportingServerContext.java?r=1023] that was just exported is GCed.
11:56:02,427 DEBUG (org.cspoker.common.api.shared.context.ForwardingRemoteServerContext.java:72) [finalize] - Garbage collecting old context: org.cspoker.server.rmi.export.ExportingServerContext@15a8767Then a lease request comes in:
FEINER: RMI TCP Connection(2)-10.0.4.106: [10.0.4.106: sun.rmi.transport.DGCImpl[0:0:0, 2]: java.rmi.dgc.Lease dirty(java.rmi.server.ObjID[], long, java.rmi.dgc.Lease)]Then the client calls a method on the remote object and the NoSuchObjectException is thrown.
The behaviour is non-deterministic in any case but yes, on the Linux JVM I'm not seeing the problem, somebody on Windows gets it all the time. -
Losing database connections in remote objects
Hi,
I have an interesting problem. I have a couple of remote objects that bear database connections. They are pooled in another remote object and provided by registry on request to the client. However, when I check the connections after a while, all of them are closed except the last client. I enabled logging and discovered that all clients except the last one connected get disconnected at the same moment when the method clean() of the DGC gets invoked. I can even predict the moment, e.g. when I start the server at XX:XX:31, the connections get closed at YY:YY:31, always after whole minutes. Strange thing is, that even active clients currently querying data get disconnected.
Jezevec
Has anybody met such a problem already? My configuration is Java 1.3.0_02, database is Oracle 8i. Thanx for any hints.My colleague solved it. If anyone interested, the problem was caused by the class com.borland.dx.sql.dataset.Database which is provided in Borland JBuilder libraries. We used it to create connections to the Oracle db. Do not use this class for RMI applications if you want to avoid problems. It's better to rely on standard JDBC classes.
Jezevec -
Object not exported for Remote object in WSAD
Hi,
I have a few classes that extend and implement java.rmi.remote object. The JAR is placed under WEB-INF/lib of a web application.
I am using WSAD 5.1.1. When I start the server, it gives me the following error.
Can somebody make out anything?? Please help
Error Stack:
[5/3/05 12:07:04:188 IST] 3d410866 Helpers W NMSV0610I: A NamingException is being thrown from a javax.naming.Context implementation. Details follow:
Context implementation: com.ibm.ws.naming.jndicos.CNContextImpl
Context method: rebind
Context name: localhost/nodes/localhost/servers/server1
Root exception is java.rmi.NoSuchObjectException: object not exported
I tried creating the stub and the skeleton classes manually and added them to the JAR file but still I get the same error. The JAR is in the CLASSPATH of the server.
I also tried creating a simple remote object and tried binding it:
Hashtable propertiesMap = new Hashtable();
propertiesMap.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.cosnaming.CNCtxFactory");
propertiesMap.put(Context.PROVIDER_URL, "iiop://localhost:2809" );
Context context= new InitialContext(propertiesMap);
myRemote instance = new myRemote();
context.bind("TestString",instance);
Even this gives :
javax.naming.ConfigurationException: Problem with PortableRemoteObject.toStub(); object not exported or stub not found. Root exception is java.rmi.NoSuchObjectException: object not exported
at sun.rmi.transport.ObjectTable.getStub(ObjectTable.java:115)
at java.rmi.server.RemoteObject.toStub(RemoteObject.java:88)
at com.ibm.rmi.util.JDKBridge.getJRMPStub(JDKBridge.java:129)
at com.ibm.rmi.javax.rmi.PortableRemoteObject.toStub(PortableRemoteObject.java:138)
at javax.rmi.PortableRemoteObject.toStub(PortableRemoteObject.java:105)
at java.lang.reflect.Method.invoke(Native Method)
-samHi,
Not sure if this question is not clear ... Can somebody give me some hints please??
-sam
Maybe you are looking for
-
Application module creation for (web) services
Hello, We are running into stack overflows from ADF BC (BC4J) with oracle.jbo.client.Configuration.createRootApplicationModule. We want to make sure we're doing this right. If you have data bound services (e.g. product lookup) and you don't want to p
-
I need some people who can test the following for me - Wake on Ethernet Acc
Hey there, i am sorry for crossposting but i need someone who can confirm something like a bug in 10.6.2 SL. What you need: Two Macs running 10.6.2 SL which are in the same Network. The following settings need to be activated on both Macs: 1. System
-
Sorenson Squeeze 3 from Final cut
Does anyone know the best settings to export to get a high quality video to show on a PC with output to a projector with or without Sorenson squeeze? Any Comments welcome! Thanks, Ed
-
Problème d'activation Photoshop CS5 suite crash matériel
Bonjour à tous J'ai un problème d'activation de ma licence photoshop. La carte mère de mon macbook à cédée sans prévenir ce qui m'a obliger à racheter une autre machine, il y'a 2 semaines. Au moment de l'activation de Cs5 sur ma nouvelle machine, la
-
How to download Database Table Field names to local system..?
Hi I want to download Feild names and their data types to local excel sheet... How to do it..??? Pavan Sanganal