1
2
3
4
5
6
7
8
9
10 package org.apache.commons.messenger;
11
12 import java.util.LinkedList;
13
14 import javax.jms.JMSException;
15 import javax.jms.Message;
16 import javax.jms.MessageListener;
17 import javax.jms.ServerSession;
18 import javax.jms.ServerSessionPool;
19 import javax.jms.Session;
20
21
22
23
24
25
26
27
28 public class DefaultServerSessionPool implements ServerSessionPool {
29
30
31 private LinkedList list = new LinkedList();
32
33 private SessionFactory sessionFactory;
34
35 private MessageListener listener;
36
37 private long timeout = 5000;
38
39 public DefaultServerSessionPool() {
40 }
41
42 public DefaultServerSessionPool(SessionFactory sessionFactory, MessageListener listener, int numberOfServerSessions) throws JMSException {
43 this.sessionFactory = sessionFactory;
44 this.listener = listener;
45
46 for ( int i = 0; i < numberOfServerSessions; i++ ) {
47 list.add( createServerSession() );
48 }
49 }
50
51
52
53
54
55
56
57
58 public synchronized ServerSession getServerSession() throws JMSException {
59
60 while (list.isEmpty() ) {
61 try {
62 wait( timeout );
63 }
64 catch(InterruptedException ex) {
65
66 }
67 }
68 return (ServerSession) list.removeFirst();
69 }
70
71 public synchronized void putServerSession(ServerSession serverSession) {
72 list.addLast(serverSession);
73 notify();
74 }
75
76
77
78 protected ServerSession createServerSession() throws JMSException {
79 Session session = sessionFactory.createSession();
80 final DefaultServerSession serverSession = new DefaultServerSession(session);
81 session.setMessageListener(
82 new MessageListener() {
83 public void onMessage(Message message) {
84 try {
85 listener.onMessage(message);
86 }
87 finally {
88
89 putServerSession( serverSession );
90 }
91 }
92 }
93 );
94 return serverSession;
95 }
96 }
97