[jboss-cvs] JBossAS SVN: r67395 - in trunk: server/src/main/org/jboss/ejb/plugins/cmp/jdbc/bridge and 2 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Fri Nov 23 05:44:39 EST 2007
Author: alex.loubyansky at jboss.com
Date: 2007-11-23 05:44:38 -0500 (Fri, 23 Nov 2007)
New Revision: 67395
Modified:
trunk/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCAbstractQueryCommand.java
trunk/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCDynamicQLQuery.java
trunk/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCEJBQLCompiler.java
trunk/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/SQLUtil.java
trunk/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/bridge/JDBCSelectorBridge.java
trunk/testsuite/src/main/org/jboss/test/cmp2/lob/Facade.java
trunk/testsuite/src/main/org/jboss/test/cmp2/lob/FacadeSessionBean.java
trunk/testsuite/src/main/org/jboss/test/cmp2/lob/GetSetObjectParameter.java
trunk/testsuite/src/main/org/jboss/test/cmp2/lob/LOB.java
trunk/testsuite/src/main/org/jboss/test/cmp2/lob/LOBBean.java
trunk/testsuite/src/main/org/jboss/test/cmp2/lob/LOBHome.java
trunk/testsuite/src/main/org/jboss/test/cmp2/lob/LOBUnitTestCase.java
trunk/testsuite/src/resources/cmp2/lob/META-INF/ejb-jar.xml
trunk/testsuite/src/resources/cmp2/lob/META-INF/jbosscmp-jdbc.xml
Log:
JBAS-4975
Modified: trunk/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCAbstractQueryCommand.java
===================================================================
--- trunk/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCAbstractQueryCommand.java 2007-11-23 10:12:01 UTC (rev 67394)
+++ trunk/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCAbstractQueryCommand.java 2007-11-23 10:44:38 UTC (rev 67395)
@@ -353,7 +353,9 @@
protected void setEagerLoadGroup(String eagerLoadGroup)
{
this.eagerLoadGroup = eagerLoadGroup;
- this.eagerLoadMask = selectEntity.getLoadGroupMask(eagerLoadGroup);
+ boolean[] originalMask = selectEntity.getLoadGroupMask(eagerLoadGroup);
+ this.eagerLoadMask = new boolean[originalMask.length];
+ System.arraycopy(originalMask, 0, eagerLoadMask, 0, eagerLoadMask.length);
}
protected String getEagerLoadGroup()
Modified: trunk/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCDynamicQLQuery.java
===================================================================
--- trunk/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCDynamicQLQuery.java 2007-11-23 10:12:01 UTC (rev 67394)
+++ trunk/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCDynamicQLQuery.java 2007-11-23 10:44:38 UTC (rev 67395)
@@ -141,6 +141,7 @@
if(selectEntity != null && readahead.isOnFind())
{
mask = selectEntity.getLoadGroupMask(readahead.getEagerLoadGroup());
+ boolean modifiedMask = false;
leftJoinCMRList = compiler.getLeftJoinCMRList();
// exclude non-searchable columns if distinct is used
@@ -151,6 +152,13 @@
{
if(mask[i] && !tableFields[i].getJDBCType().isSearchable())
{
+ if(!modifiedMask)
+ {
+ boolean[] original = mask;
+ mask = new boolean[original.length];
+ System.arraycopy(original, 0, mask, 0, mask.length);
+ modifiedMask = true;
+ }
mask[i] = false;
}
}
@@ -166,8 +174,9 @@
setParameterList(compiler.getInputParameters());
EntityContainer con = ((JDBCStoreManager)compiler.getStoreManager()).getContainer();
- factory = metadata.isResultTypeMappingLocal() ? (GenericEntityObjectFactory)con.getLocalProxyFactory() : con.getProxyFactory();
-
+ factory = metadata.isResultTypeMappingLocal() && con.getLocalHomeClass() != null ?
+ con.getLocalProxyFactory() : con.getProxyFactory();
+
return execute(
compiler.getSQL(),
parameters,
Modified: trunk/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCEJBQLCompiler.java
===================================================================
--- trunk/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCEJBQLCompiler.java 2007-11-23 10:12:01 UTC (rev 67394)
+++ trunk/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCEJBQLCompiler.java 2007-11-23 10:44:38 UTC (rev 67395)
@@ -1041,7 +1041,7 @@
selectManager = (JDBCStoreManager) selectEntity.getManager();
selectObject = selectEntity;
setTypeFactory(selectManager.getJDBCTypeFactory());
- selectEntity(path, buf);
+ selectEntity(path, node.distinct, buf);
}
}
else
@@ -1563,7 +1563,7 @@
{
countCompositePk = true;
forceDistinct = node.distinct.length() > 0;
- selectEntity(cntPath, buf);
+ selectEntity(cntPath, forceDistinct, buf);
return buf;
}
else
@@ -1863,7 +1863,7 @@
return selected;
}
- private void selectEntity(ASTPath path, StringBuffer buf)
+ private void selectEntity(ASTPath path, boolean distinct, StringBuffer buf)
{
JDBCEntityBridge selectEntity = (JDBCEntityBridge) path.getEntity();
@@ -1879,7 +1879,10 @@
{
String eagerLoadGroupName = readAhead.getEagerLoadGroup();
boolean[] loadGroupMask = selectEntity.getLoadGroupMask(eagerLoadGroupName);
- SQLUtil.appendColumnNamesClause(selectEntity.getTableFields(), loadGroupMask, selectAlias, columnNamesClause);
+ if(distinct)
+ SQLUtil.appendSearchableColumnNamesClause(selectEntity.getTableFields(), loadGroupMask, selectAlias, columnNamesClause);
+ else
+ SQLUtil.appendColumnNamesClause(selectEntity.getTableFields(), loadGroupMask, selectAlias, columnNamesClause);
try
{
Modified: trunk/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/SQLUtil.java
===================================================================
--- trunk/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/SQLUtil.java 2007-11-23 10:12:01 UTC (rev 67394)
+++ trunk/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/SQLUtil.java 2007-11-23 10:44:38 UTC (rev 67395)
@@ -432,6 +432,26 @@
return buf;
}
+ public static StringBuffer appendSearchableColumnNamesClause(JDBCFieldBridge[] fields,
+ boolean[] mask,
+ String identifier,
+ StringBuffer buf)
+ {
+ for(int i = 0; i < fields.length; ++i)
+ {
+ if(mask[i])
+ {
+ JDBCType type = getJDBCType(fields[i]);
+ if(type != null && type.isSearchable())
+ {
+ buf.append(COMMA);
+ getColumnNamesClause(type, identifier, buf);
+ }
+ }
+ }
+ return buf;
+ }
+
/**
* Returns ', columnName0 [, columnName1 [AND columnName2 [...]]]'
*/
Modified: trunk/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/bridge/JDBCSelectorBridge.java
===================================================================
--- trunk/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/bridge/JDBCSelectorBridge.java 2007-11-23 10:12:01 UTC (rev 67394)
+++ trunk/server/src/main/org/jboss/ejb/plugins/cmp/jdbc/bridge/JDBCSelectorBridge.java 2007-11-23 10:44:38 UTC (rev 67395)
@@ -107,9 +107,17 @@
try
{
JDBCQueryCommand query = manager.getQueryManager().getQueryCommand(method);
- GenericEntityObjectFactory factory = (queryMetaData.isResultTypeMappingLocal() ?
- (GenericEntityObjectFactory)query.getSelectManager().getContainer().getLocalProxyFactory() :
- query.getSelectManager().getContainer().getProxyFactory());
+ EntityContainer selectedContainer = query.getSelectManager().getContainer();
+ GenericEntityObjectFactory factory;
+ if(queryMetaData.isResultTypeMappingLocal() && selectedContainer.getLocalHomeClass() != null)
+ {
+ factory = selectedContainer.getLocalProxyFactory();
+ }
+ else
+ {
+ factory = selectedContainer.getProxyFactory();
+ }
+
retVal = query.execute(method, args, null, factory);
}
catch(FinderException e)
Modified: trunk/testsuite/src/main/org/jboss/test/cmp2/lob/Facade.java
===================================================================
--- trunk/testsuite/src/main/org/jboss/test/cmp2/lob/Facade.java 2007-11-23 10:12:01 UTC (rev 67394)
+++ trunk/testsuite/src/main/org/jboss/test/cmp2/lob/Facade.java 2007-11-23 10:44:38 UTC (rev 67395)
@@ -71,4 +71,6 @@
throws Exception, RemoteException;
public void modifyStateFactoryValueHolderValue(Integer id, String value)
throws Exception, RemoteException;
+ boolean executeDynamicQuery(String query, Object[] params)
+ throws Exception, RemoteException;
}
Modified: trunk/testsuite/src/main/org/jboss/test/cmp2/lob/FacadeSessionBean.java
===================================================================
--- trunk/testsuite/src/main/org/jboss/test/cmp2/lob/FacadeSessionBean.java 2007-11-23 10:12:01 UTC (rev 67394)
+++ trunk/testsuite/src/main/org/jboss/test/cmp2/lob/FacadeSessionBean.java 2007-11-23 10:44:38 UTC (rev 67395)
@@ -26,6 +26,7 @@
import javax.ejb.SessionContext;
import javax.ejb.CreateException;
import javax.ejb.EJBException;
+import javax.ejb.FinderException;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
import java.util.Set;
@@ -150,6 +151,22 @@
holder.setDirty(true);
}
+ public boolean executeDynamicQuery(String query, Object[] params)
+ throws Exception
+ {
+ try
+ {
+ getLOBHome().select(query, params);
+ return true;
+ }
+ catch(FinderException e)
+ {
+ // it used to catch the exception
+ // since the field mask and query results were inconsistent
+ return false;
+ }
+ }
+
// SessionBean implementation
/**
Modified: trunk/testsuite/src/main/org/jboss/test/cmp2/lob/GetSetObjectParameter.java
===================================================================
--- trunk/testsuite/src/main/org/jboss/test/cmp2/lob/GetSetObjectParameter.java 2007-11-23 10:12:01 UTC (rev 67394)
+++ trunk/testsuite/src/main/org/jboss/test/cmp2/lob/GetSetObjectParameter.java 2007-11-23 10:44:38 UTC (rev 67395)
@@ -43,7 +43,8 @@
public Object get(ResultSet rs, int index, Class destination, Logger log) throws SQLException
{
Object value = rs.getObject(index);
- log.debug("get: i=" + index + ", destination="+destination+", value=" + value);
+ if(log.isTraceEnabled())
+ log.trace("get: i=" + index + ", destination="+destination+", value=" + value);
Object result = value;
if(rs.wasNull())
{
@@ -69,7 +70,8 @@
public void set(PreparedStatement ps, int index, int jdbcType, Object value,
Logger log) throws SQLException
{
- log.debug("set: i=" + index + ", jdbcType="+jdbcType+", value=" + value);
+ if(log.isTraceEnabled())
+ log.trace("set: i=" + index + ", jdbcType="+jdbcType+", value=" + value);
if( value instanceof MarshalledValue )
{
MarshalledValue mv = (MarshalledValue) value;
Modified: trunk/testsuite/src/main/org/jboss/test/cmp2/lob/LOB.java
===================================================================
--- trunk/testsuite/src/main/org/jboss/test/cmp2/lob/LOB.java 2007-11-23 10:12:01 UTC (rev 67394)
+++ trunk/testsuite/src/main/org/jboss/test/cmp2/lob/LOB.java 2007-11-23 10:44:38 UTC (rev 67395)
@@ -98,4 +98,7 @@
ValueHolder getStateFactoryValueHolder() throws RemoteException;
void setStateFactoryValueHolder(ValueHolder valueHolder) throws RemoteException;
+
+ Integer getIntField() throws RemoteException;
+ void setIntField(Integer i) throws RemoteException;
}
Modified: trunk/testsuite/src/main/org/jboss/test/cmp2/lob/LOBBean.java
===================================================================
--- trunk/testsuite/src/main/org/jboss/test/cmp2/lob/LOBBean.java 2007-11-23 10:12:01 UTC (rev 67394)
+++ trunk/testsuite/src/main/org/jboss/test/cmp2/lob/LOBBean.java 2007-11-23 10:44:38 UTC (rev 67395)
@@ -25,12 +25,14 @@
import javax.ejb.EntityContext;
import javax.ejb.CreateException;
import javax.ejb.RemoveException;
+import javax.ejb.FinderException;
import java.util.Map;
import java.util.List;
import java.util.Set;
import java.util.HashMap;
import java.util.ArrayList;
import java.util.HashSet;
+import java.util.Collection;
/**
* Implementaton of a CMP2 entity bean that is intended to demonstrate the
@@ -107,6 +109,16 @@
public abstract ValueHolder getStateFactoryValueHolder();
public abstract void setStateFactoryValueHolder(ValueHolder valueHolder);
+ public abstract Integer getIntField();
+ public abstract void setIntField(Integer i);
+
+ public abstract Collection ejbSelectSelect(String query, Object[] params) throws FinderException;
+
+ public Collection ejbHomeSelect(String query, Object[] params) throws FinderException
+ {
+ return ejbSelectSelect(query, params);
+ }
+
// EntityBean implementation
@@ -119,6 +131,7 @@
setValueHolder(new ValueHolder(null));
setCleanGetValueHolder(new ValueHolder(null));
setStateFactoryValueHolder(new ValueHolder(null));
+ setIntField(new Integer(1));
return null;
}
Modified: trunk/testsuite/src/main/org/jboss/test/cmp2/lob/LOBHome.java
===================================================================
--- trunk/testsuite/src/main/org/jboss/test/cmp2/lob/LOBHome.java 2007-11-23 10:12:01 UTC (rev 67394)
+++ trunk/testsuite/src/main/org/jboss/test/cmp2/lob/LOBHome.java 2007-11-23 10:44:38 UTC (rev 67395)
@@ -50,4 +50,6 @@
public Collection findAll()
throws FinderException, RemoteException;
+ public java.util.Collection select(java.lang.String query , java.lang.Object[] params)
+ throws javax.ejb.FinderException;
}
Modified: trunk/testsuite/src/main/org/jboss/test/cmp2/lob/LOBUnitTestCase.java
===================================================================
--- trunk/testsuite/src/main/org/jboss/test/cmp2/lob/LOBUnitTestCase.java 2007-11-23 10:12:01 UTC (rev 67394)
+++ trunk/testsuite/src/main/org/jboss/test/cmp2/lob/LOBUnitTestCase.java 2007-11-23 10:44:38 UTC (rev 67395)
@@ -43,8 +43,6 @@
/**
* A test suite to check JBoss data mapping to/from Large Binary Objects (LOBs).
*
- * @see net.sourceforge.junitejb.EJBTestCase
- *
* @version <tt>$Revision$</tt>
* @author <a href="mailto:steve at resolvesw.com">Steve Coy</a>.
* @author <a href="mailto:alex at jboss.org">Alexey Loubyansky</a>
@@ -99,7 +97,8 @@
suite.addTest(new LOBUnitTestCase("testValueHolder"));
suite.addTest(new LOBUnitTestCase("testCleanGetValueHolder"));
suite.addTest(new LOBUnitTestCase("testStateFactoryValueHolder"));
-
+ suite.addTest(new LOBUnitTestCase("testJBAS3717"));
+
return JBossTestCase.getDeploySetup(suite, "cmp2-lob.jar");
}
@@ -293,7 +292,6 @@
public void testMapCMPField() throws Exception
{
- log.debug("testMapCMPField> start");
Facade facade = facadeHome.create();
Integer id = new Integer(111);
try
@@ -398,7 +396,6 @@
public void testValueHolder() throws Exception
{
- log.debug("testValueHolder> start");
Facade facade = facadeHome.create();
Integer id = new Integer(555);
try
@@ -492,13 +489,27 @@
}
}
+ public void testJBAS3717() throws Exception
+ {
+ Facade facade = facadeHome.create();
+ Integer id = new Integer(12);
+ try
+ {
+ facade.createLOB(id);
+ assertTrue(facade.executeDynamicQuery("select distinct object(o) from lob o", null));
+ }
+ finally
+ {
+ try { facade.removeLOB(id); } catch(Exception e) {}
+ }
+ }
+
/**
* Remove data references so that they can be garbage collected if needed.
*/
public void tearDownEJB(Properties props)
throws Exception
{
- log.debug("tearDownEJB");
}
// Protected -------------------------------------------------------
Modified: trunk/testsuite/src/resources/cmp2/lob/META-INF/ejb-jar.xml
===================================================================
--- trunk/testsuite/src/resources/cmp2/lob/META-INF/ejb-jar.xml 2007-11-23 10:12:01 UTC (rev 67394)
+++ trunk/testsuite/src/resources/cmp2/lob/META-INF/ejb-jar.xml 2007-11-23 10:44:38 UTC (rev 67395)
@@ -44,7 +44,19 @@
<cmp-field><field-name>valueHolder</field-name></cmp-field>
<cmp-field><field-name>cleanGetValueHolder</field-name></cmp-field>
<cmp-field><field-name>stateFactoryValueHolder</field-name></cmp-field>
+ <cmp-field><field-name>intField</field-name></cmp-field>
<primkey-field>id</primkey-field>
+
+ <query>
+ <query-method>
+ <method-name>ejbSelectSelect</method-name>
+ <method-params>
+ <method-param>java.lang.String</method-param>
+ <method-param>java.lang.Object[]</method-param>
+ </method-params>
+ </query-method>
+ <ejb-ql><![CDATA[select object(o) from lob o]]></ejb-ql>
+ </query>
</entity>
</enterprise-beans>
Modified: trunk/testsuite/src/resources/cmp2/lob/META-INF/jbosscmp-jdbc.xml
===================================================================
--- trunk/testsuite/src/resources/cmp2/lob/META-INF/jbosscmp-jdbc.xml 2007-11-23 10:12:01 UTC (rev 67394)
+++ trunk/testsuite/src/resources/cmp2/lob/META-INF/jbosscmp-jdbc.xml 2007-11-23 10:44:38 UTC (rev 67395)
@@ -87,6 +87,33 @@
<state-factory>
org.jboss.test.cmp2.lob.ValueHolderStateFactory</state-factory>
</cmp-field>
+
+ <!-- needs on-find for JBAS-3717 test -->
+ <query>
+ <query-method>
+ <method-name>findByPrimaryKey</method-name>
+ <method-params>
+ <method-param>java.lang.Integer</method-param>
+ </method-params>
+ </query-method>
+ <jboss-ql><![CDATA[select object(a) from lob a where a.id=?1]]></jboss-ql>
+ <read-ahead>
+ <strategy>on-find</strategy>
+ </read-ahead>
+ </query>
+ <query>
+ <query-method>
+ <method-name>ejbSelectSelect</method-name>
+ <method-params>
+ <method-param>java.lang.String</method-param>
+ <method-param>java.lang.Object[]</method-param>
+ </method-params>
+ </query-method>
+ <dynamic-ql/>
+ <read-ahead>
+ <strategy>on-find</strategy>
+ </read-ahead>
+ </query>
</entity>
</enterprise-beans>
More information about the jboss-cvs-commits
mailing list