On Wed, 9 May 2012 12:11:19 -0700 (PDT), mephysto wrote:
> Hi Kevin,
> I will try to explain my scenario: with my application, many users
> exchange
> message within them. User1 send message to user2 by a web service.
> This web
> service send message and wait the response from user 2 before end and
> send
> notice to user1. I can't know how many time is needed for response,
> so, I
> would to save te state in a table on database to prevent accidental
> disconnection of client from web service.
>
> But I found that, if transaction are not closed until web service
> operation
> end, my table are not update, and I can't know the wait state of
> user1 and I
> can't take back he to his request.
> Moreover, if transaction lock my table, and other user, user3, send a
> message to user4, I can't save his state until user1 operation end.
>
> Is it clear enough?
>
> Is there any wrong in my reasoning? Is there anything I ignore in
> pool
> functionality?
>
> Thanks in advance.
>
> Mephysto
>
> --
> View this message in context:
>
> http://postgresql.1045698.n5.nabble.com/Postgres-JDBC-WS-and-commit-tp5697657p5698263.html
> Sent from the PostgreSQL - jdbc mailing list archive at Nabble.com.
Hello,
In Java there are two main ways for Webservices EJB+WS or HTTP+WS
(JAX-WS, etc). I assume you use EJB+WS, if not give more details. You
should not manipulate connections pools and transactions manually
because you will break something.
According to your scenario I guess you use container managed
transactions in EJB+WS. In this scenario transaction will not be
committed until method ends, so locks etc, will be preserved, as well
others will not see Users 1 changes till commit. You should rewrite (a
little bit) your code, use @TransactionManagement(BEAN), and
EJBContext.getUserTransactions() or manipulate with
@TransactionManagement(CONTAINER) (this is default) and
@TransactionAttribute(REQUIRES_NEW) /your state saving method should be
in REQUIRES_NEW/ - here I'm not quite sure if in EJB3 to call bean
method form same bean you need self-inject same bean, or just normal
Java call is enough.
Please bear in mind, that long running connections (as well JDBC, HTTP,
IIOP) and transactions may be treated as damaged and closed by server.
Regards,
Radosław Smogura