Problem deploying EJB to JBoss
chrismiles Jun 27, 2006 3:58 PMI have a test jar which I downloaded which when placed in the deploy directory echos the following onto the console:
20:21:14,574 INFO [EjbModule] Deploying TesterBean
20:21:15,265 INFO [ProxyFactory] Bound EJB Home 'TesterBean' to jndi 'test/Tester'
20:21:15,495 INFO [EJBDeployer] Deployed: file:/C:/jboss-4.0.4.GA/server/default/deploy/tester.jar
Yet when I place my own Bean within the directory there is stuff in the server log but no output on the console.
here is my ejb-jar.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN' 'http://java.sun.com/dtd/ejb-jar_2_0.dtd'> <ejb-jar> <display-name>AccountJAR</display-name> <enterprise-beans> <entity> <display-name>AccountBean</display-name> <ejb-name>AccountBean</ejb-name> <home>cakeinabox.beans.AccountEJB.AccountHome</home> <remote>cakeinabox.beans.AccountEJB.Account</remote> <ejb-class>cakeinabox.beans.AccountEJB.AccountBean</ejb-class> <persistence-type>Bean</persistence-type> <prim-key-class>java.lang.Integer</prim-key-class> <reentrant>false</reentrant> <security-identity> <use-caller-identity/> </security-identity> </entity> </enterprise-beans> </ejb-jar>
and my jboss.xml
<?xml version="1.0" encoding="UTF-8"?> <jboss> <enterprise-beans> <entity> <ejb-name>AccountBean</ejb-name> <jndi-name>ejb/AccountBean</jndi-name> </entity> </enterprise-beans> </jboss>
and then of course my Bean itself.
Account.java
package cakeinabox.beans.AccountEJB;
import javax.ejb.EJBObject;
import java.rmi.RemoteException;
public interface Account extends EJBObject
{
public void setId(int id);
public void setCredit(double credit);
public void setDiscount(double discount);
public void setOpenedDate(java.util.Date openedDate);
public void setClosedDate(java.util.Date closedDate);
public int getId();
public double getCredit();
public double getDiscount();
public java.util.Date getOpenedDate();
public java.util.Date getClosedDate();
}
AccountHome.java
package cakeinabox.beans.AccountEJB;
import java.util.Collection;
import java.rmi.RemoteException;
import javax.ejb.*;
public interface AccountHome extends EJBHome
{
public Account create(int id, double credit , double discount, java.util.Date openedDate, java.util.Date closedDate) throws CreateException, RemoteException;
public Collection findAll() throws FinderException, RemoteException;
public Account findByPrimaryKey(int primaryKey) throws FinderException, RemoteException;
}
AccountBean.java
package cakeinabox.beans.AccountEJB;
import javax.ejb.*;
import java.rmi.RemoteException;
import java.sql.*;
import javax.sql.*;
import java.util.*;
import javax.naming.*;
public class AccountBean implements EntityBean
{
private int m_id;
private double m_credit;
private double m_discount;
private java.util.Date m_openedDate;
private java.util.Date m_closedDate;
private Connection con;
private EntityContext m_context;
public AccountBean()
{
}
///////////////////////
// container methods //
///////////////////////
public int ejbCreate(int id, double credit , double discount, java.util.Date openedDate, java.util.Date closedDate) throws CreateException
{
try
{
insertRow(id, credit, discount, openedDate, closedDate);
}
catch (Exception ex)
{
throw new EJBException("ejbRemove: " + ex.getMessage());
}
this.m_id = id;
this.m_credit = credit;
this.m_discount = discount;
this.m_openedDate = openedDate;
this.m_openedDate = closedDate;
return id;
}
public void ejbPostCreate (int id, float credit , float discount, java.util.Date openedDate, java.util.Date closedDate) throws CreateException
{
}
public void ejbRemove()
{
try
{
deleteRow(m_id);
}
catch (Exception ex)
{
throw new EJBException("ejbRemove: " + ex.getMessage());
}
}
public void setEntityContext(EntityContext context)
{
this.m_context = context;
try
{
makeConnection();
}
catch (Exception ex)
{
throw new EJBException("Unable to connect to database. " + ex.getMessage());
}
}
public void unsetEntityContext()
{
m_context = null;
}
public void ejbActivate()
{
this.m_id = ((Integer)m_context.getPrimaryKey()).intValue();
}
public void ejbPassivate()
{
this.m_id = 0;
this.m_credit = 0;
this.m_discount = 0;
this.m_openedDate = null;
this.m_openedDate = null;
try
{
con.close();
}
catch (SQLException ex)
{
throw new EJBException("unsetEntityContext: " + ex.getMessage());
}
}
public void ejbLoad()
{
// load instance variables from database
try
{
loadRow();
}
catch (Exception ex)
{
throw new EJBException("ejbLoad: " + ex.getMessage());
}
}
public void ejbStore()
{
// save instance variables to database
try
{
storeRow();
}
catch (Exception ex)
{
throw new EJBException("ejbStore: " + ex.getMessage());
}
}
public Collection ejbFindAll() throws FinderException
{
Collection result;
try
{
result = selectAll();
}
catch (Exception ex)
{
throw new EJBException("ejbFindByPrimaryKey: " + ex.getMessage());
}
if(result.isEmpty()==false)
{
return result;
}
else
{
throw new ObjectNotFoundException("No rows found.");
}
}
public Integer ejbFindByPrimaryKey(int primaryKey) throws FinderException
{
boolean result;
try
{
result = selectByPrimaryKey(primaryKey);
}
catch (Exception ex)
{
throw new EJBException("ejbFindByPrimaryKey: " + ex.getMessage());
}
if(result==true)
{
return new Integer(primaryKey);
}
else
{
throw new ObjectNotFoundException("Row for id " + primaryKey + " not found.");
}
}
//////////////////////
// business methods //
//////////////////////
// set methods
public void setId(int id)
{
m_id = id;
}
public void setCredit(double credit)
{
m_credit = credit;
}
public void setDiscount(double discount)
{
m_discount = discount;
}
public void setOpenedDate(java.util.Date openedDate)
{
m_openedDate = openedDate;
}
public void setClosedDate(java.util.Date closedDate)
{
m_closedDate = closedDate;
}
//get methods
public int getId()
{
return m_id;
}
public double getCredit()
{
return m_credit;
}
public double getDiscount()
{
return m_discount;
}
public java.util.Date getOpenedDate()
{
return m_openedDate;
}
public java.util.Date getClosedDate()
{
return m_closedDate;
}
///////////////////////
// Database Routines //
///////////////////////
private void makeConnection() throws NamingException, SQLException
{
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e)
{
System.err.println("JdbcOdbc Bridge Driver not found!");
}
con = DriverManager.getConnection("jdbc:odbc:cakeinabox");
}
private boolean selectByPrimaryKey(int primaryKey) throws SQLException
{
String selectStatement = "select id from Account where id = ? ";
PreparedStatement prepStmt = con.prepareStatement(selectStatement);
prepStmt.setInt(1, primaryKey);
ResultSet rs = prepStmt.executeQuery();
boolean result = rs.next();
prepStmt.close();
return result;
}
private Collection selectAll() throws SQLException
{
String selectStatement = "select id from account";
PreparedStatement prepStmt = con.prepareStatement(selectStatement);
ResultSet rs = prepStmt.executeQuery();
ArrayList a = new ArrayList();
while (rs.next())
{
a.add(new Integer(rs.getInt(1)));
}
prepStmt.close();
return a;
}
private void insertRow (int id, double credit, double discount, java.util.Date openedDate, java.util.Date closedDate) throws SQLException
{
String insertStatement = "insert into Account values ( ? , ? , ? , ? , ?)";
PreparedStatement prepStmt =
con.prepareStatement(insertStatement);
prepStmt.setInt(1, id);
prepStmt.setDouble(2, credit);
prepStmt.setDouble(3, discount);
prepStmt.setDate(4, new java.sql.Date(openedDate.getTime()));
prepStmt.setDate(5, new java.sql.Date(closedDate.getTime()));
prepStmt.executeUpdate();
prepStmt.close();
}
private void deleteRow(int id) throws SQLException
{
String deleteStatement = "delete from Account where id = ? ";
PreparedStatement prepStmt = con.prepareStatement(deleteStatement);
prepStmt.setInt(1, id);
prepStmt.executeUpdate();
prepStmt.close();
}
private void loadRow() throws SQLException
{
String selectStatement = "select * from Account where id = ? ";
PreparedStatement prepStmt = con.prepareStatement(selectStatement);
prepStmt.setInt(1, this.m_id);
ResultSet rs = prepStmt.executeQuery();
if (rs.next())
{
this.m_id = rs.getInt(1);
this.m_credit = rs.getDouble(2);
this.m_discount = rs.getDouble(3);
this.m_openedDate = new java.util.Date(rs.getDate(4).getTime());
this.m_closedDate = new java.util.Date(rs.getDate(5).getTime());
prepStmt.close();
}
else
{
prepStmt.close();
throw new NoSuchEntityException("Row for id " + m_id + " not found in database.");
}
}
private void storeRow() throws SQLException
{
String updateStatement =
"update Account set " +
"credit = ? ," +
"discount = ? ," +
"openedDate = ? " +
"closedDate = ? " +
"where id = ?";
PreparedStatement prepStmt = con.prepareStatement(updateStatement);
prepStmt.setInt(1, m_id);
prepStmt.setDouble(2, m_credit);
prepStmt.setDouble(3, m_discount);
prepStmt.setDate(4, new java.sql.Date(m_openedDate.getTime()));
prepStmt.setDate(5, new java.sql.Date(m_closedDate.getTime()));
int rowCount = prepStmt.executeUpdate();
prepStmt.close();
if (rowCount == 0)
{
throw new EJBException("Storing row for id " + m_id + " failed.");
}
}
}
Here is what the server log says
2006-06-27 19:52:29,413 DEBUG [org.jboss.deployment.MainDeployer] Undeploying file:/C:/jboss-4.0.4.GA/server/default/deploy/AccountJAR.jar
2006-06-27 19:52:29,463 DEBUG [org.jboss.mx.loading.RepositoryClassLoader] Unregistering cl=org.jboss.mx.loading.UnifiedClassLoader3@158aeed{ url=file:/C:/jboss-4.0.4.GA/server/default/tmp/deploy/tmp41839AccountJAR.jar ,addedOrder=45}
2006-06-27 19:52:29,463 DEBUG [org.jboss.mx.loading.UnifiedLoaderRepository3] UnifiedLoaderRepository removed(true) org.jboss.mx.loading.UnifiedClassLoader3@158aeed{ url=file:/C:/jboss-4.0.4.GA/server/default/tmp/deploy/tmp41839AccountJAR.jar ,addedOrder=45}
2006-06-27 19:52:29,513 DEBUG [org.jboss.util.file.Files] Failed to delete dir: C:\jboss-4.0.4.GA\server\default\tmp\deploy\tmp41839AccountJAR.jar
2006-06-27 19:52:29,513 DEBUG [org.jboss.deployment.DeploymentInfo] Could not delete file:/C:/jboss-4.0.4.GA/server/default/tmp/deploy/tmp41839AccountJAR.jar restart will delete it
2006-06-27 19:52:29,513 DEBUG [org.jboss.deployment.MainDeployer] Undeployed file:/C:/jboss-4.0.4.GA/server/default/deploy/AccountJAR.jar
2006-06-27 19:52:39,538 DEBUG [org.jboss.deployment.MainDeployer] Starting deployment of package: file:/C:/jboss-4.0.4.GA/server/default/deploy/AccountJAR.jar
2006-06-27 19:52:39,558 DEBUG [org.jboss.deployment.MainDeployer] Starting deployment (init step) of package at: file:/C:/jboss-4.0.4.GA/server/default/deploy/AccountJAR.jar
2006-06-27 19:52:39,568 DEBUG [org.jboss.deployment.MainDeployer] Copying file:/C:/jboss-4.0.4.GA/server/default/deploy/AccountJAR.jar -> C:\jboss-4.0.4.GA\server\default\tmp\deploy\tmp41840AccountJAR.jar
2006-06-27 19:52:39,678 DEBUG [org.jboss.deployment.JARDeployer] No xml files found
2006-06-27 19:52:39,678 DEBUG [org.jboss.deployment.MainDeployer] using deployer org.jboss.deployment.JARDeployer@13f7281
2006-06-27 19:52:39,678 DEBUG [org.jboss.deployment.JARDeployer] looking for nested deployments in : file:/C:/jboss-4.0.4.GA/server/default/deploy/AccountJAR.jar
2006-06-27 19:52:39,688 DEBUG [org.jboss.deployment.DeploymentInfo] createLoaderRepository from config: LoaderRepositoryConfig(repositoryName: JMImplementation:service=LoaderRepository,name=Default, repositoryClassName: null, configParserClassName: null, repositoryConfig: null)
2006-06-27 19:52:39,688 DEBUG [org.jboss.mx.loading.RepositoryClassLoader] setRepository, repository=org.jboss.mx.loading.UnifiedLoaderRepository3@10a2d64, cl=org.jboss.mx.loading.UnifiedClassLoader3@144569b{ url=file:/C:/jboss-4.0.4.GA/server/default/tmp/deploy/tmp41840AccountJAR.jar ,addedOrder=0}
2006-06-27 19:52:39,688 DEBUG [org.jboss.mx.loading.RepositoryClassLoader] setRepository, repository=org.jboss.mx.loading.UnifiedLoaderRepository3@10a2d64, cl=org.jboss.mx.loading.UnifiedClassLoader3@144569b{ url=file:/C:/jboss-4.0.4.GA/server/default/tmp/deploy/tmp41840AccountJAR.jar ,addedOrder=0}
2006-06-27 19:52:39,688 DEBUG [org.jboss.mx.loading.UnifiedLoaderRepository3] Adding org.jboss.mx.loading.UnifiedClassLoader3@144569b{ url=file:/C:/jboss-4.0.4.GA/server/default/tmp/deploy/tmp41840AccountJAR.jar ,addedOrder=0}
2006-06-27 19:52:39,718 DEBUG [org.jboss.deployment.MainDeployer] found 0 subpackages of file:/C:/jboss-4.0.4.GA/server/default/deploy/AccountJAR.jar
2006-06-27 19:52:39,718 DEBUG [org.jboss.deployment.MainDeployer] Watching new file: file:/C:/jboss-4.0.4.GA/server/default/deploy/AccountJAR.jar
2006-06-27 19:52:39,718 DEBUG [org.jboss.deployment.MainDeployer] create step for deployment file:/C:/jboss-4.0.4.GA/server/default/deploy/AccountJAR.jar
2006-06-27 19:52:39,718 DEBUG [org.jboss.deployment.MainDeployer] Done with create step of deploying AccountJAR.jar
2006-06-27 19:52:39,718 DEBUG [org.jboss.deployment.MainDeployer] Begin deployment start file:/C:/jboss-4.0.4.GA/server/default/deploy/AccountJAR.jar
2006-06-27 19:52:39,718 DEBUG [org.jboss.deployment.MainDeployer] End deployment start on package: AccountJAR.jar
2006-06-27 19:52:39,718 DEBUG [org.jboss.deployment.MainDeployer] Deployed package: file:/C:/jboss-4.0.4.GA/server/default/deploy/AccountJAR.jar
2006-06-27 19:52:39,718 DEBUG [org.jboss.deployment.scanner.URLDeploymentScanner] Watch URL for: file:/C:/jboss-4.0.4.GA/server/default/deploy/AccountJAR.jar -> file:/C:/jboss-4.0.4.GA/server/default/deploy/AccountJAR.jar