Hello all !
Well, after some rewriting (but no test up to now), I get the following
bootstraping code.
I know that it could be dizzy to help on this kind of "very long" code,
but what I am thinking is that such a code in a manual web page of Mina
could help, of course, once we correct it (since I'm sure it is not perfect).
So here it is, beginning by the server part:
// Create service
NioSocketAcceptor acceptor = new NioSocketAcceptor(myNumberOfCpuPlusOne);
// It implies "myNumberOfCpuPlusOne" IoAcceptor using an internal
newCachedThreadPool
SocketSessionConfig socketSessionConfig = (SocketSessionConfig)
acceptor.getSessionConfig();
socketSessionConfig.setReuseAddress(true);
//XXX VISTA BUG ? => I need to remove setSoLinger(x) and KeepAlive(true)
socketSessionConfig.setSoLinger(1);
socketSessionConfig.setKeepAlive(false); //Not sure
socketSessionConfig.setTcpNoDelay(true);
socketSessionConfig.setReceiveBufferSize(myTCPBLOCKSIZE);
socketSessionConfig.setSendBufferSize(myTCPBLOCKSIZE);
socketSessionConfig.setIdleTime(IdleStatus.BOTH_IDLE, myTIMEOUT);
// Create IoHandler (I am using an extension of DemuxingIoHandler)
MyDemuxingIoHandler myDemuxingIoHandler = new MyDemuxingIoHandler();
// Create for each class one message handler
// MyMessage
MyMessageHandler myMessageHandler = new MyMessageHandler();
myDemuxingIoHandler.addMessageHandler(MyMessage.class, myMessageHandler);
...
// Configuration of the filter chain
DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
// Compression
CompressionFilter compression =
new CompressionFilter(COMPRESSIONCLIENT,
COMPRESSIONSERVER,
CompressionFilter.COMPRESSION_MAX);
chain.addLast("Compression",compression);
// Serialization : I add a pool of Executor since serizalisation is not free of
CPU and after that my protocol
// implies some extra codes (like JDBC calls)
ProtocolCodecFactory codec = new ObjectSerializationCodecFactory();
// Was Executors.newCachedThreadPool();
ExecutorService executorSerialize = new
OrderedThreadPoolExecutor(LSDConstants.SERVER_THREAD);
chain.addLast("SerializePool", new ExecutorFilter(executorSerialize));
chain.addLast("Serialize", new ProtocolCodecFilter(codec));
// Set port
InetSocketAddress inetSocketAddress = new InetSocketAddress(mySERVER_PORT);
// All together
acceptor.setLocalAddress(inetSocketAddress);
acceptor.setHandler(myDemuxingIoHandler);
// When Unbind, do not disconnect already connected client
acceptor.setDisconnectOnUnbind(false);
try {
acceptor.bind();
} catch (IOException e) {
myLogger.error("Cannot Bind Service "+myname, e);
return false;
}
When shutting down:
// I use a complicated way (which I do not include here since too long)
// to wait that all sessions are really closed before exiting the acceptor
// (looping on ioAcceptor.getManagedSessions() to see if requests are pending)
// But if you know a good way to do that (clean shutdown), I will take it !
// Then realy closed if any session are still opened
acceptor.setDisconnectOnUnbind(true);
acceptor.unbind();
if (executorSerialize != null) {
executorSerialize.shutdownNow();
executorSerialize = null;
}
// Did I forgot something ?
I will post a second message for the client part... ;-)
Of course, any comment or correction are most welcomed !
Frederic
----- Original Message -----
From: "Frédéric Brégier"
Sent: Tuesday, November 20, 2007 7:55 PM
Subject: Re: [jira] Created: (DIRMINA-477) Update page about differences
between1.x and 2.x
Hi Trustin and all of you !
I come back to MINA since I feel that MINA 2 is on the way to get out.
And I start to look what could be my effort to switch from beta 2 (trunk)
from 6 months ago to the current status of trunk.
I found some points that might be good to add on the page you started to
write.
As a beginning :
- change from get/set Attachment to get/setAttribute (OK there are still
there but deprecated)
It is not a big deal, of course, if you except the flag in Eclipse ;-)
- a full example on thread, in fact an example with both levels
(SocketAcceptor and ExecutorFilter)
since they are now really different with the introduction of
Unordered/OrderedThreadPoolExecutor.
Specially since from before in SocketAcceptor (now NioSocketAcceptor
right ?), the interface is different
with an Executor at first and IoProcessor at second, which I don't know
at all what to do with it.
I think, like others, I use Mina on multiprocessor server, so I can
afford multiple thread on
NioSocketAcceptor and other threads (if needed but I need it since I do
Oracle) in filter.
Just a question I've just thinking about : Am I correct if I say
Executors.newCachedThreadPool()
will no more allows order as it is point in this page of transition in
filter ?
Of course, page in "configuring thread model" is no more correct for V2
(as far as I understand).
- an example of how to configure Read and Write ThrottleFilter and what
could be a good default (if one
can say of course)
I will come back if I see anything else...
Just a question perhaps stupid :
I have the idea to perhaps use StreamWriteFilter or StreamIoHandler to
transfer some files
but with a protocol exchange before and after the file transfer (to verify
the access, the rules,
to make some pre or post operations, probably making an MD5 check of the
transfered file...).
I have look at the mailing list but I didn't find a good example of what
could be the best
but also I didn't understand how to "get" the file on the other side.
That is to say : I saw some code to send file (using StreamWF) but no on
receiving this file?
I'm surely missing something, obviously...
As always, Mina is going better and better... Just I feel like almost a new
user to Mina
after 6 months without coding Mina stuff, even If I read all the mailing
list (great one !).
Frederic
----- Original Message -----
From: "Trustin Lee (JIRA)"
Sent: Wednesday, November 14, 2007 8:08 AM
Subject: [jira] Created: (DIRMINA-477) Update page about differences
between1.x and 2.x
Update page about differences between 1.x and 2.x
-------------------------------------------------
Key: DIRMINA-477
URL: https://issues.apache.org/jira/browse/DIRMINA-477
Project: MINA
Issue Type: Task
Components: Web Site / Documentation
Reporter: Trustin Lee
Fix For: 2.0.0-M1
Our current web site doesn't describe what have been changed in 2.x
comparing to 1.x. We need to carefully put all changes together there so
people can migrate more easily.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.