XUI Emulating Controllers üründe bulunan formlardaki işlevleri formlar açılmadan kullanabilmeyi hatta sunucu tarafında da kullanabilmeyi sağlamak için geliştirilmiş bir altyapıdır. Detaylı bilgi için XUI Emulating Controllers linkine tıklayınız..

Bu altyapı aynı zamanda multiThreading çalışmayı  da desteklemektedir.

Malzeme kartı ekleme işlemini multithreading controller ile gerçekleştirdiğimiz bir örneği inceleyeceğiz.

LPT projemizde,

 

CFMultiThreadControllerHandler sınıfında, client' dan sunucuya remote call yaparak işlemi sunucu tarafında başlatıyoruz.

 Click here to expand...
package com.EasyLPT_forCZRT.customization;

import com.lbs.transport.RemoteMethodResponse;
import com.lbs.xui.customization.JLbsXUIControlEvent;

public class CFMultiThreadControllerHandler {

	public CFMultiThreadControllerHandler() {
		// TODO Auto-generated constructor stub
	}

	public void onClickCallMultiThreadController(final JLbsXUIControlEvent event)
	{
		new Thread(new Runnable()
        {
           public void run()
           {
        	   try {
					RemoteMethodResponse result = event.getClientContext().callRemoteMethod("CRSRV", "callMultiThreadController", 
							new Object [] {null});
				} 
        	   catch (Exception e) 
        	   {
					e.printStackTrace();
				}
           }
        }).start();
	}

}

Sunucu tarafında çalışan CustomRemoteService sınıfında önce LbsControllerUtil.configureTaskQueue(3, 10, 30, true) minimum, max ve queucapacity değerlerini set ediyoruz.  LbsQueuedTask sınıfından bir instance oluşturulup j-guar’ dan generate ettiğimiz ControllerSampleItemCard sınıfını parametre olarak geçiyoruz.

 Click here to expand...
package com.EasyLPT_forCZRT.customization;

import java.util.GregorianCalendar;

import com.lbs.controllers.ILbsControllerTask;
import com.lbs.controllers.ILbsTaskParams;
import com.lbs.controllers.LbsControllerUtil;
import com.lbs.controllers.LbsQueuedTask;
import com.lbs.platform.interfaces.IServerContext;
import com.lbs.util.JLbsDateUtil;

public class CustomRemoteService {

	public void callMultiThreadController(IServerContext context)
	{
		ItemParams params = new ItemParams();
		try
		{
			LbsControllerUtil.configureTaskQueue(3, 10, 30, true);
			System.out.println("Multi task started :" + JLbsDateUtil.dateToString(GregorianCalendar.getInstance()));
			LbsQueuedTask queuedTask = new LbsQueuedTask(params, ControllerSampleItemCard.class)
			{
				@Override
				public void initialize(ILbsControllerTask currentTask, ILbsTaskParams params)
				{
					if (currentTask instanceof ControllerSampleItemCard)
					{
						ControllerSampleItemCard itemTask = (ControllerSampleItemCard) currentTask;
						itemTask.setParams((ItemParams) params);
					}
				}
			};
			
			LbsControllerUtil.executeQueuedTask(context, queuedTask);
			LbsControllerUtil.waitForQueuedTasks(params, true);

		}
		catch (Exception e)
		{
			System.err.println("Error multitask : " + e.getMessage());
		}
		finally
		{
			System.out.println("Multi task  finished :" + JLbsDateUtil.dateToString(GregorianCalendar.getInstance()));
		}
		
	}
}

 ItemParams sınıfında ise  "next" metodu üzerinden belirlediğimiz "m_Counter" sayısı kadar malzeme kartı ItemModel sınıfı kullanılarak hazırlanıyor ve multithread çalışacak şekilde execute ediliyor.

 Click here to expand...
package com.EasyLPT_forCZRT.customization;

import com.lbs.controllers.LbsTaskParamsBase;


public class ItemParams extends LbsTaskParamsBase
{

	private static final long serialVersionUID = 1L;
	
	protected int m_Counter = 0;
	protected static final ThreadLocal<ItemModel> ms_Item = new ThreadLocal<ItemModel>();
	
	@Override
	public boolean next()
	{
		synchronized (this) 
		{
			if (!m_HasNext)
				return false;
			
			m_Counter++;
			if (m_Counter > 10)
				m_HasNext = false;
		
		}
		prepareItem();
		return m_HasNext;
	}
	
	private void prepareItem()
	{
		ItemModel item = new ItemModel();
		item.setDescription("Description-"+ m_Counter);
		item.setDescription2("2Description-"+ m_Counter);
		item.setAuxCode("AuxCode-"+ m_Counter);
		item.setAuthCode("AuthCode-"+ m_Counter);
		ms_Item.set(item);
	}

	public void reset()
	{
		m_Counter = 0;
	}
	
	
	public ItemModel getItem()
	{
		return ms_Item.get();
	}

	@Override
	public boolean isDisableGridQueries()
	{
		return true;
	}

	
	@Override
	public boolean canCache()
	{
		return true;
	}
	
	
	@Override
	public boolean isFastDocumentNumbers()
	{
		return false;
	}
	
}

 

Projenin kaynak koduna MultiThreadControllerProject linkine tıklayarak ulaşabilirsiniz. 

Telif HakkıKullanım KoşullarıGizlilik
Copyright © 2018 Logo Yazılım