preparedstatmentmessagehandler.java

来自「mysql集群」· Java 代码 · 共 62 行

JAVA
62
字号
package com.meidusa.amoeba.aladdin.handler;

import java.util.concurrent.CountDownLatch;

import com.meidusa.amoeba.aladdin.io.PreparedResultPacket;
import com.meidusa.amoeba.aladdin.io.ResultPacket;
import com.meidusa.amoeba.context.ProxyRuntimeContext;
import com.meidusa.amoeba.mysql.handler.PreparedStatmentInfo;
import com.meidusa.amoeba.mysql.net.MysqlClientConnection;
import com.meidusa.amoeba.net.DatabaseConnection;
import com.meidusa.amoeba.net.poolable.ObjectPool;
import com.meidusa.amoeba.net.poolable.PoolableObject;

/**
 * 
 * @author struct
 *
 */
public class PreparedStatmentMessageHandler extends CommandMessageHandler {

	protected static class PreparedQueryRunnable extends QueryRunnable{

		protected PreparedQueryRunnable(CountDownLatch latch, PoolableObject conn,
				String query, Object parameter, ResultPacket packet) {
			super(latch, conn, query, parameter, packet);
		}

		@Override
		protected void doRun(PoolableObject conn) {
			try{
				int count = ProxyRuntimeContext.getInstance().getQueryRouter().parseParameterCount((DatabaseConnection)this.source, query);
				PreparedResultPacket preparedPacket = (PreparedResultPacket)packet;
				PreparedStatmentInfo preparedInfo = (PreparedStatmentInfo)parameter;
				preparedPacket.setStatementId(preparedInfo.getStatmentId());
				preparedPacket.setParameterCount(count);
			}finally{
				latch.countDown();
			}
		}
	}
	
	public PreparedStatmentMessageHandler(MysqlClientConnection conn,
			PreparedStatmentInfo preparedInf, ObjectPool[] pools, long timeout) {
		super(conn,preparedInf.getPreparedStatment(),preparedInf,pools,timeout);
	}


	@Override
	protected QueryRunnable newQueryRunnable(CountDownLatch latch,
			PoolableObject conn, String query, Object parameter,
			ResultPacket packet) {
		return new PreparedQueryRunnable(latch,conn,query,parameter,packet);
	}

	@Override
	protected ResultPacket newResultPacket(String query) {
		PreparedResultPacket resultPacket = new PreparedResultPacket();
		return resultPacket;
	}

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?