try catch finally 关闭问题

try {
			//链接
			connection = connectionFactory.createQueueConnection();
			connection.start();
			//会话
			session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
			//目的队列
			Queue q = session.createQueue(queueName);
			//向目的队列发送消息的生产者
			mp = session.createProducer(q);
			//持久化存储
			mp.setDeliveryMode(DeliveryMode.PERSISTENT);
			//消息对象
			ObjectMessage om = session.createObjectMessage(msg);   
			mp.send(om);
		} catch (JMSException e) {
			e.printStackTrace();
			return false;
		} finally {
			if (mp != null) {
				try {
					mp.close();
				} catch (JMSException e) {
					e.printStackTrace();
				}
			}
			if (session != null) {
				try {
					session.close();
				} catch (JMSException e) {
					e.printStackTrace();
				}
			}
			if (connection != null) {
				try {
					connection.close();
				} catch (JMSException e) {
					e.printStackTrace();
				}
			}
		}


例子mp、session和connection关闭分别用用不用try catch, 而不是一个try catch。这样当mp.close出现异常的时候的保证后面的关闭正常运行,但是如果全部都是在一个try catch中的时候,当mp关闭出现问题,后面的session和connection的关闭将不会执行。




版权声明:本文为u010457492原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。