test EJB using junit in Eclipse
simon555 Aug 21, 2003 10:23 AMThe following is my EJB's source codepackage
parts.ejb;
//import javax.ejb.EJBException;
import javax.ejb.EntityBean;
import javax.ejb.EntityContext;
/**
* @author BEE MICROSYSTEMS
*
* @ejb.bean name = "SequenceBean"
* description = "generation of sequence"
* display-name = "Sequence Bean"
* type = "CMP"
* reentrant = "false"
* transaction-type = "Container"
* cmp-version = "2.x"
* view-type = "local"
* local-jndi-name = "SequenceBeanHomeLocal"
*
* primkey-field = "name"
*
*
*@ejb.env-entry description = "the number of retriev every times"
* name = "blockSize"
* type = "java.lang.Integer"
* value = "10"
*
*@ejb.resource-ref res-ref-name = "jdbc/SequencePool"
* res-type = "javax.sql.DataSource"
* res-auth = "Container"
*
* @jboss.resource-ref res-ref-name = "jdbc/SequencePool"
*
* jndi-name = "java:/FirebirdDS"
*
*
*
*@jboss.persistence create-table = "true"
* datasource = "java:/FirebirdDS"
*
* table-name = "sequence_generate"
* remove-table = "true"
*
*
*
*
*
*
*
*
*
*
*
*
*/
public abstract class SequenceBean implements EntityBean {
private EntityContext ctx;
// private String name;
//private int index;
/**
*
*/
public SequenceBean() {
super();
}
public void ejbActivate(){
}
/**
* Deafault create method
* @return
* @ejb.create-method
*/
public String ejbCreate(String name){
this.setName(name);
this.setIndex(0);
return null;
}
/**
*
* @ejb.persistent-field
*
* @jboss.jdbc-type type = "VARCHAR"
* @jboss.sql-type type = "varchar(32)"
* @jboss.column-name name = "squ_name"
*
*
*
*
* */
public abstract String getName();
public abstract void setName(String name);
/**
* @ejb.persistent-field
*
* @jboss.jdbc-type type = "INTEGER"
* @jboss.sql-type type = "INTEGER(8)"
* @jboss.column-name name = "squ_index"
*
* */
public abstract int getIndex();
public abstract void setIndex(int index);
/**
* @param
* @return
* @ejb.interface-method view-type = "local"
* */
public int getValueAfterIncrementingBy(int blockSize)
{
this.setIndex(this.getIndex()+ blockSize);
return this.getIndex();
}
public void ejbLoad(){
}
public void ejbPassivate(){
}
public void ejbRemove(){
}
public void ejbStore(){
}
public void setEntityContext(EntityContext context){
ctx = context;
}
public void unsetEntityContext(){
}
}
The following is my testing code
package parts.tests;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import junit.swingui.TestRunner;
//import junit.textui.*;
import junit.framework.TestCase;
//import junit.framework.*;
//import java.util.Hashtable;;
import parts.partsInterface.*;
/**
* @author wangjh1
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
public class SequenceBeanTest extends TestCase {
private SequenceBeanLocal sequenceLocal;
private static SequenceBeanTest ts = new SequenceBeanTest();
//private HashMap evn = new HashMap();
public void getConnection(String name)
{
getInfo("Running" + this.toString());
//Hashtable evn = new Hashtable();
//Adding the initial context to the hashtabel
try
{
getInfo("Create an Initial context");
InitialContext ic = new InitialContext();
getInfo("Look for the EJB" + "SequenceBean");
SequenceBeanLocalHome localHomeInterface = (SequenceBeanLocalHome)ic.lookup("SequenceBeanHomeLocal");
getInfo("Create a new EJB instance");
sequenceLocal = localHomeInterface.create(name);
}
catch(NamingException e)
{
getInfo(e.toString());
//fail();
}
catch(Exception e)
{
getInfo("create exception");
getInfo(e.toString());
fail();
}
}
public void setUp() throws Exception
{
//String name = "orderTest";
getConnection("orderTest");
}
public void testGetValueAfterIncrementingBy()
{
try
{int result = sequenceLocal.getValueAfterIncrementingBy(10);
getInfo("-----------------------------");
getInfo("Success without exception");
assertEquals(10,result);
}
catch(Exception e)
{
// fail("Fail" + e);
System.out.println("error" + e);
}
}
public void getInfo(boolean msgObj)
{
System.out.println(msgObj);
}
public void getInfo(String msg)
{
System.out.println(msg);
}
public static void main(String args[])
{
if(args.length > 0)
{
if(args[0].equals("SWING"))
{
TestRunner.run(ts.getClass());
}
else
{
junit.textui.TestRunner.run(ts.getClass());
}
}
else
{
//formatting the output
System.out.println("--------------");
String className = ts.getClass().getName();
className = className.substring(className.lastIndexOf(".") + 1);
System.out.println("Test report of:" + className);
System.out.println("--------------------------");
TestRunner.run(ts.getClass());
}
}
}
My testing approach is:
1.package the SequenceBean.class into SequenceBean.jar.
2.put SequenceBean.jar into server\default\lib
3.start the server
4.run jUnit with Eclipse
Result of executed is below:
RunningtestGetValueAfterIncrementingBy(parts.tests.SequenceBeanTest)
Create an Initial context
Look for the EJBSequenceBean
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
errorjava.lang.NullPointerException
When I stoped the server,rerun the JUnit,result is the seem with above
My motive is want to test the EJB whether access data from database correct.but it seems like I make a mistake.
What is the correct approach?
Thanks.