Servet.Karabas

multi thread controller

  j-Platform/LPT

j-Platform'a veri aktarımlar için controller teknolojisini kullanıyoruz. Performansını arttırmak için multi thread yapıyı kullanabilirmiyiz?

Aktarım yapacağımız firma sayısı ve aktarım yapacağımız kayıt oldukça fazla. Mümkün ise multi thread olarak kayıtları yapmak daha sağlıklı olacaktır.

 


multi thread controller controller


Servet.Karabas

Aktarımların Controller alt yapısı ile yapıldığı fakat çağırımların multi thread işletildiği kod örneği aşağıda verilmiştir.

Server side

/**
 * testGLAccounts
 * minThread
 * maxThread
 * queueCapacity--> liste boyutu
 * waitWhenBlocked -- true,false
*/

public Object ControllerMultiThreadTest(IServerContext context){
	LbsControllerUtil.configureTaskQueue(3, 10, 30, true);
    try
    {
    	System.out.println("Single task started :" + JLbsDateUtil.dateToString(GregorianCalendar.getInstance()));
        GLControllerSample controllerSample = new GLControllerSample();
        GLControllerParams params = new GLControllerParams();
        params.m_Code = "CODE_SINGLE_TEST";
        params.m_Desc = "DESC_SINGLE_TEST";
        controllerSample.setParams(params);
        LbsControllerUtil.executeControllerTask(context, controllerSample);
    }
    catch (Exception e)
    {
    	System.err.println("Error singletask : " + e.getMessage());
    }
    finally
    {
    	System.out.println("Single task  finished :" + JLbsDateUtil.dateToString(GregorianCalendar.getInstance()));
    }
    try{
    	System.out.println("Multi task started :" + JLbsDateUtil.dateToString(GregorianCalendar.getInstance()));
        GLControllerParams params = new GLControllerParams();
        LbsQueuedTask queuedTask = new LbsQueuedTask(params, GLControllerSample.class)
        {
        	@Override
            public void initialize(ILbsControllerTask currentTask, ILbsTaskParams params)
            {
        		if (currentTask instanceof GLControllerSample)
                {
        			GLControllerSample glTask = (GLControllerSample) currentTask;
        			glTask.setParams((GLControllerParams) params);
                }
            }
        };
        LbsControllerUtil.executeQueuedTask(context, queuedTask);
        LbsControllerUtil.waitForQueuedTasks(params, true);
        System.out.println("Multi task end :" + JLbsDateUtil.dateToString(GregorianCalendar.getInstance()));
    }
    catch (Exception e)
    {
    	System.err.println("Error multitask : " + e.getMessage());
    }
    finally
    {
    	System.out.println("Multi task  finished :" + JLbsDateUtil.dateToString(GregorianCalendar.getInstance()));
    }
    return "dönüş değeri atanacak !";
}

 

Client Side

Aşağıdaki kod parçasındai, server side tanımlı metod çağrımı yapılmaktadır.callRemoteMethod("CSRV3", "ControllerMultiThreadTest", ...

 

public void ControllerMultiTaskTestonClick(JLbsXUIControlEvent event)
{
	try 
	{
		IClientContext context = event.getClientContext();
        RemoteMethodResponse MyResponse = context.callRemoteMethod("CSRV3", "ControllerMultiThreadTest", new Object[]{null});
        String MyResponseStr = MyResponse.Result.toString();
        JOptionPane.showMessageDialog(null,  MyResponseStr);
	} 
	catch (Exception e) 
	{
		e.printStackTrace();
        JOptionPane.showMessageDialog(null,  e.getMessage());
    }            
}      




 

NOT : LPT Projenizdeki Definitions dizininde Remoteservices te tanımın yapılmış olması gerekir.

 


30/03/15 10:00


Servet.Karabas

GL Controller Sample




30/03/15 10:02


Servet.Karabas

Controller Params




30/03/15 10:02

Cevap vermek için giriş yapmanız gerekmektedir.