Extending TPTP Attach problem - client never receives response from legacy agent [message #106785] |
Fri, 27 July 2007 11:30  |
Eclipse User |
|
|
|
Hi,
I wrote a basic agent for TPTP 4.4. that runs as a JVMPI agent in Java 1.4,
and I extended the AbstractDCMutualLauncher class so that I get notified
when the attach is complete. In
AbstractMutualDCLauncher#launch(AgentSelection[]), I spawn a thread to
attach to the agent, send it a command, and wait for the response. The
agent receives the response and sends the command back, but the client
doesn't receive a response. I have tried testing this with 4.2+ versions
of the agent controller, with no success. I have also tested extracting the
code that attaches to the agent, and sends waits for the command and running
it as a standalone java application and that always works. I noticed this
in the AC log:
The log messages in order from agent launch to attach:
msg="Incoming connection request from agent mysample.agent in process 4544
with uuid 2c7700f7-11fd-4b36-895d-b737f821da80" severity="10"
version="1.0.1">
msg="Agent not found mysample.agent 
" severity="10"
version="1.0.1">msg="Registering process 4544
org.eclipse.tptp.legacy.mysample.agent" severity="10" version="1.0.1">
msg="Agent Controller allowed multiple clients to attach to a legacy
agent." severity="50" version="1.0.1">
msg="Agent Controller allowed multiple clients to attach to a legacy
agent." severity="50" version="1.0.1">
msg="Preparing Agent active" severity="10" version="1.0.1">
msg="The requested connection (107d) could not be found during sendMessage"
<---This is where I think my problem isI have tried debugging the code that
leads up to the attach and I'm pretty sure that the agent only gets attached
to once, so I'm not sure why the AC thinks its previously been attached to.
I have tested this with AC v4.1.0 and it appears to work fine, which means
its probably a compatibility issue.
Command sending snippet:
agent.addAgentListener(new CustomAgentListener());
CustomCommand customCommand = new CustomCommand();
customCommand.setData("sendData");
synchronized (lock) {
agent.invokeCustomCommand(customCommand);
lock.wait(); //lock.notify is called in the handleCommand() method
of the agent listener.
}
The listener is able to receive agent active notification as well as the
"KILLED" custom command.
Here is what the agent uses to send the response:
ra_message_t *message;
ra_command_t *command;
message = ra_createMessage( RA_CONTROL_MESSAGE, 0 );
command = ra_addCommandToMessage(message, NULL); //sending in null allocates
space for the command
command->tag = RA_CUSTOM_COMMAND;
command->info.custom_command.processId= ra_getProcessId();
command->info.custom_command.context= context;
command->info.custom_command.message.data = responseData;
ra_createRASTRING(&command->info.custom_command.agent,AGENT_NAME );
ra_createRASTRING(&command->info.custom_command.message, responseData );
int sentMsgLen = ra_sendMessage(handle, message);
ra_destroyMessage(message, TRUE);
fprintf(stderr, "sent %d message bytes\n", sentMsgLen);
Any tips on how to debug this further or on what I'm doing incorrectly would
be greatly appreciated,
Thanks.
Natasha
|
|
|
|
Powered by
FUDForum. Page generated in 0.03297 seconds