blob: c6d60b9ddffb0d7d7165d79567e36c8fd361c7ff [file] [log] [blame]
/*
* Copyright (c) 2017, 2020 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0, which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* This Source Code may also be made available under the following Secondary
* Licenses when the conditions for such availability set forth in the
* Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
* version 2 with the GNU Classpath Exception, which is available at
* https://www.gnu.org/software/classpath/license.html.
*
* SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
*/
package com.sun.s1asdev.ejb.timer.timertests.client;
import java.io.Serializable;
import java.util.Date;
import jakarta.ejb.*;
import javax.naming.*;
import javax.rmi.PortableRemoteObject;
import com.sun.s1asdev.ejb.timer.timertests.Bar;
import com.sun.s1asdev.ejb.timer.timertests.BarHome;
import com.sun.s1asdev.ejb.timer.timertests.BarPrimaryKey;
import com.sun.s1asdev.ejb.timer.timertests.FooHome;
import com.sun.s1asdev.ejb.timer.timertests.Foo;
import com.sun.s1asdev.ejb.timer.timertests.TimerStuff;
import com.sun.s1asdev.ejb.timer.timertests.StatefulHome;
import com.sun.ejte.ccl.reporter.SimpleReporterAdapter;
public class Client {
private InitialContext context;
/**
private TopicConnection topicCon;
private TopicSession topicSession;
private TopicPublisher topicPublisher;
private TopicSubscriber topicSubscriber;
private QueueConnection queueCon;
private QueueSession queueSession;
private QueueSender queueSender;
*/
private static SimpleReporterAdapter stat =
new SimpleReporterAdapter("appserv-tests");
public static void main(String args[]) {
boolean doJms = false; // TODO (args.length == 1) && (args[0].equalsIgnoreCase("jms"));
stat.addDescription("ejb-timer-timertests");
new Client().doFooTest("ejbs/Foo_CMT", doJms);
new Client().doFooTest("ejbs/Foo_UNSPECIFIED_TX", doJms);
TimerStuff foo = new Client().doFooTest("ejbs/Foo_BMT", doJms);
/** TODO
new Client().doMessageDrivenTest("jms/TimerMDBQueue_CMT", foo, doJms);
new Client().doMessageDrivenTest("jms/TimerMDBQueue_BMT", foo, doJms);
**/
new Client().doStatefulTest("ejbs/Stateful_CMT", foo,doJms);
new Client().doStatefulTest("ejbs/Stateful_BMT", foo, doJms);
new Client().doBarTest("ejbtimer/Bar_CMT", doJms);
try {
((Foo) foo).remove();
} catch(Exception e) {
e.printStackTrace();
}
stat.printSummary("ejb-timer-timertests");
}
// when running this class through the appclient infrastructure
public Client() {
try {
context = new InitialContext();
} catch(Exception e) {
System.out.println("Client : new InitialContext() failed");
e.printStackTrace();
stat.addStatus("Client() ", stat.FAIL);
}
}
public void doMessageDrivenTest(String jndiName, TimerStuff foo,
boolean jms) {
/**
if( jms ) { return; }
try {
System.out.println("********PG-> in doMessageDrivenTest() for jndiName = " + jndiName );
setup();
System.out.println("********PG-> in doMessageDrivenTest() after setup");
Context ic = new InitialContext();
Queue messageDrivenDest = (Queue) ic.lookup("java:comp/env/" + jndiName);
System.out.println("Doing message driven tests for" + jndiName);
String testName;
int numTests = 6;
TimerHandle ths[] = new TimerHandle[numTests];
for(int i = 1; i < numTests; i++) {
testName = "test" + i;
System.out.println("Doing " + testName);
ths[i] = foo.createTimer(1000000, testName);
ObjectMessage objMsg = queueSession.createObjectMessage(ths[i]);
sendMsgs(messageDrivenDest, objMsg, 1);
}
long sleepTime = 30000;
System.out.println("Sleeping for " + sleepTime / 1000 + " seconds");
Thread.sleep(sleepTime);
// at this point, all foo timers should have been cancelled
// by the message bean.
foo.assertNoTimers();
System.out.println("Message-driven test " + jndiName + " passed!!");
stat.addStatus("Message-driven test: " + jndiName, stat.PASS);
} catch(Exception e) {
System.out.println("Message-driven test " + jndiName + " failed!!");
e.printStackTrace();
stat.addStatus("Message-driven test: " + jndiName, stat.FAIL);
} finally {
cleanup();
}
**/
}
public void doBarTest(String jndiName, boolean jms) {
try {
Object barObjref = context.lookup(jndiName);
System.out.println("doBarTest(): Doing bar timer test for " + jndiName);
BarHome barHome = (BarHome)PortableRemoteObject.narrow
(barObjref, BarHome.class);
System.out.println("doBarTest(): Bar lookup succeeded: " + jndiName );
Long id = new Long(1);
String value2 = id.toString();
TimerStuff bar;
try {
try {
System.out.println("Calling findbyprimarykey");
barHome.findByPrimaryKey(new BarPrimaryKey(id, value2));
} catch(FinderException fe) {
System.out.println("caught expected finder ex for " + id +
" " + fe);
}
bar = barHome.create(id, value2);
System.out.println("doBarTest(): Bar after create " );
} catch(CreateException ce) {
bar = barHome.findByPrimaryKey(new BarPrimaryKey(id, value2));
System.out.println("doBarTest(): Bar after find " );
}
if (jms) {
doJmsTest(bar);
} else {
doTest(bar);
((EJBObject)bar).remove();
doEntityTests(barHome);
}
System.out.println("doBarTest(): Bar : " + jndiName + " test passed!!");
stat.addStatus("Bar: " + jndiName, stat.PASS);
} catch(Exception e) {
System.out.println("Bar : " + jndiName + " test failed");
e.printStackTrace();
stat.addStatus("Bar: " + jndiName, stat.FAIL);
}
}
public void setup() throws Exception {
/**
//PG-> context = new InitialContext();
TopicConnectionFactory topicConFactory =
(TopicConnectionFactory) context.lookup
("java:comp/env/jms/MyTopicConnectionFactory");
System.out.println("********PG-> setup(): after lookup");
topicCon = topicConFactory.createTopicConnection();
System.out.println("********PG-> setup(): after createTopicConnection");
topicSession =
topicCon.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
System.out.println("********PG-> setup(): after createTopicSession");
// Producer will be specified when actual msg is published.
topicPublisher = topicSession.createPublisher(null);
System.out.println("********PG-> setup(): after createPublisher");
topicCon.start();
System.out.println("********PG-> setup(): after start");
QueueConnectionFactory queueConFactory =
(QueueConnectionFactory) context.lookup
("java:comp/env/jms/MyQueueConnectionFactory");
queueCon = queueConFactory.createQueueConnection();
queueSession = queueCon.createQueueSession
(false, Session.AUTO_ACKNOWLEDGE);
// Producer will be specified when actual msg is sent.
queueSender = queueSession.createSender(null);
queueCon.start();
**/
}
public void cleanup() {
/**
try {
if( topicCon != null ) {
topicCon.close();
}
if( queueCon != null ) {
queueCon.close();
}
} catch(Throwable t) {
t.printStackTrace();
}
**/
}
/**
public void publishMsgs(Topic topic, Message msg, int num)
throws JMSException {
for(int i = 0; i < num; i++) {
System.out.println("Publishing message " + i + " to " + topic);
topicPublisher.publish(topic, msg);
}
}
public void sendMsgs(Queue queue, Message msg, int num)
throws JMSException {
for(int i = 0; i < num; i++) {
System.out.println("Publishing message " + i + " to " + queue);
queueSender.send(queue, msg);
}
}
*/
public void doStatefulTest(String jndiName, TimerStuff foo, boolean jms) {
if( jms ) return;
try {
Context ic = new InitialContext();
Object sfObjref = ic.lookup("java:comp/env/" + jndiName);
System.out.println("Doing stateful timer test for " + jndiName);
StatefulHome sfHome = (StatefulHome)PortableRemoteObject.narrow
(sfObjref, StatefulHome.class);
TimerHandle th = foo.createTimer(10000000, "test1");
TimerStuff sf = sfHome.create(th);
Serializable info = sf.getInfo(th);
sf.getNextTimeoutTest2(5, th);
sf.getTimeRemainingTest2(5, th);
sf.cancelTimerAndRollback(th);
sf.cancelTimer(th);
((EJBObject)sf).remove();
System.out.println("Stateful : " + jndiName + " test passed!!");
stat.addStatus("Stateful: " + jndiName, stat.PASS);
} catch(Exception e) {
System.out.println("Stateful : " + jndiName + " test failed");
e.printStackTrace();
stat.addStatus("Stateful: " + jndiName, stat.FAIL);
}
}
public TimerStuff doFooTest(String jndiName, boolean jms) {
TimerStuff foo = null;
try {
Context ic = new InitialContext();
Object fooObjref = ic.lookup("java:comp/env/" + jndiName);
System.out.println("Doing foo timer test for " + jndiName);
FooHome fooHome = (FooHome)PortableRemoteObject.narrow
(fooObjref, FooHome.class);
foo = fooHome.create();
if( jms ) {
doJmsTest(foo);
} else {
doTest(foo);
}
System.out.println("Foo : " + jndiName + " test passed!!");
stat.addStatus("Foo: " + jndiName, stat.PASS);
} catch(Exception e) {
System.out.println("Foo : " + jndiName + " test failed");
e.printStackTrace();
stat.addStatus("Foo: " + jndiName, stat.FAIL);
}
return foo;
}
private void doJmsTest(TimerStuff timerStuff) throws Exception {
timerStuff.sendMessageAndCreateTimer();
timerStuff.recvMessageAndCreateTimer(true);
timerStuff.sendMessageAndCreateTimerAndRollback();
timerStuff.recvMessageAndCreateTimerAndRollback(false);
}
public void doTest(TimerStuff timerStuff) throws Exception {
System.out.println("doTest(): creating the runtimeExTimer handle");
TimerHandle runtimeExTimer =
timerStuff.createTimer(1, "RuntimeException");
System.out.println("doTest(): creating the timerhandle");
TimerHandle timerHandle = timerStuff.createTimer(1, 1);
//
System.out.println("doTest(): creating the timerhandle2");
TimerHandle timerHandle2 = timerStuff.createTimer(10000, 10000);
//
System.out.println("doTest(): creating the timerhandle3");
TimerHandle timerHandle3 = timerStuff.createTimer(new Date());
//
System.out.println("doTest(): creating the timerhandle4");
TimerHandle timerHandle4 = timerStuff.createTimer(new Date(new Date().getTime() + 2000));
//
System.out.println("doTest(): creating the timerhandle5");
TimerHandle timerHandle5 = timerStuff.createTimer(new Date(new Date().getTime() + 20000), 10000);
System.out.println("doTest(): creating the createTimerAndRollback");
timerStuff.createTimerAndRollback(20000);
//
System.out.println("doTest(): creating the createTimerAndCancel");
timerStuff.createTimerAndCancel(20000);
// @@@ reevaluate double cancel logic
//timerStuff.createTimerAndCancelAndCancel(20000);
//
System.out.println("doTest(): creating the createTimerAndCancelAndRollback");
timerStuff.createTimerAndCancelAndRollback(20000);
//
System.out.println("doTest(): creating the cancelTimer(timerhandle2)");
timerStuff.cancelTimer(timerHandle2);
System.out.println("doTest(): assertTimerNotactive(timerhandle2)");
timerStuff.assertTimerNotActive(timerHandle2);
//
timerStuff.cancelTimerAndRollback(timerHandle5);
// @@@ reevaluate double cancel logic
//timerStuff.cancelTimerAndCancelAndRollback(timerHandle6);
TimerHandle timerHandle7 =
timerStuff.createTimer(1, 1, "cancelTimer");
TimerHandle timerHandle8 =
timerStuff.createTimer(1, 1, "cancelTimerAndRollback");
TimerHandle timerHandle9 =
timerStuff.createTimer(1, "cancelTimerAndRollback");
TimerHandle timerHandle11 = timerStuff.getTimeRemainingTest1(20);
timerStuff.getTimeRemainingTest2(20, timerHandle11);
timerStuff.getTimeRemainingTest2(20, timerHandle);
TimerHandle timerHandle12 = timerStuff.getNextTimeoutTest1(20);
timerStuff.getNextTimeoutTest2(20, timerHandle12);
timerStuff.getNextTimeoutTest2(20, timerHandle);
System.out.println("cancelling timerHandle");
timerStuff.cancelTimer(timerHandle);
System.out.println("cancelling timerHandle5");
timerStuff.cancelTimer(timerHandle5);
System.out.println("cancelling timerHandle11");
timerStuff.cancelTimer(timerHandle11);
System.out.println("cancelling timerHandle12");
timerStuff.cancelTimer(timerHandle12);
// It's possible that the following timers haven't expired yet
try {
timerStuff.cancelTimerNoError(timerHandle8);
} catch(Exception e) {
e.printStackTrace();
}
try {
timerStuff.cancelTimerNoError(timerHandle3);
} catch(Exception e) {
e.printStackTrace();
}
try {
timerStuff.cancelTimerNoError(timerHandle4);
} catch(Exception e) {
e.printStackTrace();
}
try {
timerStuff.cancelTimerNoError(timerHandle7);
} catch(Exception e) {
e.printStackTrace();
}
try {
timerStuff.cancelTimerNoError(runtimeExTimer);
} catch(Exception e) {
e.printStackTrace();
}
timerStuff.assertNoTimers();
}
public void doEntityTests(BarHome barHome)
throws Exception {
TimerStuff bar1 = barHome.create(new Long(1), "1");
TimerHandle timerHandle1 = bar1.createTimer(100000000);
((EJBObject)bar1).remove();
barHome.newTimerAndRemoveBean(new Long(2), "2");
barHome.newTimerAndRemoveBeanAndRollback(new Long(3), "3");
Bar bar4 = barHome.create(new Long(4), "4");
TimerHandle timerHandle4 = bar4.createTimer(1, 1);
barHome.nixBeanAndRollback(bar4);
// Since bean and timer still exist after rollback, getInfo
// should work.
Serializable info = bar4.getInfo(timerHandle4);
System.out.println("after rollback, bar4 info = " + info);
Long bar5Id = new Long(5);
TimerStuff bar5 = barHome.create(bar5Id, "5");
TimerHandle timerHandle5 = bar5.createTimer(10000000);
info = bar5.getInfo(timerHandle5);
System.out.println("Info = " + info);
barHome.remove(((EJBObject)bar5).getPrimaryKey());
// At this point timer should not exist since we removed its
// timed object
try {
info = bar5.getInfoNoError(timerHandle5);
} catch(Exception e) {
System.out.println("Caught expected exception for bar5");
}
// Create entity with same pkey as before.
bar5 = barHome.create(bar5Id, "5");
// Timer should still *not* be accessible.
try {
info = bar5.getInfoNoError(timerHandle5);
} catch(Exception e) {
}
barHome.remove(new BarPrimaryKey(bar5Id, "5"));
bar4.cancelTimer(timerHandle4);
bar4.assertNoTimers();
((EJBObject) bar4).remove();
}
}