users@grizzly.java.net

Re: How-to attach an ID to a Connection?

From: John ROM <snake-john_at_gmx.de>
Date: Thu, 22 May 2008 19:40:40 +0200

Hi Oleksiy,

thank you very much!!

Just for the record:

//setting an attribute on a connection:

public void attachIdToConnection(int id) {
        WorkerThread workerThread = (WorkerThread) Thread.currentThread();
        // Detach the current Thread data.

        AttributeHolder connectionAttrs =
                ctx.getAttributeHolderByScope(Context.AttributeScope.CONNECTION);
        if (connectionAttrs == null) {
            connectionAttrs =
                    workerThread.getAttachment();
            ctx.getSelectionKey().attach(connectionAttrs);
        }
        connectionAttrs.setAttribute("PROJECT_ID", id);

        // Attach it to the SelectionKey so the it can be resumed latter.

    }

// usecase broadcasting:

public void broadcastMessage( int project) throws Exception {

        Set<SelectionKey> selectionKeys = ctx.getSelectorHandler().keys();
        for (SelectionKey key : selectionKeys) {


            if (key.isValid()) {
                if (key == ctx.getSelectionKey()) continue;
                Object attachment = key.attachment();
                if (attachment instanceof AttributeHolder) {
                    AttributeHolder connectionAttrs = (AttributeHolder) attachment;

                    Integer p = (Integer) connectionAttrs.getAttribute(PROJECT_ID);
                    if (p == null) continue;
                                // write something to key

                }
            }

        }


    }






-----Ursprüngliche Nachricht-----
Von: Oleksiy Stashok [mailto:Oleksiy.Stashok_at_Sun.COM]
Gesendet: Donnerstag, 22. Mai 2008 17:57
An: users_at_grizzly.dev.java.net
Betreff: Re: How-to attach an ID to a Connection?

Hi John,

IMHO right thing to do - is to store Attributes in ThreadAttachment.
You can set it directly using ThreadAttachment or
ctx.getAttributeHolderByScope(AttributeScope.CONNECTION).

It shouldn't be overwritten :)

Thanks.

WBR,
Alexey.

On May 22, 2008, at 17:45 , John ROM wrote:

> I'm only using the basic grizzly framework module and building an
> server.
>
> I have selectionKeys which (hopefully) often last 12 hours.
>
> With each connection I need to store an Integer (project_id).
>
> This Integer will then be retrieved with code like:
> //iterate over all existings connections and find
> // keys with specific ids.
>
> selector.selectNow()
>
> Set<SelectionKey> selectionKeys = tCPSelectorHandler.keys();
> for (SelectionKey key : selectionKeys) {
> if(key.valid()
> // Get Integer out of maybe ThreadAttachment
> key.attachment();
> }
> }
>
>
> I am a little afraid that Grizzly might overwrite the attachment
> in my keys.
>
> Maybe its better to store the integers somewhere else together with
> selectorKey.hashcode() and hope that two keys will never have the same
> hashcodes...
>
> So....
>
> What is the best way to attach something to an selectorKey or in other
> words what is the pendant to
> AttributeHolder connectionAttrs =
>
> ctx.getAttributeHolderByScope(AttributeScope.CONNECTION);
>
>
> Many Greetings John
>
>
>



-- 
GMX startet ShortView.de. Hier findest Du Leute mit Deinen Interessen!
Jetzt dabei sein: http://www.shortview.de/?mc=sv_ext_mf@gmx