[jboss-user] [EJB/JBoss] - Emergency for help!

Arklis do-not-reply at jboss.com
Sun Oct 8 10:43:43 EDT 2006


Deveoplement environment: 
JBoss 3.2.5 + jre 1.4.2 + Ejb 2.0 + MySQL 5.0 

Issue: I wrote a BMP entitybean for query products by product nam, but I got the null and 0 values from the BMP entitybean with not error message in JBoss container. My code as follow. 

1.package com.jatosoft.ejb.bmps; 

import java.rmi.RemoteException; 

import javax.ejb.EJBObject; 

/** 
* @author Administrator 
* write a remote interface for client sides using 
*/ 
public interface Product extends EJBObject { 
public int getProductId()throws RemoteException; 
public double getPrice()throws RemoteException; 
public String getProductName()throws RemoteException; 
public String getDescription()throws RemoteException; 
} 

2.package com.jatosoft.ejb.bmps; 

import java.rmi.RemoteException; 
import java.util.Enumeration; 

import javax.ejb.CreateException; 
import javax.ejb.EJBHome; 
import javax.ejb.FinderException; 

/** 
* @author Administrator write a remote home interface to create an remote 
* interface for client sides call 
*/ 
public interface ProductHome extends EJBHome { 
public Product create(int productId, String productName, 
String description, double price) throws RemoteException, 
CreateException; 

public Product findByPrimaryKey(ProductPK key) throws RemoteException, 
FinderException; 

public Enumeration findByName(String name) throws RemoteException, 
FinderException; 
} 


3.package com.jatosoft.ejb.bmps; 

import java.io.Serializable; 

public class ProductPK implements Serializable { 
public String productId; 

public ProductPK() { 
// TODO Auto-generated constructor stub 
} 

public ProductPK(String productId) { 
this.productId = productId; 
} 

public boolean equals(Object o){ 
return ((ProductPK)o).productId.equals(productId); 
} 

public int hashCode(){ 
return productId.hashCode(); 
} 

public String toString(){ 
return productId; 
} 
} 

4. package com.jatosoft.ejb.bmps; 

import java.rmi.RemoteException; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.util.Enumeration; 
import java.util.Vector; 

import javax.ejb.CreateException; 
import javax.ejb.EJBException; 
import javax.ejb.EntityBean; 
import javax.ejb.EntityContext; 
import javax.ejb.FinderException; 
import javax.ejb.ObjectNotFoundException; 
import javax.ejb.RemoveException; 
import javax.naming.Context; 
import javax.naming.InitialContext; 
import javax.naming.NamingException; 

public class ProductBean implements EntityBean { 
private EntityContext ctx; 

int productId; 

String productName; 

String description; 

double price; 

public ProductPK ejbCreate(int productId, String productName, 
String description, double price) throws RemoteException, 
CreateException { 
this.dbgPrint("ejbCreate()"); 
//receive the parameter from client sides 
this.productId = productId; 
this.productName = productName; 
this.description = description; 
this.price = price; 
//connect with database 
Connection con = null; 
PreparedStatement ps = null; 
con = this.getConnection(); 
//insert values into the database 
String sql = "insert into products(productId,productName,description,price) values" 
+ "(?,?,?,?)"; 
try { 
ps = con.prepareStatement(sql); 
ps.setInt(1,this.productId); 
ps.setString(2,this.productName); 
ps.setString(3,this.description); 
ps.setDouble(4,this.price); 
ps.executeUpdate(); 

} catch (SQLException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
}finally{ 
if(ps != null){ 
try { 
ps.close(); 
if (con != null) 
con.close(); 
} catch (SQLException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} 
} 
} 

return new ProductPK(Integer.toString(productId)); 
} 

public void ejbPostCreate(int productId, String productName, 
String description, double price) throws RemoteException, 
CreateException { 
this.dbgPrint("ejbPostCreate()"); 
} 

/** 
* @param primaryKey 
* @return 
* @throws RemoteException 
* @throws FinderException 
* implement the findByPrimaryKey() method in the remote home interface 
*/ 
public ProductPK ejbFindByPrimaryKey(ProductPK primaryKey)throws RemoteException,FinderException{ 
this.dbgPrint("ejbFindByPrimaryKey()"); 
Connection con = null; 
PreparedStatement ps = null; 
ResultSet rs = null; 
String sql = "select productName from products where productId=?"; 
int productId = Integer.parseInt(primaryKey.productId); 
con = this.getConnection(); 
try { 
ps = con.prepareStatement(sql); 
ps.setInt(1, productId); 
rs = ps.executeQuery(); 

if (rs.next()){ 
rs.close(); 
ps.close(); 
con.close(); 
return primaryKey; 
} 
} catch (SQLException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
this.dbgPrint(e.toString()); 
}finally{ 
try{ 
if (rs != null) 
rs.close(); 
if (ps != null) 
ps.close(); 
if (con != null) 
con.close(); 

}catch(Exception e){ 
e.printStackTrace(); 
} 
} 
throw new ObjectNotFoundException(); 
} 

/** 
* @param name 
* @return 
* @throws RemoteException 
* @throws FinderException 
* implement findByName() method in the remote home interface 
*/ 
public Enumeration ejbFindByName(String name)throws RemoteException,FinderException{ 
this.dbgPrint("ejbFindByName()"); 
Vector products = new Vector(); 
Connection con = null; 
PreparedStatement ps = null; 
ResultSet rs = null; 
try{ 
String sql = "select productId from products where productName=?"; 
con = this.getConnection(); 
ps = con.prepareStatement(sql); 
ps.setString(1, name); 
rs = ps.executeQuery(); 
while(rs.next()){ 
int productId = rs.getInt(1); 
products.addElement(new ProductPK(Integer.toString(productId))); 
} 
}catch(Exception e){ 
this.dbgPrint(e.toString()); 
}finally{ 
try{ 
if (rs != null) 
rs.close(); 
if (ps != null) 
ps.close(); 
if (con != null) 
con.close(); 
}catch(Exception e){ 
this.dbgPrint(e.toString()); 
} 
} 
return products.elements(); 
} 


/** 
* @return 
* retrieve the connection with database 
*/ 
protected Connection getConnection(){ 
String dbUrl = null; 
String userName = null; 
String password = null; 
Context initialContext = null; 
Context environment = null; 
Connection connection = null ; 

try { 
initialContext = new InitialContext(); 
environment = (Context) initialContext.lookup("java:comp/env"); 
dbUrl = (String) environment.lookup("dbUrl"); 
userName = (String)environment.lookup("dbUserName"); 
password = (String)environment.lookup("dbPassword"); 
} catch (NamingException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
this.dbgPrint(e.toString()); 
} 
try { 
connection = DriverManager.getConnection(dbUrl,userName,password); 
} catch (SQLException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
this.dbgPrint(e.toString()); 
} 
return connection; 
} 

public void ejbActivate() throws EJBException, RemoteException { 
// TODO Auto-generated method stub 
dbgPrint("ejbActivate()"); 

} 

public void ejbLoad() throws EJBException, RemoteException { 
// TODO Auto-generated method stub 
dbgPrint("ejbLoad()"); 
Connection con = null; 
PreparedStatement ps = null; 
ResultSet rs = null; 
try{ 
String sql = "select productName,description, price from products where productId=?"; 
con = this.getConnection(); 
ps = con.prepareStatement(sql); 
ps.setInt(1, this.productId); 
rs = ps.executeQuery(); 

if (rs.next()){ 
this.productName = rs.getString(1); 
this.description = rs.getString(2); 
this.price = rs.getDouble(3); 
} 
}catch(Exception e){ 
this.dbgPrint(e.toString()); 
}finally{ 
try{ 
if (rs != null) 
rs.close(); 
if (ps != null) 
ps.close(); 
if (con != null) 
con.close(); 
}catch(Exception e){ 
this.dbgPrint(e.toString()); 
} 
} 
} 

public void ejbPassivate() throws EJBException, RemoteException { 
// TODO Auto-generated method stub 
dbgPrint("ejbPassivate()"); 
} 

public void ejbRemove() throws RemoveException, EJBException, 
RemoteException { 
// TODO Auto-generated method stub 
dbgPrint("ejbRemove()"); 
Connection con = null; 
PreparedStatement ps = null; 
try{ 
String sql = "delete from products where productId=?"; 
ProductPK key = (ProductPK)ctx.getPrimaryKey(); 
con = this.getConnection(); 
int productId = Integer.parseInt(key.productId); 
ps = con.prepareStatement(sql); 
ps.setInt(1, productId); 
ps.executeUpdate(); 
}catch(Exception e){ 
this.dbgPrint(e.toString()); 
}finally{ 
try{ 
if (ps != null) 
ps.close(); 
if (con != null) 
con.close(); 
}catch(Exception e){ 
this.dbgPrint(e.toString()); 
} 
} 
} 

public void ejbStore() throws EJBException, RemoteException { 
// TODO Auto-generated method stub 
Connection con = null; 
PreparedStatement ps = null; 
try{ 
String sql = "update products set productName=?, description=?, price=?" 
+ " where productId=?"; 
con = this.getConnection(); 
ps = con.prepareStatement(sql); 
ps.setString(1, this.productName); 
ps.setString(2, this.description); 
ps.setDouble(3,this.price); 
ps.setInt(4, productId); //don not forget this parameter??? 

ps.executeUpdate(); 
}catch(Exception e){ 
this.dbgPrint(e.toString()); 
}finally{ 
try{ 
if (ps != null) 
ps.close(); 
if (con != null) 
con.close(); 
}catch(Exception e){ 
this.dbgPrint(e.toString()); 
} 
} 
} 

public void setEntityContext(EntityContext arg0) throws EJBException, 
RemoteException { 
// TODO Auto-generated method stub 
this.ctx = arg0; 
dbgPrint("setEntityContext()"); 

} 

public void unsetEntityContext() throws EJBException, RemoteException { 
// TODO Auto-generated method stub 
this.ctx = null; 
dbgPrint("unsetEntityContext()"); 
} 

public String getDescription() { 
dbgPrint("getDescription()"); 
return description; 
} 

public double getPrice() { 
dbgPrint("getPrice()"); 
return price; 
} 

public int getProductId() { 
dbgPrint("getProductId()"); 
return productId; 
} 

public String getProductName() { 
dbgPrint("getProductName()"); 
return productName; 
} 

/** 
* @param temp 
* write a debug method for later use 
*/ 
private void dbgPrint(String temp) { 
System.out.println(temp); 
} 

public void setDescription(String description) { 
this.description = description; 
} 

public void setPrice(double price) { 
this.price = price; 
} 

public void setProductId(int productId) { 
this.productId = productId; 
} 

public void setProductName(String productName) { 
this.productName = productName; 
} 

} 

5. Client test code is as following 
package com.jatosoft.ejb.bmp.tester; 

import java.util.Enumeration; 
import java.util.Properties; 

import javax.naming.Context; 
import javax.naming.InitialContext; 
import javax.rmi.PortableRemoteObject; 

import com.jatosoft.ejb.bmps.Product; 
import com.jatosoft.ejb.bmps.ProductHome; 

/** 
* @author Administrator 
* write a bmp entitybean tester 
*/ 
public class BMPTester { 
public static void main(String[] args){ 
BMPTester tester = new BMPTester(); 
tester.testBMP(); 
} 

/** 
* write e method for tester ejbs 
*/ 
public void testBMP(){ 
//initial the jndi 
Properties properties = new Properties(); 
properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); 
properties.put(Context.PROVIDER_URL, "localhost:1099"); 

try{ 
//1. get the initial context 
InitialContext jndiContext = new InitialContext(properties); 
//2. get a reference to the bean 
Object ref = jndiContext.lookup("BMPProduct"); 
this.dbgPrint("Got reference"); 

//3. get a refernce from this to the bean's home interface 
ProductHome home = (ProductHome)PortableRemoteObject.narrow(ref,ProductHome.class); 
//4. create an interest object from the home interface 
// home.create(16, "Franklin Spring Water", "400ml", 2.25); 
// home.create(17, "Franklin Spring Water", "600ml", 3.25); 
// home.create(18,"Choco Bar", "Chocoloate Bar 200g", 2.96); 
// home.create(19,"Timtim Biscuit","Biscuit w. mint flavor, 300g",9.25); 

Product product = home.create(20,"Supermine","Instant Noodle",1.05); 
product.remove(); 

Enumeration enumeration = home.findByName("Franklin Spring Water"); 

while(enumeration.hasMoreElements()){ 
this.dbgPrint("The enumeration has more elements is " + enumeration.hasMoreElements()); 
product = (Product) enumeration.nextElement(); 
this.dbgPrint("The product is " + product); 

this.dbgPrint("Id: " + product.getProductId()); 
this.dbgPrint("Product Name: " + product.getProductName()); 
this.dbgPrint("Description: " + product.getDescription()); 
this.dbgPrint("Price: " + product.getPrice()); 
} 

}catch(Exception e){ 

} 
} 

/** 
* @param temp 
* write a debug method for later use 
*/ 
private void dbgPrint(String temp){ 
System.out.println(temp); 
} 
} 


What's wrong with my code. Please help me! 
Thank you! 

Arklis Zeng 


View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3976818#3976818

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3976818



More information about the jboss-user mailing list