User: oberg
Date: 00/05/19 00:11:54
Modified: src/main/org/jboss/ejb/plugins/jaws
JAWSPersistenceManager.java
Log:
Prefixed deployment classes with Jaws and jBoss
Added server-side JMX RMI Adaptor
Added shorthand JMX commands for deploy and stop of server
Added read-only functionality to JAWS
Revision Changes Path
1.3 +86 -46
jboss/src/main/org/jboss/ejb/plugins/jaws/JAWSPersistenceManager.java
Index: JAWSPersistenceManager.java
===================================================================
RCS file:
/products/cvs/ejboss/jboss/src/main/org/jboss/ejb/plugins/jaws/JAWSPersistenceManager.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- JAWSPersistenceManager.java 2000/04/26 06:41:33 1.2
+++ JAWSPersistenceManager.java 2000/05/19 07:11:54 1.3
@@ -62,10 +62,11 @@
import com.dreambean.ejx.ejb.EjbReference;
import org.jboss.ejb.plugins.jaws.deployment.JawsFileManager;
import org.jboss.ejb.plugins.jaws.deployment.JawsFileManagerFactory;
-import org.jboss.ejb.plugins.jaws.deployment.EjbJar;
-import org.jboss.ejb.plugins.jaws.deployment.EnterpriseBeans;
-import org.jboss.ejb.plugins.jaws.deployment.Entity;
-import org.jboss.ejb.plugins.jaws.deployment.CMPField;
+import org.jboss.ejb.plugins.jaws.deployment.JawsEjbJar;
+import org.jboss.ejb.plugins.jaws.deployment.JawsEnterpriseBeans;
+import org.jboss.ejb.plugins.jaws.deployment.JawsEjbReference;
+import org.jboss.ejb.plugins.jaws.deployment.JawsEntity;
+import org.jboss.ejb.plugins.jaws.deployment.JawsCMPField;
import org.jboss.ejb.plugins.jaws.deployment.Finder;
/**
@@ -78,7 +79,7 @@
*
* @see <related>
* @author Rickard �berg ([EMAIL PROTECTED])
- * @version $Revision: 1.2 $
+ * @version $Revision: 1.3 $
*/
public class JAWSPersistenceManager
implements EntityPersistenceManager
@@ -109,7 +110,7 @@
boolean compoundKey;
Class primaryKeyClass;
- Entity entity;
+ JawsEntity entity;
String dbName;
String createSql;
@@ -125,6 +126,9 @@
DataSource ds;
String url;
+
+ boolean readOnly;
+ long readOnlyTimeOut;
// Static --------------------------------------------------------
@@ -151,14 +155,14 @@
beanCtx.add(jfm);
// Load XML
- EjbJar jar = jfm.load(container.getApplication().getURL());
+ JawsEjbJar jar = jfm.load(container.getApplication().getURL());
// Extract meta-info
- entity =
(Entity)jar.getEnterpriseBeans().getEjb(container.getMetaData().getEjbName());
+ entity =
(JawsEntity)jar.getEnterpriseBeans().getEjb(container.getMetaData().getEjbName());
Iterator fields = entity.getCMPFields();
while (fields.hasNext())
{
- CMPField field = (CMPField)fields.next();
+ JawsCMPField field = (JawsCMPField)fields.next();
CMPFields.add(field);
cmpFields.add(container.getBeanClass().getField(field.getFieldName()));
// Identify JDBC-type
@@ -171,6 +175,10 @@
}
}
+ // Read-only?
+ readOnly = entity.getReadOnly();
+ readOnlyTimeOut = entity.getTimeOut();
+
// Identify pk
pkColumnList = "";
pkColumnWhereList = "";
@@ -188,7 +196,7 @@
pkFields.add(field);
for (int j = 0; j < CMPFields.size(); j++)
{
- CMPField cmpField = (CMPField)CMPFields.get(j);
+ JawsCMPField cmpField = (JawsCMPField)CMPFields.get(j);
if (cmpField.getFieldName().equals(field.getName()))
{
pkColumnList += ((i == 0)?"":",") + cmpField.getColumnName();
@@ -208,7 +216,7 @@
pkFields.add(container.getBeanClass().getField(entity.getPrimaryKeyField()));
for (int j = 0; j < CMPFields.size(); j++)
{
- CMPField cmpField = (CMPField)CMPFields.get(j);
+ JawsCMPField cmpField = (JawsCMPField)CMPFields.get(j);
if (cmpField.getFieldName().equals(entity.getPrimaryKeyField()))
{
pkColumnList = cmpField.getColumnName();
@@ -235,10 +243,10 @@
throws Exception
{
// Find datasource
- url = ((EnterpriseBeans)entity.getBeanContext()).getDataSource();
+ url = ((JawsEnterpriseBeans)entity.getBeanContext()).getDataSource();
if (!url.startsWith("jdbc:"))
{
- ds = (DataSource)new
InitialContext().lookup(((EnterpriseBeans)entity.getBeanContext()).getDataSource());
+ ds = (DataSource)new
InitialContext().lookup(((JawsEnterpriseBeans)entity.getBeanContext()).getDataSource());
}
// Create table if necessary
@@ -361,7 +369,7 @@
for (int i = 0; i < cmpFields.size(); i++)
{
Field field = (Field)cmpFields.get(i);
- CMPField cmpField = (CMPField)CMPFields.get(i);
+ JawsCMPField cmpField = (JawsCMPField)CMPFields.get(i);
if (cmpField.getJdbcType().equals("REF"))
{
idx =
setParameter(stmt,idx,((Integer)jdbcTypes.get(i)).intValue(),
field.get(ctx.getInstance()),refIdx++);
@@ -384,7 +392,15 @@
}
// Store state to be able to do tuned updates
- ctx.setPersistenceContext(getState(ctx));
+ PersistenceContext pCtx = new PersistenceContext();
+
+ // If read-only, set last read to now
+ if (readOnly) pCtx.lastRead = System.currentTimeMillis();
+
+ // Save initial state for tuned updates
+ pCtx.state = getState(ctx);
+
+ ctx.setPersistenceContext(pCtx);
// Invoke postCreate
postCreateMethod.invoke(ctx.getInstance(), args);
@@ -464,7 +480,7 @@
for (int i = 0; i < CMPFields.size(); i++)
{
- CMPField cmpField = (CMPField)CMPFields.get(i);
+ JawsCMPField cmpField = (JawsCMPField)CMPFields.get(i);
// Find field
if (cmpFieldName.equals(cmpField.getFieldName().toLowerCase()))
@@ -475,7 +491,7 @@
String sql = "SELECT "+pkColumnList+" FROM
"+entity.getTableName()+ " WHERE ";
// TODO: Fix this.. I mean it's already been computed
once..
- CMPField[] cmpFields = getPkColumns(cmpField);
+ JawsCMPField[] cmpFields = getPkColumns(cmpField);
for (int j = 0; j < cmpFields.length; j++)
{
sql += (j==0?"":" AND ") +
cmpField.getColumnName()+"_"+cmpFields[j].getColumnName()+"=?";
@@ -561,11 +577,24 @@
{
throw new ServerException("Activation failed", e);
}
+
+ // Set new persistence context
+ ctx.setPersistenceContext(new PersistenceContext());
}
public void loadEntity(EntityEnterpriseContext ctx)
throws RemoteException
{
+ // Check read only
+ if (readOnly)
+ {
+ PersistenceContext pCtx =
(PersistenceContext)ctx.getPersistenceContext();
+
+ // Timeout has expired for this entity?
+ if ((pCtx.lastRead + readOnlyTimeOut) >
System.currentTimeMillis())
+ return; // State is still "up to date"
+ }
+
Connection con = null;
PreparedStatement stmt = null;
ResultSet rs = null;
@@ -606,12 +635,12 @@
int refIdx = 0;
for (int i = 0; i < CMPFields.size(); i++)
{
- CMPField cmpField = (CMPField)CMPFields.get(i);
+ JawsCMPField cmpField = (JawsCMPField)CMPFields.get(i);
if (((Integer)jdbcTypes.get(i)).intValue() == Types.REF)
{
// Create pk
- CMPField[] pkFields = (CMPField[])ejbRefs.get(refIdx++);
- Entity referencedEntity = (Entity)pkFields[0].getBeanContext();
+ JawsCMPField[] pkFields = (JawsCMPField[])ejbRefs.get(refIdx++);
+ JawsEntity referencedEntity =
(JawsEntity)pkFields[0].getBeanContext();
Object pk;
if (referencedEntity.getPrimaryKeyField().equals(""))
{
@@ -664,7 +693,8 @@
}
// Store state to be able to do tuned updates
- ctx.setPersistenceContext(getState(ctx));
+ PersistenceContext pCtx =
(PersistenceContext)ctx.getPersistenceContext();
+ if (readOnly) pCtx.lastRead = System.currentTimeMillis();
// Call ejbLoad on bean instance
ejbLoad.invoke(ctx.getInstance(), new Object[0]);
@@ -684,6 +714,10 @@
public void storeEntity(EntityEnterpriseContext ctx)
throws RemoteException
{
+ // Check for read-only
+ if (readOnly)
+ return;
+
Connection con = null;
PreparedStatement stmt = null;
try
@@ -705,10 +739,10 @@
{
if (!currentState[i].equals(oldState[i]))
{
- CMPField[] pkFields = (CMPField[])ejbRefs.get(refIdx);
+ JawsCMPField[] pkFields = (JawsCMPField[])ejbRefs.get(refIdx);
for (int j = 0; j < pkFields.length; j++)
{
- updateSql += (dirty?",":"") +
((CMPField)CMPFields.get(i)).getColumnName()+"_"+pkFields[j].getColumnName()+"=?";
+ updateSql += (dirty?",":"") +
((JawsCMPField)CMPFields.get(i)).getColumnName()+"_"+pkFields[j].getColumnName()+"=?";
dirty = true;
}
dirtyField[i] = true;
@@ -718,7 +752,7 @@
{
if (!currentState[i].equals(oldState[i]))
{
- updateSql += (dirty?",":"") +
((CMPField)CMPFields.get(i)).getColumnName()+"=?";
+ updateSql += (dirty?",":"") +
((JawsCMPField)CMPFields.get(i)).getColumnName()+"=?";
dirty = true;
dirtyField[i] = true;
}
@@ -741,7 +775,7 @@
refIdx = 0;
for (int i = 0;i < dirtyFields.size(); i++)
{
- if (((CMPField)CMPFields.get(i)).getJdbcType().equals("REF"))
+ if (((JawsCMPField)CMPFields.get(i)).getJdbcType().equals("REF"))
{
if (dirtyField[i])
{
@@ -871,15 +905,15 @@
{
if (((Integer)jdbcTypes.get(i)).intValue() == Types.REF)
{
- CMPField[] pkFields = (CMPField[])ejbRefs.get(refIdx);
+ JawsCMPField[] pkFields = (JawsCMPField[])ejbRefs.get(refIdx);
for (int j = 0; j < pkFields.length; j++)
{
- createSql += (i==0 && j==0?"":",") +
((CMPField)CMPFields.get(i)).getColumnName()+"_"+pkFields[j].getColumnName()+"
"+pkFields[j].getSqlType();
+ createSql += (i==0 && j==0?"":",") +
((JawsCMPField)CMPFields.get(i)).getColumnName()+"_"+pkFields[j].getColumnName()+"
"+pkFields[j].getSqlType();
}
refIdx++;
} else
{
- CMPField field = (CMPField)CMPFields.get(i);
+ JawsCMPField field = (JawsCMPField)CMPFields.get(i);
createSql += (i==0?"":",") + field.getColumnName()+"
"+field.getSqlType();
}
}
@@ -897,16 +931,16 @@
{
if (((Integer)jdbcTypes.get(i)).intValue() == Types.REF)
{
- CMPField[] pkFields = (CMPField[])ejbRefs.get(refIdx);
+ JawsCMPField[] pkFields = (JawsCMPField[])ejbRefs.get(refIdx);
for (int j = 0; j < pkFields.length; j++)
{
- fieldSql += (fieldSql.equals("") ? "":",") +
((CMPField)CMPFields.get(i)).getColumnName()+"_"+pkFields[j].getColumnName();
+ fieldSql += (fieldSql.equals("") ? "":",") +
((JawsCMPField)CMPFields.get(i)).getColumnName()+"_"+pkFields[j].getColumnName();
valueSql += (valueSql.equals("") ? "?":",?");
}
refIdx++;
} else
{
- CMPField field = (CMPField)CMPFields.get(i);
+ JawsCMPField field = (JawsCMPField)CMPFields.get(i);
fieldSql += (fieldSql.equals("") ? "":",") + field.getColumnName();
valueSql += (valueSql.equals("") ? "?":",?");
}
@@ -922,15 +956,15 @@
{
if (((Integer)jdbcTypes.get(i)).intValue() == Types.REF)
{
- CMPField[] pkFields = (CMPField[])ejbRefs.get(refIdx);
+ JawsCMPField[] pkFields = (JawsCMPField[])ejbRefs.get(refIdx);
for (int j = 0; j < pkFields.length; j++)
{
- selectSql += (i==0 && j==0?"":",") +
((CMPField)CMPFields.get(i)).getColumnName()+"_"+pkFields[j].getColumnName();
+ selectSql += (i==0 && j==0?"":",") +
((JawsCMPField)CMPFields.get(i)).getColumnName()+"_"+pkFields[j].getColumnName();
}
refIdx++;
} else
{
- CMPField field = (CMPField)CMPFields.get(i);
+ JawsCMPField field = (JawsCMPField)CMPFields.get(i);
selectSql += (i==0?"":",") + field.getColumnName();
}
}
@@ -990,19 +1024,19 @@
}
}
- private CMPField[] getPkColumns(CMPField field)
+ private JawsCMPField[] getPkColumns(JawsCMPField field)
throws RemoteException
{
// Find reference
- Iterator enum = ((Entity)field.getBeanContext()).getEjbReferences();
+ Iterator enum = ((JawsEntity)field.getBeanContext()).getEjbReferences();
while (enum.hasNext())
{
- EjbReference ref = (EjbReference)enum.next();
+ JawsEjbReference ref = (JawsEjbReference)enum.next();
if (ref.getName().equals(field.getSqlType()))
{
// Find referenced entity
- EnterpriseBeans eb =
(EnterpriseBeans)field.getBeanContext().getBeanContext();
- Entity referencedEntity = (Entity)eb.getEjb(ref.getLink());
+ JawsEnterpriseBeans eb =
(JawsEnterpriseBeans)field.getBeanContext().getBeanContext();
+ JawsEntity referencedEntity = (JawsEntity)eb.getEjb(ref.getLink());
// Extract pk
String pk = referencedEntity.getPrimaryKeyField();
if (pk.equals(""))
@@ -1019,12 +1053,12 @@
Iterator fieldEnum = referencedEntity.getCMPFields();
while (fieldEnum.hasNext())
{
- CMPField pkField = (CMPField)fieldEnum.next();
+ JawsCMPField pkField = (JawsCMPField)fieldEnum.next();
if (pkField.getFieldName().equals(pkFields[i].getName()))
result.add(pkField);
}
}
- return (CMPField[])result.toArray(new CMPField[0]);
+ return (JawsCMPField[])result.toArray(new JawsCMPField[0]);
} catch (ClassNotFoundException e)
{
throw new ServerException("Could not load pk class of referenced
entity",e);
@@ -1035,11 +1069,11 @@
Iterator fieldEnum = referencedEntity.getCMPFields();
while (fieldEnum.hasNext())
{
- CMPField pkField = (CMPField)fieldEnum.next();
+ JawsCMPField pkField = (JawsCMPField)fieldEnum.next();
if (pkField.getFieldName().equals(pk))
- return new CMPField[] { pkField };
+ return new JawsCMPField[] { pkField };
}
- return new CMPField[0];
+ return new JawsCMPField[0];
}
}
}
@@ -1185,7 +1219,7 @@
case Types.REF:
{
// EJB-reference
- CMPField[] pkInfo = (CMPField[])ejbRefs.get(refIdx);
+ JawsCMPField[] pkInfo = (JawsCMPField[])ejbRefs.get(refIdx);
Object pk = null;
try
{
@@ -1195,7 +1229,7 @@
throw new SQLException("Could not extract primary key from EJB
reference:"+e);
}
- if
(!((Entity)pkInfo[0].getBeanContext()).getPrimaryKeyField().equals(""))
+ if
(!((JawsEntity)pkInfo[0].getBeanContext()).getPrimaryKeyField().equals(""))
{
// Primitive key
setParameter(stmt,idx,getJDBCType(pkInfo[0].getJdbcType()), pk,
refIdx);
@@ -1309,5 +1343,11 @@
return obj;
}
+ }
+
+ static class PersistenceContext
+ {
+ Object[] state;
+ long lastRead = -1;
}
}