1 16 17 package org.springframework.jms.listener.serversession; 18 19 import javax.jms.JMSException ; 20 import javax.jms.ServerSession ; 21 import javax.jms.Session ; 22 23 import org.springframework.core.task.SimpleAsyncTaskExecutor; 24 import org.springframework.core.task.TaskExecutor; 25 import org.springframework.jms.support.JmsUtils; 26 import org.springframework.util.Assert; 27 import org.springframework.util.ClassUtils; 28 29 52 public class SimpleServerSessionFactory implements ServerSessionFactory { 53 54 57 public static final String DEFAULT_THREAD_NAME_PREFIX = 58 ClassUtils.getShortName(SimpleServerSessionFactory.class) + "-"; 59 60 61 private TaskExecutor taskExecutor = new SimpleAsyncTaskExecutor(DEFAULT_THREAD_NAME_PREFIX); 62 63 64 74 public void setTaskExecutor(TaskExecutor taskExecutor) { 75 Assert.notNull(taskExecutor, "taskExecutor is required"); 76 this.taskExecutor = taskExecutor; 77 } 78 79 82 protected TaskExecutor getTaskExecutor() { 83 return taskExecutor; 84 } 85 86 87 91 public ServerSession getServerSession(ListenerSessionManager sessionManager) throws JMSException { 92 return new SimpleServerSession(sessionManager); 93 } 94 95 99 public void close(ListenerSessionManager sessionManager) { 100 } 101 102 103 107 private class SimpleServerSession implements ServerSession { 108 109 private final ListenerSessionManager sessionManager; 110 111 private final Session session; 112 113 public SimpleServerSession(ListenerSessionManager sessionManager) throws JMSException { 114 this.sessionManager = sessionManager; 115 this.session = sessionManager.createListenerSession(); 116 } 117 118 public Session getSession() { 119 return session; 120 } 121 122 public void start() { 123 getTaskExecutor().execute(new Runnable () { 124 public void run() { 125 try { 126 sessionManager.executeListenerSession(session); 127 } 128 finally { 129 JmsUtils.closeSession(session); 130 } 131 } 132 }); 133 } 134 } 135 136 } 137 | Popular Tags |