Hi,
I'm trying to integrate SGWT EE with our application and I seem to have hit a little snag. Turns out all our DB tables have a primary key named "id". The name remains the same throughout the 300+ tables.
Now I'm trying to fire a fetch query with a criteria like so
My criteria here however seems to get ignored:
I've also tried to write my code like so:
but that throws another exception:
Here are my .ds.xml files:
Is there a way I can get around this without having to rename every primary key column in my DB and associated JPA entities?
I'm trying to integrate SGWT EE with our application and I seem to have hit a little snag. Turns out all our DB tables have a primary key named "id". The name remains the same throughout the 300+ tables.
Now I'm trying to fire a fetch query with a criteria like so
Code:
DataSource leadSubDs = DataSource.get("LeadSubscribedUsers");
Criteria cr = new Criteria();
cr.addCriteria("leads.id", Long.valueOf(id));
cr.addCriteria("users", userId);
leadSubDs.fetchData(cr, new DSCallback() {
public void execute(DSResponse response, Object rawData, DSRequest request) {
Record[] responseData = response.getData();
for(Record record: responseData){
String eventTypeCode = "";
String actionTypeCode = "";
Object obj = JSOHelper.convertToJava(record.getJsObj());
....
Code:
criteria:{
"leads.id":10,
users:1
},
operationConfig:{
dataSource:"LeadSubscribedUsers",
operationType:"fetch",
textMatchStyle:"exact"
},
appID:"builtinApplication",
operation:"LeadSubscribedUsers_fetch",
oldValues:{
"leads.id":10,
users:1
}
}
=== 2014-09-03 13:04:32,925 [ec-7] INFO IDACall - Performing 1 operation(s)
=== 2014-09-03 13:04:32,926 [ec-7] DEBUG ISCKeyedObjectPool - Borrowing object for 'leads'
=== 2014-09-03 13:04:32,926 [ec-7] WARN DSRequest - In criteria, definition 'leads.id' refers to a field name ('id') that is already declared on this dataSource ('LeadSubscribedUsers'). Ignoring this criteria entry.
Code:
Criteria cr = new Criteria();
cr.addCriteria("leads", Long.valueOf(id));
Code:
=== 2014-09-03 14:13:13,207 [ec-2] DEBUG ISCKeyedObjectPool - Borrowing object for 'LeadSubscribedUsers'
=== 2014-09-03 14:13:13,208 [ec-2] DEBUG RPCManager - Request #1 (DSRequest) payload: {
criteria:{
leads:10,
users:1
},
operationConfig:{
dataSource:"LeadSubscribedUsers",
operationType:"fetch",
textMatchStyle:"exact"
},
appID:"builtinApplication",
operation:"LeadSubscribedUsers_fetch",
oldValues:{
leads:10,
users:1
}
}
=== 2014-09-03 14:13:13,208 [ec-2] INFO IDACall - Performing 1 operation(s)
=== 2014-09-03 14:13:13,208 [ec-2] DEBUG DeclarativeSecurity - Processing security checks for DataSource null, field null
=== 2014-09-03 14:13:13,208 [ec-2] DEBUG DeclarativeSecurity - DataSource LeadSubscribedUsers is not in the pre-checked list, processing...
=== 2014-09-03 14:13:13,208 [ec-2] DEBUG AppBase - [builtinApplication.LeadSubscribedUsers_fetch] No userTypes defined, allowing anyone access to all operations for this application
=== 2014-09-03 14:13:13,209 [ec-2] DEBUG AppBase - [builtinApplication.LeadSubscribedUsers_fetch] No public zero-argument method named '_LeadSubscribedUsers_fetch' found, performing generic datasource operation
=== 2014-09-03 14:13:13,209 [ec-2] DEBUG JPADataSource - [builtinApplication.LeadSubscribedUsers_fetch] Creating EntityManager and starting transaction.
=== 2014-09-03 14:13:13,217 [ec-2] DEBUG DSRequest - [builtinApplication.LeadSubscribedUsers_fetch] Clobbering existing FreeResourcesHandler of type 'com.isomorphic.jpa.JPA2DataSource' with a 'com.isomorphic.jpa.JPA2DataSource'
=== 2014-09-03 14:13:13,217 [ec-2] DEBUG JPADataSource - [builtinApplication.LeadSubscribedUsers_fetch] Executing fetch.
=== 2014-09-03 14:13:13,218 [ec-2] DEBUG ISCKeyedObjectPool - [builtinApplication.LeadSubscribedUsers_fetch] Borrowing object for 'Leads'
=== 2014-09-03 14:13:13,218 [ec-2] DEBUG JPADataSource - [builtinApplication.LeadSubscribedUsers_fetch] Marking transaction for roll back.
=== 2014-09-03 14:13:13,218 [ec-2] DEBUG JPADataSource - [builtinApplication.LeadSubscribedUsers_fetch] Got exception while executing. Transaction will be rolled back.
java.lang.ClassCastException: java.lang.Long cannot be cast to java.util.Map
at com.isomorphic.jpa.JPADataSource.createQuery(JPADataSource.java:1910)
at com.isomorphic.jpa.JPADataSource.executeFetch(JPADataSource.java:691)
at com.isomorphic.datasource.DataSource.execute(DataSource.java:1517)
at com.isomorphic.jpa.JPADataSource.execute(JPADataSource.java:651)
at com.isomorphic.application.AppBase.executeDefaultDSOperation(AppBase.java:723)
at com.isomorphic.application.AppBase.executeAppOperation(AppBase.java:658)
at com.isomorphic.application.AppBase.execute(AppBase.java:491)
at com.isomorphic.datasource.DSRequest.execute(DSRequest.java:2534)
at com.isomorphic.servlet.IDACall.handleDSRequest(IDACall.java:215)
at com.isomorphic.servlet.IDACall.processRPCTransaction(IDACall.java:172)
at com.isomorphic.servlet.IDACall.processRequest(IDACall.java:137)
at com.isomorphic.servlet.IDACall.doPost(IDACall.java:73)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at com.isomorphic.servlet.BaseServlet.service(BaseServlet.java:152)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.jboss.solder.servlet.exception.CatchExceptionFilter.doFilter(CatchExceptionFilter.java:62)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.jboss.solder.servlet.event.ServletEventBridgeFilter.doFilter(ServletEventBridgeFilter.java:74)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at com.isomorphic.servlet.CompressionFilter.doFilter(CompressionFilter.java:260)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:146)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:183)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176)
at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145)
at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92)
at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:394)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at com.bmf.servlet.filters.ReferralFilter.doFilter(ReferralFilter.java:59)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at com.bmf.servlet.filters.LoggerFilter.doFilter(LoggerFilter.java:50)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:123)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.__invoke(StandardHostValve.java:171)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1008)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)
Here are my .ds.xml files:
Code:
<DataSource
ID="LeadSubscribedUsers"
serverType="jpa"
serverConstructor="com.isomorphic.jpa.JPA2DataSource"
dropExtraFields="true"
beanClassName="com.bmf.domain.LeadSubscribedUsers"
schemaBean="com.bmf.domain.LeadSubscribedUsers">
<fields>
<field name="id"/>
<field name="eventTypes" type="EventTypes" foreignKey="EventTypes.id"/>
<field name="actionTypes" type="ActionTypes" foreignKey="ActionTypes.id"/>
<field name="leads" type="Leads" foreignKey="Leads.id"/>
<field name="users" type="Users" foreignKey="Users.id"/>
</fields>
</DataSource>
Code:
<DataSource allowAdvancedCriteria="true" dropExtraFields="true" beanClassName="com.bmf.domain.Leads" ID="Leads" entityName="com.bmf.domain.Leads" serverType="jpa" > <fields> <field hidden="true" primaryKey="true" name="id" length="255" canEdit="false" required="false" type="sequence"></field> <field name="lastCommentAt" length="19" canEdit="true" required="true" type="datetime"></field> <field name="priorityPoints" length="255" canEdit="true" required="true" type="integer"></field> <field name="receivedAt" length="19" canEdit="true" required="true" type="datetime"></field> <field name="updatedAt" length="19" canEdit="true" required="true" type="datetime"></field> </fields> </DataSource>
Comment