[EMAIL PROTECTED] wrote:
On Jul 8 2008, Ted Ross wrote:

[EMAIL PROTECTED] wrote:
> Hello Ted,
>
> encoder is an instance of AbstractEncoder class under > org.apache.qpidity.transport.codec.Encoder. And thanks for pointing > the duplication.
>
> Yes, you are correct i checked the spec. and it (bin128) is encoded as > 16 octets. I added the following method for encoding the 128 bin > schema hash with help of Rafael. so you mean this will not help to > encode the schema... /* public void writeBin128(byte[] s) { if (s == > null) { s = new byte[16]; } else if (s.length != 16) { throw new > IllegalArgumentException("" + s); }
>
> put(s);
> }
> */
>
> could you please let me know which method can encode this schema or is > there any method in AbstractEncoder which can do this OR How can i > encode this.
>
> Thanks in advance.
>
> BR,
> Rahul
>
Rahul,

I think your writeBin128 should work correctly. This encoding method should be used to encode the schema hash in the schema request message. Let me know how it works.

-Ted



Thank you Ted for your reply. I will let you know but one more question before this.

can we send multiple request (AM1B, AM1P, AM1Q, AM1S etc...) to broker to fetch the management information on the SAME SESSION ?
Yes, you should be able to do everything on the same session.

I am trying to request multiple request on the same session ang getting an exception "IllegalMonitorStateException" on session.endData(); statement in the following code snippet.

When while loop goes first time then everything is okay. but for the second request when it reaches "session.endData();" then java throws this above mentioned exception.
I think the problem is your sequence of calls. The API expects the following sequence per message:

   session.messageTransfer
   session.data
   session.endData

In your code, the messageTransfer call is outside and before the loop. This means that the second time you try to transmit, you are calling session.data without having called session.messageTransfer first. The session is in the incorrect state for a data call, thus the exception.

Code Snippet
-----

class ...{

...

public void main(String a[])..... {
....
....

Connection con = Client.createConnection();
        ByteBuffer message= ByteBuffer.allocate(500);
        ManagementEncoder encoder=new ManagementEncoder(message);

        try
        {    // connect to local host on default port 5672
            con.connect("localhost", 5672, "test", "guest", "guest");
        }
        catch(Exception e)
        {
            System.out.print("Error connecting to broker");
            e.printStackTrace();
        }

        // Create session
        Session session = con.createSession(0);
        .......
        ......

        // transfer message to "qpid.management" exchange
session.messageTransfer("qpid.management", MessageAcceptMode.EXPLICIT,MessageAcquireMode.PRE_ACQUIRED);
        session.header(deliveryProps,messageProps);
        ......
        ......
      boolean flag=true;
while(flag)
        {

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int choice=0;

            choice = Integer.parseInt(br.readLine().trim());
switch (choice)
            {
            // send broker request
            case 1:
                p.opcode="AM1B";
                message.clear();
                try {
                    message.put(p.opcode.getBytes("UTF-8"));
                } catch (UnsupportedEncodingException e1) {
                    e1.printStackTrace();
                }
                break;


            case 2:

                         // send package request
                p.opcode="AM1P";
                message.clear();
                try {
                    message.put(p.opcode.getBytes("UTF-8"));
                } catch (UnsupportedEncodingException e1) {
                    e1.printStackTrace();
                }
                break;

case 3: // send class request
                             p.opcode="AM1Q";
                p.sequenceNo=600;
                p.packageName="qpid";
                message.clear();
                ...
                ...
            break;

            case 4:
            // send schema request
                      p.opcode="AM1S";
            .....
            .... .
            break;
// switch closed
            }

            message.flip();
            // send message
            session.data(message);
// *********GETTING EXCEPTION HERE IllegalMonitorStateException*********
            session.endData();
            // confirm completion
            session.sync();
// while closed
            }
session.sessionDetach(session.getName());
            try
            {    // close connection
                con.close();
            }
            catch(Exception e)
            {
            System.out.print("Error closing broker connection");
                e.printStackTrace();
// main close            }
}
// class closed
}
--------
End of the code snippet

can i use the same session for sending the multiple request?


Thank you so much.
BR,
/rahul


Reply via email to