You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@turbine.apache.org by John McNally <jm...@collab.net> on 2001/04/10 17:54:39 UTC
Re: Bug in DBUserManager?
You should read the javadoc for the method you are using. :-)
Why this method chooses to do things differently than all other uses of
Criteria, I do not know. This is a good reason not to use a generic
String key in Criteria, but I will hopefully have time to fix that
sometime soon. Criteria keys are supposed to be the fully qualified
column names, so I understand your confusion. Can anyone explain this
implementation?
john mcnally
Eric Dobbs wrote:
>
> Hi All.
>
> I'm feeling over my head in turbine details, so bear with me.
>
> A little context:
> I'm trying to fix a problem in our edit user page. We're using jsp,
> not velocity. This was working three or four weeks ago before some
> changes to torque. At least I think that's what changed.
>
> Let me start with the exception:
>
> Error encountered processing a template:
> /screens/admin/EditUser.jspjavax.servlet.ServletException:
> DataBackendException: Failed to retrieve users: General error: Unknown
> table 'TURBINE_USER.TURBINE_USER' in where clause
> at
> org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:481)
> at
> templates.screens.admin._0002ftemplates_0002fscreens_0002fadmin_0002fEditUser_0002ejspEditUser_jsp_1._jspService(_0002ftemplates_0002fscreens_0002fadmin_0002fEditUser_0002ejspEditUser_jsp_1.java:619)
> at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:119)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
> at
> org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:184)
> at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:328)
> at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:407)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
> at
> org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:573)
> at
> org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:483)
> at
> org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:388)
> at
> org.apache.turbine.services.jsp.TurbineJspService.handleRequest(TurbineJspService.java:186)
> at
> org.apache.turbine.modules.screens.BaseJspScreen.buildTemplate(BaseJspScreen.java:107)
> at
> org.apache.turbine.modules.screens.TemplateScreen.doBuild(TemplateScreen.java:136)
> at org.apache.turbine.modules.Screen.build(Screen.java:98)
> at org.apache.turbine.modules.ScreenLoader.eval(ScreenLoader.java:129)
> at
> org.apache.turbine.modules.layouts.DefaultLayout.doBuild(DefaultLayout.java:105)
> at org.apache.turbine.modules.Layout.build(Layout.java:91)
> at org.apache.turbine.modules.LayoutLoader.exec(LayoutLoader.java:122)
> at org.apache.turbine.modules.pages.DefaultPage.doBuild(DefaultPage.java:166)
> at org.apache.turbine.modules.Page.build(Page.java:90)
> at org.apache.turbine.modules.PageLoader.exec(PageLoader.java:123)
> at org.apache.turbine.Turbine.doGet(Turbine.java:433)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
> at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:251)
> at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:977)
> at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:196)
> at org.apache.catalina.valves.ValveBase.invokeNext(ValveBase.java:242)
> at
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:464)
> at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:975)
> at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2041)
> at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
> at org.apache.catalina.valves.ValveBase.invokeNext(ValveBase.java:242)
> at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:414)
> at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:975)
> at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:159)
> at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:977)
> at
> org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:818)
> at
> org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:897)
> at java.lang.Thread.run(Thread.java:484)
> Horrible Exception: javax.servlet.ServletException:
> DataBackendException: Failed to retrieve users: General error: Unknown
> table 'TURBINE_USER.TURBINE_USER' in where clause
> at
> org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:481)
> at
> templates.screens.admin._0002ftemplates_0002fscreens_0002fadmin_0002fEditUser_0002ejspEditUser_jsp_1._jspService(_0002ftemplates_0002fscreens_0002fadmin_0002fEditUser_0002ejspEditUser_jsp_1.java:619)
> at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:119)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
> at
> org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:184)
> at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:328)
> at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:407)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
> at
> org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:573)
> at
> org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:483)
> at
> org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:388)
> at
> org.apache.turbine.services.jsp.TurbineJspService.handleRequest(TurbineJspService.java:186)
> rethrown as org.apache.turbine.util.TurbineException: Error encountered
> processing a template:/screens/admin/EditUser.jsp: DataBackendException:
> Failed to retrieve users: General error: Unknown table
> 'TURBINE_USER.TURBINE_USER' in where clause
> at
> org.apache.turbine.services.jsp.TurbineJspService.handleRequest(TurbineJspService.java:204)
> at
> org.apache.turbine.modules.screens.BaseJspScreen.buildTemplate(BaseJspScreen.java:107)
> at
> org.apache.turbine.modules.screens.TemplateScreen.doBuild(TemplateScreen.java:136)
> at org.apache.turbine.modules.Screen.build(Screen.java:98)
> at org.apache.turbine.modules.ScreenLoader.eval(ScreenLoader.java:129)
> at
> org.apache.turbine.modules.layouts.DefaultLayout.doBuild(DefaultLayout.java:105)
> at org.apache.turbine.modules.Layout.build(Layout.java:91)
> at org.apache.turbine.modules.LayoutLoader.exec(LayoutLoader.java:122)
> at org.apache.turbine.modules.pages.DefaultPage.doBuild(DefaultPage.java:166)
> at org.apache.turbine.modules.Page.build(Page.java:90)
> at org.apache.turbine.modules.PageLoader.exec(PageLoader.java:123)
> at org.apache.turbine.Turbine.doGet(Turbine.java:433)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
> at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:251)
> at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:977)
> at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:196)
> at org.apache.catalina.valves.ValveBase.invokeNext(ValveBase.java:242)
> at
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:464)
> at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:975)
> at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2041)
> at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
> at org.apache.catalina.valves.ValveBase.invokeNext(ValveBase.java:242)
> at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:414)
> at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:975)
> at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:159)
> at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:977)
> at
> org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:818)
> at
> org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:897)
> at java.lang.Thread.run(Thread.java:484)
>
> The important part is this:
> Unknown table 'TURBINE_USER.TURBINE_USER' in where clause
>
> I've traced this problem back to a mismatch between DBUserManager.java
> and Criteria.java. But the path to the mismatch is convoluted.
>
> (1)
> Our code does this:
> Criteria crit = new Criteria();
> crit.add(TurbineUserPeer.USERNAME, strUsername);
> users = TurbineSecurity.getUsers(crit);
>
> (2)
> As I'm sure you know, TurbineUserPeer.USERNAME is a static method that
> returns the String 'TURBINE_USER.LOGIN_NAME'.
>
> (3)
> crit.add('TURBINE_USER.LOGIN_NAME', strUsername)
> puts a new Criterion into the hashmap under the key
> 'TURBINE_USER.LOGIN_NAME' like this (Criteria.java 902):
>
> super.put( key, new Criterion(key, value, comparison) );
>
> (4)
> new Criterion(key, value, comparison)
> correctly separates 'TURBINE_USER.LOGIN_NAME' into
> table='TURBINE_USER'
> column='LOGIN_NAME'
>
> (5)
> TurbineSecurity.getUsers(crit)
> ultimately ends up calling DBUserManager.retrieve(crit)
>
> (6)
> That method is defined at DBUserManager.java 195:
>
> 195 public User[] retrieve( Criteria criteria )
> 196 throws DataBackendException
> 197 {
> 198 Criteria dbCriteria = new Criteria();
> 199 Iterator keys = criteria.keySet().iterator();
> 200 while(keys.hasNext())
> 201 {
> 202 String key = (String)keys.next();
> 203 dbCriteria.put(TurbineUserPeer.getColumnName(key),
> 204 criteria.get(key));
> 205 }
> 206 Vector users = new Vector(0);
> 207 try
> 208 {
> 209 users = TurbineUserPeer.doSelect(dbCriteria);
> 210 }
> 211 catch(Exception e)
> 212 {
> 213 throw new DataBackendException("Failed to retrieve
> users", e);
> 214 }
> 215 return (User[])users.toArray(new User[0]);
> 216 }
>
> (7)
> On line 203, there's a call:
> TurbineUserPeer.getColumnName(key)
> 'key; is the key from the Criteria hashmap, which as mentioned
> above is 'TURBINE_USER.LOGIN_NAME'
>
> (8)
> getColumnName(key) appends the table name to 'key'
> returning 'TURBINE_USER.TURBINE_USER.LOGIN_NAME'
> TurbineUserPeer.java 192-199
>
> public static String getColumnName (String name)
> {
> StringBuffer sb = new StringBuffer();
> sb.append (TABLE_NAME);
> sb.append (".");
> sb.append (name);
> return sb.toString();
> }
>
> So where would you fix this?
> TurbineUserPeer.java
> Criteria.java
> DBUserManager.java
>
> -Eric
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: turbine-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: turbine-dev-help@jakarta.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: turbine-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: turbine-dev-help@jakarta.apache.org