|
Hi all,
Jboss is realy cool. But one thing that I tried did
not work. With BMP entity beans the binary version works when the create method
on the bean is called and does not work with find methods - OK. But the new CVS
version downloaded today with the same classes and xml descriptors - the find
methods work ok, but the create method does not anymore - it throws errors
shown bellow? And one more thing, if findByPimaryKey method is called on the
bean first and then the create method is called, my client application just
waits forever - cycles and there are now errors thrown by the container or the
client. I use oracle 8.1.6 and jdk1.3. Persistence is on the Oracle DB. The code
for my example is here:
Error thrown by the new CVS container with the create method:
at
oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:114)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:156) at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:219) at oracle.jdbc.driver.OracleStatement.prepare_for_new_get(OracleStatemen t.java:2285) at oracle.jdbc.driver.OracleStatement.getStringValue(OracleStatement.jav a:2430) at oracle.jdbc.driver.OracleResultSetImpl.getString(OracleResultSetImpl. java:285) at oracle.jdbc.driver.OracleResultSet.getString(OracleResultSet.java:130 8) at ejbShop.MerchantBean_BMP.getConnection(MerchantBean_BMP.java:140) at ejbShop.MerchantBean_BMP.ejbCreate(MerchantBean_BMP.java:77) at java.lang.reflect.Method.invoke(Native Method) at org.jboss.ejb.EntityContainer.createHome(EntityContainer.java:379) at java.lang.reflect.Method.invoke(Native Method) at org.jboss.ejb.EntityContainer$ContainerInterceptor.invokeHome(EntityC ontainer.java:512) at org.jboss.ejb.plugins.EntitySynchronizationInterceptor.invokeHome(Ent itySynchronizationInterceptor.java:147) at org.jboss.ejb.plugins.EntityInstanceInterceptor.invokeHome(EntityInst anceInterceptor.java:77) at org.jboss.ejb.plugins.TxInterceptor$RunInvokeHome.run(TxInterceptor.j ava:349) at org.jboss.ejb.plugins.TxInterceptor.runWithTransactions(TxInterceptor .java:223) at org.jboss.ejb.plugins.TxInterceptor.invokeHome(TxInterceptor.java:84) at
org.jboss.ejb.plugins.SecurityInterceptor.invokeHome(SecurityIntercep
tor.java:75) at org.jboss.ejb.plugins.LogInterceptor.invokeHome(LogInterceptor.java:1 01) at org.jboss.ejb.EntityContainer.invokeHome(EntityContainer.java:306) at org.jboss.ejb.plugins.jrmp.server.JRMPContainerInvoker.invokeHome(JRM PContainerInvoker.java:166) at org.jboss.ejb.plugins.jrmp.server.JRMPContainerInvoker.invokeHome(JRM PContainerInvoker.java:130) at java.lang.reflect.Method.invoke(Native Method) at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source) at sun.rmi.transport.Transport$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at sun.rmi.transport.Transport.serviceCall(Unknown Source) at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Sour ce) at java.lang.Thread.run(Unknown Source) at org.jboss.ejb.EntityContainer.createHome(EntityContainer.java:400) at java.lang.reflect.Method.invoke(Native Method) at org.jboss.ejb.EntityContainer$ContainerInterceptor.invokeHome(EntityC ontainer.java:512) at org.jboss.ejb.plugins.EntitySynchronizationInterceptor.invokeHome(Ent itySynchronizationInterceptor.java:147) at org.jboss.ejb.plugins.EntityInstanceInterceptor.invokeHome(EntityInst anceInterceptor.java:77) at org.jboss.ejb.plugins.TxInterceptor$RunInvokeHome.run(TxInterceptor.j ava:349) at org.jboss.ejb.plugins.TxInterceptor.runWithTransactions(TxInterceptor .java:223) at org.jboss.ejb.plugins.TxInterceptor.invokeHome(TxInterceptor.java:84) at
org.jboss.ejb.plugins.SecurityInterceptor.invokeHome(SecurityIntercep
tor.java:75) at org.jboss.ejb.plugins.LogInterceptor.invokeHome(LogInterceptor.java:1 01) at org.jboss.ejb.EntityContainer.invokeHome(EntityContainer.java:306) at org.jboss.ejb.plugins.jrmp.server.JRMPContainerInvoker.invokeHome(JRM PContainerInvoker.java:166) at org.jboss.ejb.plugins.jrmp.server.JRMPContainerInvoker.invokeHome(JRM PContainerInvoker.java:130) at java.lang.reflect.Method.invoke(Native Method) at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source) at sun.rmi.transport.Transport$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at sun.rmi.transport.Transport.serviceCall(Unknown Source) at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Sour ce) at java.lang.Thread.run(Unknown Source) [Merchant_BMP] java.sql.SQLException: Exhausted Resultset [Merchant_BMP] Create1.4 [Default] javax.ejb.CreateException: Create failed:java.lang.reflect.InvocationT argetException Error thrown by the client:
javax.ejb.CreateException: Create
failed:java.lang.reflect.InvocationTargetException
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown Source) at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source) at sun.rmi.server.UnicastRef.invoke(Unknown Source) at org.jboss.ejb.plugins.jrmp.server.JRMPContainerInvoker_Stub.invokeHome(Unknown Source) at org.jboss.ejb.plugins.jrmp.interfaces.HomeProxy.invoke(HomeProxy.java:79) at $Proxy0.create(Unknown Source) at ejbShop.ejbShopClient.<init>(ejbShopClient.java:21) at ejbShop.ejbShopClient.main(ejbShopClient.java:49) Remote interface:
package ejbShop;
import java.rmi.*;
import javax.ejb.*; public interface Merchant extends EJBObject
{
public abstract void setName(String name)
throws RemoteException;
public abstract String getName() throws
RemoteException;
public abstract void setUsername(String
username) throws RemoteException;
public abstract String getUsername() throws
RemoteException;
public abstract void setPassword(String
password) throws RemoteException;
public abstract String getPassword() throws
RemoteException;
public abstract void setEmail(String email)
throws RemoteException;
public abstract String getEmail() throws
RemoteException;
}
Home interface:
package ejbShop;
import java.rmi.*;
import javax.ejb.*; import java.util.*; public interface MerchantHome extends EJBHome
{
public Merchant create(Integer
merchantId)
throws RemoteException, CreateException; public Merchant findByPrimaryKey(Integer
merchantId)
throws RemoteException, FinderException; }
Bean class:
package ejbShop;
import java.rmi.*;
import javax.ejb.*; public class MerchantBean implements EntityBean
{
EntityContext entityContext; public int id;
public int shop_id; public String name; public String username; public String password; public int access_level; public String email; public MerchantBean() { } public Integer ejbCreate(Integer idObj)
throws RemoteException, CreateException {
this.id = idObj.intValue(); return null; } public void ejbPostCreate(Integer idObj)
throws RemoteException, CreateException {}
public void ejbActivate() throws
RemoteException {
} public void ejbLoad() throws RemoteException
{
} public void ejbPassivate() throws
RemoteException {
} public void ejbRemove() throws
RemoteException, RemoveException {
} public void ejbStore() throws
RemoteException {
} public void setName(String name)
{
this.name = name; } public String getName()
{
return name; } public void setUsername(String username)
{
this.username = username; } public String getUsername()
{
return username; } public void setPassword(String password)
{
this.password = password; } public String getPassword()
{
return password; } public void setEmail(String email)
{
this.email = email; } public String getEmail() { return email; } public void setEntityContext(EntityContext
context) throws RemoteException {
entityContext = context; } public void unsetEntityContext() throws
RemoteException {
entityContext = null; } } BMP bean class extends the upper bean
class:
package ejbShop;
import java.sql.*;
import javax.sql.*; import java.util.*; import javax.ejb.*; import java.rmi.*; import javax.naming.*; public class MerchantBean_BMP
extends MerchantBean { public void ejbLoad() throws RemoteException
{
Connection con=null; try { System.out.println("Load1"); Integer primaryKey = (Integer)entityContext.getPrimaryKey(); con = this.getConnection(); Statement sqlStmt = con.createStatement(); ResultSet results = sqlStmt.executeQuery("SELECT * FROM Merchant WHERE ID = " + primaryKey.intValue()); System.out.println("Load2"); if (results.next()) { // get the name information //from the Merchant table name = results.getString("name"); username = results.getString("username"); password = results.getString("password"); email = results.getString("email"); } } catch (SQLException sqle) { throw new EJBException(sqle); } finally { try { if (con!=null) con.close(); } catch (SQLException e) {throw new EJBException(e);} } } public void ejbStore() throws
RemoteException {
Connection con=null; System.out.println("Store1"); try
{
Integer primaryKey = (Integer)entityContext.getPrimaryKey(); con = this.getConnection(); PreparedStatement sqlPrep = con.prepareStatement( "UPDATE Merchant set " + "name = ?, username = ?, " + "password = ?, email = ? " + "WHERE id = ?"); sqlPrep.setString(1,name); sqlPrep.setString(2,username); sqlPrep.setString(3,password); sqlPrep.setString(4,email); sqlPrep.setInt(5,primaryKey.intValue()); sqlPrep.executeUpdate(); System.out.println("Store2"); } catch (SQLException sqle) { throw new EJBException(sqle); } finally { try { if (con!=null) con.close(); } catch (SQLException e) {throw new EJBException(e);} } } public Integer ejbCreate(Integer idObj)
throws RemoteException, CreateException {
this.id = idObj.intValue(); System.out.println("Create1"); Connection con=null; try { con = this.getConnection(); System.out.println("Create1.4"); Statement sqlStmt = con.createStatement(); String s="INSERT INTO Merchant (id) VALUES (" + id + ")"; System.out.println("Create1.5"+sqlStmt+" id "+id); System.out.println("Create1.6"+s); sqlStmt.executeUpdate(s); System.out.println("Create2"); return idObj; } catch(SQLException sqle) { sqle.printStackTrace(); throw new EJBException(sqle); } finally { try { if (con!=null) con.close(); } catch (SQLException e) { System.out.println("create"+e); throw new EJBException(e);} } } public void ejbRemove() throws
RemoteException, RemoveException {
Integer primaryKey = (Integer)entityContext.getPrimaryKey(); System.out.println("Remove1"); Connection con=null; try { con = this.getConnection(); Statement sqlStmt = con.createStatement(); sqlStmt.executeUpdate("DELETE FROM Merchant WHERE id = " + primaryKey.intValue()); System.out.println("Remove2"); } catch(SQLException sqle) { throw new EJBException(sqle); } finally { try { if (con!=null) con.close(); } catch (SQLException e) {throw new EJBException(e);} } } private Connection getConnection()
throws SQLException { try
{
System.out.println("GetConn1"); InitialContext jndiContext = new InitialContext(); DataSource source = (DataSource) jndiContext.lookup("Oracle"); Connection con=null; con = source.getConnection(); if (con!=null) System.out.println("Oracle je najden!"); Statement sqlStmt = con.createStatement(); ResultSet results = sqlStmt.executeQuery("SELECT * FROM Merchant WHERE ID = 1"); System.out.println("GetConn2"); results.next(); System.out.println(results.getString("name")); return con; } catch (Exception e) { e.printStackTrace(); return null; } }
public Integer ejbFindByPrimaryKey(Integer primaryKey) throws ObjectNotFoundException { Connection con=null; try { System.out.println("Find1"); con = this.getConnection(); Statement sqlStmt = con.createStatement(); ResultSet results = sqlStmt.executeQuery("SELECT * FROM Merchant " + " WHERE ID = " + primaryKey.intValue()); System.out.println("find metoda select stavek! " + primaryKey); if (results.next()) { System.out.println("Find objekt obstaja"); return primaryKey; } else throw new ObjectNotFoundException(); } catch (SQLException sqle) { throw new EJBException(sqle); } finally { try { if (con!=null) con.close(); } catch (SQLException e) {throw new EJBException(e);} } } } Thanks.
Primoz,
Gasper |
- RE: [jBoss-User] BMP problems in CVS version Primoz Furlan
- RE: [jBoss-User] BMP problems in CVS version marc fleury
- [jBoss-User] version confusion Julius
- RE: [jBoss-User] version confusion marc fleury
