Какой инструмент можно использовать для создания нескольких потоков в кодах EJB 2.1 для имитации загрузки пула соединений? - PullRequest
0 голосов
/ 19 июля 2011

Я пытаюсь создать несколько потоков в бине EJB 2.1 для проверки нагрузки на пул соединений. Есть ли способ сделать это или инструмент с открытым исходным кодом, я могу посмотреть?

Спасибо, если у кого-то есть опыт в этом.

Ответы [ 2 ]

1 голос
/ 21 июля 2011

Я использую Grinder для нагрузочного тестирования OpenEJB. Это довольно здорово.

Пример файла grinder.py. По сути это клиент:

from net.grinder.script.Grinder import grinder
from net.grinder.script import Test
from javax.naming import Context,InitialContext
from java.util import Properties

# A shorter alias for the grinder.logger.output() method.
log = grinder.logger.output

tests = {
    "ping" : Test(1, "ping"),
    "add" : Test(2, "add"),
    "sum" : Test(3, "sum"),
    }

# Wrap the log() method with our Test and call the result logWrapper.
# Calls to logWrapper() will be recorded and forwarded on to the real
# log() method.
#logWrapper = test1.wrap(log)

# Initial context lookup for EJB home.
p = Properties()
p[Context.INITIAL_CONTEXT_FACTORY] = "org.apache.openejb.client.RemoteInitialContextFactory"
p[Context.PROVIDER_URL] = "ejbd://127.0.0.1:4201";


loadBean = InitialContext(p).lookup("LoadBeanRemote")
pingBean = tests["ping"].wrap(loadBean)
addBean = tests["add"].wrap(loadBean)
sumBean = tests["sum"].wrap(loadBean)


# A TestRunner instance is created for each thread. It can be used to
# store thread-specific data.
class TestRunner:

    # This method is called for every run.
    def __call__(self):        
        pingBean.ping()
        addBean.add(3, 4)
        sumBean.sum([3, 4, 5, 6])

Обратите внимание, что файл grinder.py написан на jython, поэтому вы можете подключить любой java-клиент.

Вот пример файла grinder.properties:

grinder.script  grinder.py
grinder.processes 2
grinder.threads 20
grinder.runs 0
grinder.jvm.classpath=/Users/dblevins/work/grinder/openejb-3.1.4/lib/openejb-client-3.1.4.jar:\
  /Users/dblevins/work/grinder/openejb-3.1.4/lib/javaee-api-5.0-3.jar:\
  /Users/dblevins/work/grinder/openejb-3.1.4/lib/ejb31-experimental-api-3.1.4.jar:\
  /Users/dblevins/work/grinder/load-beans/target/load-beans-1.0.jar
grinder.logDirectory logs
grinder.numberOfOldLogs 0

Тогда LoadBean выглядит так (приложение, которое вы хотите загрузить в тест):

package org.superbiz.load;

import javax.ejb.*;
import java.lang.reflect.Method;

@Local
@Remote
@Singleton
@Lock(LockType.READ)
public class LoadBean implements Load {
    public void ping() {
        // do nothing
    }

    public int add(int a, int b) {
        return a + b;
    }

    public int sum(int... items) {
        int i = 0;
        for (int item : items) {
            i += item;
        }
        return i;
    }
}
1 голос
/ 19 июля 2011

Оберните ваши звонки в EJB в сервлете.Существует множество инструментов на разных языках для моделирования нагрузки на веб-приложения.

...