Hez,

The Program does not terminated. Its working fine, as expected
listening. try sending some UDP packets and check the logs.
Edwin has already explained that the call is non-blocking, and the
worker threads are working in the background as non-daemon threads.
Since the call is non-blocking, the call returns and hence you see
"DONE".

I copied your code and ran the program. It is working. Are you getting
the command prompt back, when you run the program?

thanks
ashish


On Tue, Oct 7, 2008 at 11:55 AM, hezjing <[EMAIL PROTECTED]> wrote:
> Hi Edwin
>
> Here is my program,
>
> public class Server {
>
>    private final Logger logger = LoggerFactory.getLogger(Server.class);
>
>    private Server(int port) throws IOException {
>        NioDatagramAcceptor acceptor = new NioDatagramAcceptor();
>        acceptor.setHandler(new IoHandlerAdapter());
>        DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
>        chain.addLast("logger", new LoggingFilter());
>        DatagramSessionConfig sessionConfig = acceptor.getSessionConfig();
>        sessionConfig.setReuseAddress(true);
>        acceptor.bind(new InetSocketAddress(port));
>        logger.info("Quota Server is listening on port {}", port);
>    }
>
>    public static void main(String[] args) {
>        try {
>            Server server = new Server(8121);
>        } catch (Exception e) {
>            e.printStackTrace();
>            System.exit(1);
>        }
>        System.out.println("Done");
>    }
> }
>
> When run, the program prints the following output and the JVM is terminated.
>
> Did I miss anything here?
>
>
> 14:23:04.296 [main] INFO  com.openet.quotaserver.Server - Quota Server is
> listening on port 8121
> Done
>>
>
>
> On Tue, Oct 7, 2008 at 12:30 PM, Edwin Lee <[EMAIL PROTECTED]>wrote:
>
>> Hi hez,
>>
>> hmm does your JVM exit? it shouldn't, right? because the listener worker
>> thread(s) that are working in the background are non-daemon threads...
>>
>> anyway, what i'll suggest is to use passive wait with a flag to allow it to
>> be
>> stopped later, so that you can clean up resources (unbind and dispose).
>> (After
>> calling dispose, the JVM should exit provided you have no other acceptors
>> or
>> other threads still running).
>>
>> i.e.
>>
>> Boolean running = Boolean.TRUE;
>>
>> ....
>>
>> acceptor.bind(new InetSocketAddress(port));
>>
>> synchronized (running) {
>>    while (running.booleanValue()) {
>>        running.wait();
>>    }
>> }
>>
>> acceptor.unbind();
>> acceptor.dispose();
>>
>> then you can have another method to stop the server:
>>
>> public void stop() {
>>    synchronized (running) {
>>        running = Boolean.FALSE;
>>        running.notify();
>>     }
>> }
>>
>>
>>
>> HTH,
>> Edwin
>>
>>
>>
>> --- hezjing <[EMAIL PROTECTED]> wrote:
>>
>> > Hi Edwin
>> > Yes, I'm expecting the program to wait for an incoming connection.
>> >
>> > I have already specified the IoHandlerAdapter to the NioDatagramAcceptor,
>> >
>> >         acceptor.setHandler(new IoHandlerAdapter());
>> >
>> >
>> > Do you mean I have to write a logic after the bind() to keep the program
>> > running?
>> >
>> >         acceptor.bind(new InetSocketAddress(port));
>> >         // wait for the connection here ...
>> >         while (true);
>> >
>> >
>> > On Sat, Oct 4, 2008 at 2:46 AM, Edwin Lee <[EMAIL PROTECTED]>
>> wrote:
>> >
>> > > Hi Hez,
>> > >
>> > > 1. Are you expecting the line
>> > >
>> > > acceptor.bind(new InetSocketAddress(port));
>> > >
>> > > to block until an incoming connection is accepted? (i.e. similar to
>> > > ServerSocket.accept())
>> > >
>> > > 2. or are you saying that, after the line is executed, the programme
>> > > terminates
>> > > completely, and no longer listens on that port? (Check netstat)
>> > >
>> > > if (1), well actually, this non-blocking is actually a feature of MINA
>> (and
>> > > Java NIO). After the bind, the execution continues into the next line,
>> and
>> > > "event" related to this bound port will be handled by a Handler object
>> > > (similar
>> > > to event listeners and message-driven beans.) What you can do is to
>> > > implement a
>> > > subclass of org.apache.mina.core.service.IoHandlerAdapter, e.g.
>> > >
>> > > static class TestHandler extends IoHandlerAdapter {
>> > >
>> > >    @Override
>> > >    public void messageReceived(IoSession session, Object message) {
>> > >
>> > >        System.out.println("Message Received");
>> > >    }
>> > >
>> > >    @Override
>> > >    public void sessionOpened(IoSession session) {
>> > >
>> > >        System.out.println("Incoming Connection Accepted");
>> > >    }
>> > > }
>> > >
>> > > then, in your code segment,
>> > >
>> > > acceptor.setHandler(new TestHandler());
>> > >
>> > > before binding the acceptor to the port.
>> > >
>> > >
>> > >
>> > > HTH,
>> > > Edwin
>> > >
>> > >
>> > >
>> > > --- hezjing <[EMAIL PROTECTED]> wrote:
>> > >
>> > > > Hi
>> > > > I have the following UDP server code,
>> > > >
>> > > >         NioDatagramAcceptor acceptor = new NioDatagramAcceptor();
>> > > >         // temporary set to IoHandlerAdapter ...
>> > > >         acceptor.setHandler(new IoHandlerAdapter());
>> > > >
>> > > >         DefaultIoFilterChainBuilder chain =
>> acceptor.getFilterChain();
>> > > >         chain.addLast("logger", new LoggingFilter());
>> > > >
>> > > >         DatagramSessionConfig sessionConfig =
>> > > acceptor.getSessionConfig();
>> > > >         sessionConfig.setReuseAddress(true);
>> > > >
>> > > >         acceptor.bind(new InetSocketAddress(port));
>> > > >
>> > > >
>> > > > The problem now is the code is executed successfully and terminated
>> after
>> > > > the bind().
>> > > > I think the program should stay and listen to the specified port
>> after
>> > > the
>> > > > bind()?
>> > >
>> > >
>> > >
>> > >       Try cool new emoticons, skins, plus more space for friends.
>> > > Download Yahoo! Messenger Singapore now!
>> > > http://sg.messenger.yahoo.com
>> > >
>> > >
>> >
>> >
>> > --
>> >
>> > Hez
>> >
>>
>>
>>
>>       Get your preferred Email name!
>> Now you can @ymail.com and @rocketmail.com
>> http://mail.promotions.yahoo.com/newdomains/sg/
>>
>>
>
>
> --
>
> Hez
>



-- 
thanks
ashish

Visit My Photo Galleries: http://www.pbase.com/ashishpaliwal

Reply via email to