使用jvm反射,通过类名取得一个处理数据客户端的实例。
- import java.io.ByteArrayOutputStream;
- import java.lang.reflect.InvocationTargetException;
- //import java.nio.ByteBuffer;
- /**
- * 处理接收的流数据,把获取的相关数据流内容,发送给客户程序处理。
- * @author guishuanglin 2008-11-3
- *
- */
- public class ProcessRequestData implements Runnable {
- //ByteArrayOutputStream
- private ConcurrentQueue dataQueue;
- private Class clientClass;
- private IProcessClientData clientObejct = null;
- private int requestCount;
- private String netAddress;
- /**
- * @param ss
- * @param requestNum
- */
- public ProcessRequestData(int requestCount,String netAddress,Class clientClass,ConcurrentQueue dataQueue) {
- this.clientClass = clientClass;
- this.dataQueue = dataQueue;
- this.requestCount= requestCount;
- this.netAddress = netAddress;
- clientObejct = this.CreateClientObject();
- }
- public void run() {
- try {
- // 把当前处理流数据的线程,压入线程并发队列,在线程队列中等待处理.
- if(clientObejct!=null ){
- clientObejct.ProcessStreamData(dataQueue,requestCount,netAddress);
- clientObejct.run();
- }else{
- System.out.println("Request["+requestCount+"],创建客户端数据流处理对象实例失败,系统将丢失当前的数据流.");
- }
- } finally{
- ReleaseResource();
- }
- }
- public void ReleaseResource() {
- if (dataQueue != null)
- dataQueue.clear();
- dataQueue = null;
- clientObejct = null;
- clientClass = null;
- }
- /**
- * 根据类名获取Class对象 Class c=Class.forName("java.lang.Integer");
- * 参数类型数组
- * Class[] parameterTypes={String.class};
- * 根据参数类型获取相应的构造函数
- * java.lang.reflect.Constructor
- * constructor=c.getConstructor(parameterTypes);
- * 参数数组
- * Object[] parameters={"1"};
- * 根据获取的构造函数和参数,创建实例 Object
- * o=constructor.newInstance(parameters);
- */
- private IProcessClientData CreateClientObject() {
- Class[] parameterTypes=new Class[]{};
- java.lang.reflect.Constructor constructor;
- Object[] parameters=new Object[]{};
- //ByteArrayOutputStream
- IProcessClientData o=null;
- try {
- constructor = clientClass.getConstructor(parameterTypes);
- o = (IProcessClientData)constructor.newInstance(parameters);
- }catch (SecurityException e) {
- e.printStackTrace();
- } catch (NoSuchMethodException e) {
- e.printStackTrace();
- } catch (IllegalArgumentException e1) {
- e1.printStackTrace();
- } catch (InstantiationException e1) {
- e1.printStackTrace();
- } catch (IllegalAccessException e1) {
- e1.printStackTrace();
- } catch (InvocationTargetException e1) {
- e1.printStackTrace();
- }
- return o;
- }
- }