Hi,
i think there is problem with sessionOpen method call. I put counter in that
method and it was not called as many times as it should be.
When i put code from sessionOpen method into messageReceivde everythis works
fine.
On Fri, Jul 25, 2008 at 4:06 PM, Zlatko Josic <[EMAIL PROTECTED]>
wrote:
> Thanks for reply.
>
> That is right client is blocked...but i dont unterstand why client never
> get data from server.
> Server does not report any error.
>
> This is the scenario.
>
> 1.Client connect to server
> 2. Server writes data to client (This is done in sessionOpen metnod,
> initiali was in sessionCreated)
> 3. Client sends request to server.
> 4. Server response to client.
>
> Some clinet stuck in step 2.
>
>
> On Fri, Jul 25, 2008 at 3:55 PM, Oscar <[EMAIL PROTECTED]> wrote:
>
>> Since your client uses the blocked socket, it is blocked at
>> 'br.readLine()'.
>>
>> That is, client doesn't end until server feeds data to it.
>>
>>
>> On Fri, Jul 25, 2008 at 7:25 PM, Zlatko Josic <[EMAIL PROTECTED]>
>> wrote:
>>
>> > does session that entered idle state can write and read mesasage later?
>> >
>> > On Fri, Jul 25, 2008 at 1:17 PM, Zlatko Josic <[EMAIL PROTECTED]
>> > >wrote:
>> >
>> > > Hi,
>> > >
>> > > tnis is snippet code of client
>> > >
>> > > for (int i = 0; i < stepNumber; i++) {
>> > > ClientRequest request = new ClientRequest();
>> > > request.setParameter("command", "addEVEronet");
>> > > request.setParameter("Amt", "10");
>> > > request.setParameter("phoneNumber", "0642361393");
>> > > request.setParameter("serN", "000001");
>> > > // slanje zahteva.
>> > >
>> > > // kreiranje soketa.
>> > > Socket socket = null;
>> > > BufferedReader br = null;
>> > > PrintWriter pw = null;
>> > > Map<String, Object> result = null;
>> > > try {
>> > > socket = new Socket(host, port);
>> > > br = new BufferedReader(new
>> > > InputStreamReader(socket.getInputStream()));
>> > > pw = new PrintWriter(socket.getOutputStream());
>> > > //citanje trenutnog vremena.
>> > > result = readTransformator.transform(br.readLine());
>> > > log.info(CollectionsUtil.formatMap(result));
>> > >
>> > > String currTime = (String)result.get("currT");
>> > > //kriptovana vrednost.
>> > > String crypt = Coder.decode(currTime);
>> > > request.setParameter("orN", crypt);
>> > > pw.println(writeTransformator
>> > > .transform(request.getParameters()));
>> > > pw.flush();
>> > > result = readTransformator.transform(br.readLine());
>> > > log.info(CollectionsUtil.formatMap(result));
>> > > } catch (UnknownHostException e) {
>> > > throw new DestinationNotAvailableException(e);
>> > > } catch (IOException e) {
>> > > throw new DestinationNotAvailableException(e);
>> > > } finally {
>> > > //zatvaranje resursa.
>> > > SocketUtil.close(socket);
>> > > IOUtil.close(br);
>> > > IOUtil.close(pw);
>> > >
>> > > }
>> > >
>> > > sleepQuetly(3*1000);
>> > > }// for
>> > >
>> > >
>> > > and this is snippet of server code
>> > >
>> > > public void process(final MobileContext context) {
>> > > //uzimanje sesije.
>> > > IoSession session =
>> (IoSession)context.getParameter("ioSession");
>> > > TransactionDirector transactionDirector =
>> > > (TransactionDirector)context.getParameter("transactionDirector");
>> > > final DaoFactory daoFactory =
>> > > (DaoFactory)context.getParameter("daoFactory");
>> > > final Transaction transaction =
>> > > transactionDirector.getTransaction();
>> > > final Voucher voucher = transaction.getVoucher();
>> > >
>> > >
>> > > final WriteFuture future =
>> > >
>> >
>> session.write(transformator.transform(context.getResponse().getParameters()));
>> > >
>> > >
>> > >
>> > >
>> > >
>> > > future.addListener(new IoFutureListener<IoFuture>(){
>> > >
>> > > @Override
>> > > public void operationComplete(IoFuture ioFuture) {
>> > > try{
>> > > WriteFuture newfuture = (WriteFuture)future.await();
>> > > //WriteFuture future = (WriteFuture)ioFuture;
>> > >
>> > > //provera da li je podatak upisan.
>> > > if (newfuture.isWritten()){
>> > >
>> > > //provera da li j u pitanju offline dopuna.
>> > > if (voucher!= null){
>> > > VoucherDao dao = daoFactory.getVoucherDao();
>> > > //oznacavanje da je voucher iskoriscen.
>> > > try {
>> > > dao.updateUsed(voucher);
>> > > } catch (DaoException e) {
>> > > log.error("Nije oznaceno u bazi da je
>> vaucer
>> > > iskoriscen "+voucher.getId(),e);
>> > > }
>> > > }
>> > > }else{
>> > > //ako odgovor nije poslat terminalu vraca se
>> vaucer u
>> > > red.
>> > > if (voucher != null){
>> > > Queue queue =
>> > (Queue)context.getParameter("queue");
>> > > queue.putVoucher(voucher);
>> > > }else{
>> > > //TODO register for autostorno.
>> > > }
>> > > TransactionDao dao =
>> daoFactory.getTransactionDao();
>> > > try {
>> > >
>> > > dao.updateDelivered(transaction.getTransactionId(),NOT_DELIVERED);
>> > > } catch (DaoException e) {
>> > > log.error("Nije oznaceno u bazi da poruka nije
>> > > isporucena klijentu "+transaction.getTransactionId());
>> > > }
>> > >
>> > > //provera da li je doslo do greske pri slanju
>> > odgovora.
>> > > Throwable t = future.getException();
>> > > if (t != null){
>> > > log.error("Greska pri slanju odgovara klijentu
>> za
>> > > transakciju "+transaction.getTransactionId(),t);
>> > > }
>> > > }
>> > >
>> > >
>> > > }catch(Throwable e){
>> > > log.error("Ovde je problem",e);
>> > > }
>> > >
>> > > }
>> > >
>> > > }
>> > >
>> > > );
>> > > session.closeOnFlush();
>> > >
>> > >
>> > >
>> >
>> //System.out.println(""+context.getResponse().getParameter(TerminalKeys.ERR));
>> > > context.endProcessing();
>> > >
>> > >
>> > > }
>> > >
>> > > On Fri, Jul 25, 2008 at 4:50 AM, Wenrui Guo <[EMAIL PROTECTED]
>> > >wrote:
>> > >
>> > >> From my point of view, you had better post your code snippet from
>> your
>> > >> application. For example, the logic of client side.
>> > >>
>> > >> BR
>> > >> anderson
>> > >>
>> > >> -----Original Message-----
>> > >> From: Zlatko Josic [mailto:[EMAIL PROTECTED]
>> > >> Sent: Friday, July 25, 2008 3:36 AM
>> > >> To: [email protected]
>> > >> Subject: problem
>> > >>
>> > >> Hi,
>> > >>
>> > >> I have server based on mina framework adn stupid socket client.
>> > >> Messages sent to server have "\n\r" for end of message and messages
>> > >> send to client have '\n' for end of message.
>> > >>
>> > >> When I start lot of clients some of clients never ends and server has
>> > >> lotof sessionIdle method calls.
>> > >>
>> > >> what can be problem?
>> > >>
>> > >> Thanks for any help.
>> > >>
>> > >
>> > >
>> >
>>
>
>