}
public Object execute(Method m, Object[] args, EntityEnterpriseContext ctx) throws CreateException
{
Object pk;
PersistentContext pctx = (PersistentContext) ctx.getPersistenceContext();
if(ctx.getId() == null)
{
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
try
{
if(log.isDebugEnabled())
{
log.debug("executing sql: " + pkSql);
}
con = entityBridge.getDataSource().getConnection();
ps = con.prepareStatement(pkSql);
rs = ps.executeQuery();
if(!rs.next())
{
throw new CreateException("pk-sql " + pkSql + " returned no results!");
}
pk = pkField.loadArgumentResults(rs, 1);
pctx.setFieldValue(pkField.getRowIndex(), pk);
pk = entityBridge.extractPrimaryKeyFromInstance(ctx);
}
catch(SQLException e)
{
log.error("Failed to execute pk sql. error code: " + e.getErrorCode() + ", sql state: " + e.getSQLState(), e);
throw new CreateException("Failed to execute pk sql: " + e.getMessage() +
", error code: " + e.getErrorCode() + ", sql state: " + e.getSQLState());
}
finally
{
JDBCUtil.safeClose(rs);
JDBCUtil.safeClose(ps);
JDBCUtil.safeClose(con);
}
if(pk == null)
{
log.error("Primary key for created instance is null.");
throw new CreateException("Primary key for created instance is null.");
}
pctx.setPk(pk);
}
else
{
// insert-after-ejb-post-create
try
{
pctx.flush();
}
catch(SQLException e)
{
if("23000".equals(e.getSQLState()))
{