use of org.apache.openejb.assembler.classic.Assembler in project tomee by apache.
the class ScheduleTest method testSchedule.
public void testSchedule() throws Exception {
System.setProperty(javax.naming.Context.INITIAL_CONTEXT_FACTORY, LocalInitialContextFactory.class.getName());
final Assembler assembler = new Assembler();
final ConfigurationFactory config = new ConfigurationFactory();
assembler.createProxyFactory(config.configureService(ProxyFactoryInfo.class));
assembler.createTransactionManager(config.configureService(TransactionServiceInfo.class));
assembler.createSecurityService(config.configureService(SecurityServiceInfo.class));
final EjbJar ejbJar = new EjbJar();
// Configure schedule by deployment plan
final StatelessBean subBeanA = new StatelessBean(SubBeanA.class);
final Timer subBeanATimer = new Timer();
subBeanATimer.setTimeoutMethod(new NamedMethod("subBeanA", "javax.ejb.Timer"));
final TimerSchedule timerScheduleA = new TimerSchedule();
timerScheduleA.setSecond("2");
timerScheduleA.setMinute("*");
timerScheduleA.setHour("*");
subBeanATimer.setSchedule(timerScheduleA);
subBeanATimer.setInfo("SubBeanAInfo");
subBeanA.getTimer().add(subBeanATimer);
ejbJar.addEnterpriseBean(subBeanA);
// Configure schedule by annotation
final StatelessBean subBeanB = new StatelessBean(SubBeanB.class);
ejbJar.addEnterpriseBean(subBeanB);
// Override aroundTimeout annotation by deployment plan
final StatelessBean subBeanC = new StatelessBean(SubBeanC.class);
final Timer subBeanCTimer = new Timer();
subBeanCTimer.setTimeoutMethod(new NamedMethod("subBeanC", "javax.ejb.Timer"));
final TimerSchedule timerScheduleC = new TimerSchedule();
timerScheduleC.setSecond("2");
timerScheduleC.setMinute("*");
timerScheduleC.setHour("*");
subBeanCTimer.setSchedule(timerScheduleC);
subBeanCTimer.setInfo("SubBeanCInfo");
subBeanC.getTimer().add(subBeanCTimer);
ejbJar.addEnterpriseBean(subBeanC);
final StatefulBean subBeanM = new StatefulBean(SubBeanM.class);
ejbJar.addEnterpriseBean(subBeanM);
final EjbJarInfo ejbJarInfo = config.configureApplication(ejbJar);
assembler.createApplication(ejbJarInfo);
countDownLatch.await(1L, TimeUnit.MINUTES);
// A better way for validation ?
int beforeAroundInvocationCount = 0;
int afterAroundInvocationCount = 0;
int timeoutInvocationCount = 0;
final int size;
synchronized (result) {
size = result.size();
for (final Call call : result) {
switch(call) {
case BEAN_BEFORE_AROUNDTIMEOUT:
beforeAroundInvocationCount++;
break;
case BEAN_AFTER_AROUNDTIMEOUT:
afterAroundInvocationCount++;
break;
case TIMEOUT:
timeoutInvocationCount++;
break;
}
}
}
assertEquals(3, beforeAroundInvocationCount);
assertEquals(3, afterAroundInvocationCount);
assertEquals(3, timeoutInvocationCount);
assertEquals(9, size);
}
use of org.apache.openejb.assembler.classic.Assembler in project tomee by apache.
the class StatelessInvocationStatsTest method testInvocation.
/**
* @throws Exception On error
*/
@Test
public void testInvocation() throws Exception {
System.setProperty(javax.naming.Context.INITIAL_CONTEXT_FACTORY, OpenEJBInitialContextFactory.class.getName());
final ConfigurationFactory config = new ConfigurationFactory();
final Assembler assembler = new Assembler();
assembler.createTransactionManager(config.configureService(TransactionServiceInfo.class));
assembler.createSecurityService(config.configureService(SecurityServiceInfo.class));
// containers
final StatelessSessionContainerInfo statelessContainerInfo = config.configureService(StatelessSessionContainerInfo.class);
statelessContainerInfo.properties.setProperty("AccessTimeout", "0");
statelessContainerInfo.properties.setProperty("MaxSize", "2");
statelessContainerInfo.properties.setProperty("MinSize", "0");
statelessContainerInfo.properties.setProperty("StrictPooling", "true");
statelessContainerInfo.properties.setProperty("IdleTimeout", "0");
assembler.createContainer(statelessContainerInfo);
// Setup the descriptor information
CounterBean.instances.set(0);
final EjbJar ejbJar = new EjbJar("StatsInvocModule");
ejbJar.addEnterpriseBean(new StatelessBean(CounterBean.class));
assembler.createApplication(config.configureApplication(ejbJar));
final javax.naming.Context context = new InitialContext();
final CounterBean bean = (CounterBean) context.lookup("CounterBeanLocalBean");
// Invoke
bean.waitSecs();
final MBeanServer server = ManagementFactory.getPlatformMBeanServer();
final ObjectName invocationsName = new ObjectName("openejb.management:J2EEServer=openejb,J2EEApplication=<empty>,EJBModule=StatsInvocModule,StatelessSessionBean=CounterBean," + "j2eeType=Invocations,name=CounterBean");
// Grab the mbeanInfo and check the expected attributes exist and have the correct return types and parameters
final MBeanInfo invocationsMBeanInfo = server.getMBeanInfo(invocationsName);
for (final MBeanAttributeInfo info : invocationsMBeanInfo.getAttributes()) {
// System.out.println("//" + info.getName() + " " + server.getAttribute(invocationsName, info.getName()));
if (info.getName().equals("waitSecs().GeometricMean") || info.getName().equals("waitSecs().Max") || info.getName().equals("waitSecs().Mean") || info.getName().equals("waitSecs().Min") || info.getName().equals("waitSecs().Percentile01") || info.getName().equals("waitSecs().Percentile10") || info.getName().equals("waitSecs().Percentile25") || info.getName().equals("waitSecs().Percentile50") || info.getName().equals("waitSecs().Percentile75") || info.getName().equals("waitSecs().Percentile90") || info.getName().equals("waitSecs().Percentile99") || info.getName().equals("waitSecs().Sum")) {
final Double actual = (Double) (server.getAttribute(invocationsName, info.getName()));
Assert.assertTrue("Expected: " + actual + " >= 999", actual >= 999);
}
}
ejbJar.removeEnterpriseBean("StatsInvocModule");
}
use of org.apache.openejb.assembler.classic.Assembler in project tomee by apache.
the class StatelessInvocationStatsTest method testBasic.
/**
* This whole method is a template, feel free to split it anyway you like
* Fine to have one big
*
* @throws Exception On error
*/
@Test
public void testBasic() throws Exception {
// some pre-load to avoid to load the class lazily with the first invocation
new CounterBean().red();
new CounterBean().blue();
new CounterBean().green();
// end preload
System.setProperty(javax.naming.Context.INITIAL_CONTEXT_FACTORY, OpenEJBInitialContextFactory.class.getName());
final ConfigurationFactory config = new ConfigurationFactory();
final Assembler assembler = new Assembler();
assembler.createTransactionManager(config.configureService(TransactionServiceInfo.class));
assembler.createSecurityService(config.configureService(SecurityServiceInfo.class));
// containers
final StatelessSessionContainerInfo statelessContainerInfo = config.configureService(StatelessSessionContainerInfo.class);
statelessContainerInfo.properties.setProperty("AccessTimeout", "100");
statelessContainerInfo.properties.setProperty("MaxSize", "15");
statelessContainerInfo.properties.setProperty("MinSize", "3");
statelessContainerInfo.properties.setProperty("StrictPooling", "true");
assembler.createContainer(statelessContainerInfo);
// Setup the descriptor information
CounterBean.instances.set(0);
final EjbJar ejbJar = new EjbJar("StatsModule");
ejbJar.addEnterpriseBean(new StatelessBean(CounterBean.class));
assembler.createApplication(config.configureApplication(ejbJar));
final javax.naming.Context context = new InitialContext();
final CounterBean bean = (CounterBean) context.lookup("CounterBeanLocalBean");
// Invoke each method once
bean.red();
bean.green();
bean.blue();
final MBeanServer server = LocalMBeanServer.get();
final ObjectName invocationsName = new ObjectName("openejb.management:J2EEServer=openejb,J2EEApplication=<empty>,EJBModule=StatsModule,StatelessSessionBean=CounterBean," + "j2eeType=Invocations,name=CounterBean");
// Grab the mbeanInfo and check the expected attributes exist and have the correct return types and parameters
/*
* Invocation MBeanInfo
*
*/
final List<MBeanAttributeInfo> expectedAttributes = new ArrayList<>();
expectedAttributes.add(new MBeanAttributeInfo("InvocationCount", "long", "", true, false, false));
expectedAttributes.add(new MBeanAttributeInfo("InvocationTime", "long", "", true, false, false));
expectedAttributes.add(new MBeanAttributeInfo("MonitoredMethods", "long", "", true, false, false));
final Map<String, Object> expectedValues = new TreeMap<>();
expectedValues.put("InvocationCount", (long) 6);
expectedValues.put("InvocationTime", (long) 0);
expectedValues.put("MonitoredMethods", (long) 4);
final String[] methods = { "PostConstruct()", "blue()", "green()", "red()" };
for (final String s : methods) {
expectedAttributes.add(new MBeanAttributeInfo(s + ".Count", "long", "", true, false, false));
expectedAttributes.add(new MBeanAttributeInfo(s + ".GeometricMean", "double", "", true, false, false));
expectedAttributes.add(new MBeanAttributeInfo(s + ".Kurtosis", "double", "", true, false, false));
expectedAttributes.add(new MBeanAttributeInfo(s + ".Max", "double", "", true, false, false));
expectedAttributes.add(new MBeanAttributeInfo(s + ".Mean", "double", "", true, false, false));
expectedAttributes.add(new MBeanAttributeInfo(s + ".Min", "double", "", true, false, false));
expectedAttributes.add(new MBeanAttributeInfo(s + ".Percentile01", "double", "", true, false, false));
expectedAttributes.add(new MBeanAttributeInfo(s + ".Percentile10", "double", "", true, false, false));
expectedAttributes.add(new MBeanAttributeInfo(s + ".Percentile25", "double", "", true, false, false));
expectedAttributes.add(new MBeanAttributeInfo(s + ".Percentile50", "double", "", true, false, false));
expectedAttributes.add(new MBeanAttributeInfo(s + ".Percentile75", "double", "", true, false, false));
expectedAttributes.add(new MBeanAttributeInfo(s + ".Percentile90", "double", "", true, false, false));
expectedAttributes.add(new MBeanAttributeInfo(s + ".Percentile99", "double", "", true, false, false));
expectedAttributes.add(new MBeanAttributeInfo(s + ".SampleSize", "int", "", true, false, false));
expectedAttributes.add(new MBeanAttributeInfo(s + ".Skewness", "double", "", true, false, false));
expectedAttributes.add(new MBeanAttributeInfo(s + ".StandardDeviation", "double", "", true, false, false));
expectedAttributes.add(new MBeanAttributeInfo(s + ".Sum", "double", "", true, false, false));
expectedAttributes.add(new MBeanAttributeInfo(s + ".Sumsq", "double", "", true, false, false));
expectedAttributes.add(new MBeanAttributeInfo(s + ".Variance", "double", "", true, false, false));
if (s.equals("PostConstruct()")) {
expectedValues.put(s + ".Count", (long) 3);
} else {
expectedValues.put(s + ".Count", (long) 1);
}
expectedValues.put(s + ".GeometricMean", 0.0);
expectedValues.put(s + ".Kurtosis", Double.NaN);
expectedValues.put(s + ".Max", 0.0);
expectedValues.put(s + ".Mean", 0.0);
expectedValues.put(s + ".Min", 0.0);
expectedValues.put(s + ".Percentile01", 0.0);
expectedValues.put(s + ".Percentile10", 0.0);
expectedValues.put(s + ".Percentile25", 0.0);
expectedValues.put(s + ".Percentile50", 0.0);
expectedValues.put(s + ".Percentile75", 0.0);
expectedValues.put(s + ".Percentile90", 0.0);
expectedValues.put(s + ".Percentile99", 0.0);
expectedValues.put(s + ".SampleSize", 2000);
expectedValues.put(s + ".Skewness", Double.NaN);
expectedValues.put(s + ".StandardDeviation", 0.0);
expectedValues.put(s + ".Sum", 0.0);
expectedValues.put(s + ".Sumsq", 0.0);
expectedValues.put(s + ".Variance", 0.0);
}
final List<MBeanAttributeInfo> actualAttributes = new ArrayList<>();
final Map<String, Object> actualValues = new TreeMap<>();
final MBeanInfo beanInfo = server.getMBeanInfo(invocationsName);
for (final MBeanAttributeInfo info : beanInfo.getAttributes()) {
actualAttributes.add(info);
actualValues.put(info.getName(), server.getAttribute(invocationsName, info.getName()));
}
// Verify invocation attributes and values
Assert.assertEquals(expectedAttributes, actualAttributes);
boolean ok = true;
for (final Map.Entry<String, Object> entry : actualValues.entrySet()) {
final Number value = (Number) expectedValues.get(entry.getKey());
final Number real = (Number) actualValues.get(entry.getKey());
if (!value.equals(real)) {
// tolerating a 1 wide range
Logger.getLogger(StatelessInvocationStatsTest.class.getName()).log(Level.WARNING, "Test tolerance: " + entry.getKey() + " => " + entry.getValue() + "/" + expectedValues.get(entry.getKey()));
final Double abs = Math.abs(real.doubleValue() - value.doubleValue());
if (abs.intValue() > 1) {
ok = false;
}
}
}
Assert.assertTrue("Expected status to be true, but was: " + ok, ok);
// Grab invocation mbean operations
final MBeanParameterInfo[] invocationParameters1 = { new MBeanParameterInfo("excludeRegex", "java.lang.String", "\"\""), new MBeanParameterInfo("includeRegex", "java.lang.String", "\"\"") };
final MBeanParameterInfo[] invocationParameters2 = { new MBeanParameterInfo("p1", "int", "") };
final List<MBeanOperationInfo> expectedOperations = new ArrayList<>();
expectedOperations.add(new MBeanOperationInfo("FilterAttributes", "Filters the attributes that show up in the MBeanInfo. The exclude is applied first, then any attributes that match the include are re-added. It may be required to " + "disconnect and reconnect the JMX console to force a refresh of the MBeanInfo", invocationParameters1, "void", MBeanOperationInfo.UNKNOWN));
for (final String s : methods) {
expectedOperations.add(new MBeanOperationInfo(s + ".setSampleSize", "", invocationParameters2, "void", MBeanOperationInfo.UNKNOWN));
expectedOperations.add(new MBeanOperationInfo(s + ".sortedValues", "", new MBeanParameterInfo[0], "[D", MBeanOperationInfo.UNKNOWN));
expectedOperations.add(new MBeanOperationInfo(s + ".values", "", new MBeanParameterInfo[0], "[D", MBeanOperationInfo.UNKNOWN));
}
final List<MBeanOperationInfo> actualOperations1 = new ArrayList<>();
actualOperations1.addAll(Arrays.asList(beanInfo.getOperations()));
// Verify invocation operation information and remove bean.
Assert.assertEquals(expectedOperations, actualOperations1);
}
use of org.apache.openejb.assembler.classic.Assembler in project tomee by apache.
the class StatelessPoolStatsTest method deploy.
private CounterBean deploy(final String moduleId, final Properties properties) throws Exception {
objectName = new ObjectName("openejb.management:J2EEServer=openejb,J2EEApplication=<empty>,EJBModule=" + moduleId + ",StatelessSessionBean=CounterBean,j2eeType=Pool,name=CounterBean");
System.setProperty(javax.naming.Context.INITIAL_CONTEXT_FACTORY, org.apache.openejb.core.LocalInitialContextFactory.class.getName());
final ConfigurationFactory config = new ConfigurationFactory();
final Assembler assembler = new Assembler();
assembler.createTransactionManager(config.configureService(TransactionServiceInfo.class));
assembler.createSecurityService(config.configureService(SecurityServiceInfo.class));
// containers
final StatelessSessionContainerInfo statelessContainerInfo = config.configureService(StatelessSessionContainerInfo.class);
statelessContainerInfo.properties.putAll(properties);
assembler.createContainer(statelessContainerInfo);
final EjbJar ejbJar = new EjbJar(moduleId);
ejbJar.addEnterpriseBean(new StatelessBean(CounterBean.class));
assembler.createApplication(config.configureApplication(ejbJar));
final javax.naming.Context context = new InitialContext();
return (CounterBean) context.lookup("CounterBeanLocalBean");
}
use of org.apache.openejb.assembler.classic.Assembler in project tomee by apache.
the class InjectionTest method setUp.
protected void setUp() throws Exception {
super.setUp();
System.setProperty(javax.naming.Context.INITIAL_CONTEXT_FACTORY, LocalInitialContextFactory.class.getName());
final ConfigurationFactory config = new ConfigurationFactory();
final Assembler assembler = new Assembler();
assembler.createProxyFactory(config.configureService(ProxyFactoryInfo.class));
assembler.createTransactionManager(config.configureService(TransactionServiceInfo.class));
assembler.createSecurityService(config.configureService(SecurityServiceInfo.class));
// containers
final StatelessSessionContainerInfo statelessContainerInfo = config.configureService(StatelessSessionContainerInfo.class);
statelessContainerInfo.properties.setProperty("TimeOut", "10");
statelessContainerInfo.properties.setProperty("MaxSize", "0");
statelessContainerInfo.properties.setProperty("StrictPooling", "false");
assembler.createContainer(statelessContainerInfo);
// Setup the descriptor information
final StatelessBean bean = new StatelessBean(WidgetBean.class);
bean.addBusinessLocal(Widget.class.getName());
bean.addBusinessRemote(RemoteWidget.class.getName());
final EjbJar ejbJar = new EjbJar();
ejbJar.addEnterpriseBean(bean);
bean.getEnvEntry().add(new EnvEntry(name("myString"), "java.lang.String", "2"));
bean.getEnvEntry().add(new EnvEntry(name("myDouble"), "java.lang.Double", "3.0"));
bean.getEnvEntry().add(new EnvEntry(name("myLong"), "java.lang.Long", "4"));
bean.getEnvEntry().add(new EnvEntry(name("myFloat"), "java.lang.Float", "5"));
bean.getEnvEntry().add(new EnvEntry(name("myInteger"), "java.lang.Integer", "6"));
bean.getEnvEntry().add(new EnvEntry(name("myShort"), "java.lang.Short", "7"));
bean.getEnvEntry().add(new EnvEntry(name("myBoolean"), "java.lang.Boolean", "false"));
bean.getEnvEntry().add(new EnvEntry(name("myByte"), "java.lang.Byte", "8"));
bean.getEnvEntry().add(new EnvEntry(name("myCharacter"), "java.lang.Character", "9"));
bean.getEnvEntry().add(new EnvEntry(name("myClass"), "java.lang.Class", Widget.class.getName()));
bean.getEnvEntry().add(new EnvEntry(name("myTimeUnit"), TimeUnit.class.getName(), "HOURS"));
final EnvEntry entry = new EnvEntry("injectedBoolean", (String) null, "true");
entry.getInjectionTarget().add((new InjectionTarget(WidgetBean.class.getName(), "injectedBoolean")));
bean.getEnvEntry().add(entry);
final ResourceEnvRef resourceEnvRef = new ResourceEnvRef("injectedContext", (String) null);
resourceEnvRef.getInjectionTarget().add((new InjectionTarget(WidgetBean.class.getName(), "injectedContext")));
bean.getResourceEnvRef().add(resourceEnvRef);
assembler.createApplication(config.configureApplication(ejbJar));
}
Aggregations