ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Brandon Goodin <brandon.goo...@gmail.com>
Subject Re: ClassCastException building SqlMap instance
Date Fri, 01 Apr 2005 03:54:11 GMT
This is highly unlikely considering the getName() returns the
fully-qualified class name and the package and class is imported into
the class that is referencing. I recommend that you attach the ibatis
source to the jar and startup tomcat in your IDE's debug mode. Set a
breakpoint on line 303 of the SqlMapConfigParser class. You IDE will
break on that point and you can examine what class is being passed
back.

>From class.getName() javadoc:
Returns the fully-qualified name of the entity (class, interface,
array class, primitive type, or void) represented by this Class
object, as a String.

If you don't know how to do this with your IDE i'll try to get some
time to reproduce this in my own environment.

Brandon

On Mar 31, 2005 8:11 PM, Sasha Borodin <sasha@whoissasha.com> wrote:
> Looking at XmlSqlMapClientBuilder.java parseDataSource() method resolves the
> alias of "DBCP" to DbcpDataSourceFactory.class.getName(), then uses the
> Resources class to instantiate based on the String name.
> 
> I think the problem is that Tomcat 5 has a class of an identical name
> (org.apache.naming.factory.DbcpDataSourceFactory), and THIS class is
> instantiated by the class loader instead of the iBatis one.  Hence the
> ClassCastException when parseDataSource() tries to cast apache's
> DbcpDataSourceFactory to DataSourceFactory (which it does NOT implement).
> This is not a problem in a web application, as the class loader behaves
> differently there, looking in the local resources before traversing up to
> the parents - which is why I don't have this problem when using iBatis in
> that scenario.
> 
> http://jakarta.apache.org/tomcat/tomcat-5.5-doc/class-loader-howto.html
> 
> Is this a reasonable hypothesis?  If this is correct, what options do I
> have?  I'll gladly remove one of Tomcat's jar files, if I can find which one
> contains the offending class of the identical name.
> 
> Are there any options on me tweaking iBatis to correct this situation?
> 
> Thank you,
> 
> -Sasha Borodin
> 
> > From: Brandon Goodin <brandon.goodin@gmail.com>
> > Reply-To: <ibatis-user-java@incubator.apache.org>
> > Date: Thu, 31 Mar 2005 19:26:57 -0700
> > To: <ibatis-user-java@incubator.apache.org>
> > Subject: Re: ClassCastException building SqlMap instance
> >
> > Also, if you want to debug this error you'd be looking at
> > SqlMpaConfigParser around line 303.
> >
> > Brandon
> >
> >
> > On Thu, 31 Mar 2005 20:21:09 -0600, Sasha Borodin <sasha@whoissasha.com>
> > wrote:
> >> Yes, I have ibatis-common-2.jar on the classpath.
> >>
> >> I've tested my classes from within IntelliJ Idea, and implemented them
> >> successfully in a number of web applications.  I'm not sure how to go about
> >> debugging this particular environment, however.
> >>
> >> The jars are all located in $CATALINA_HOME/server/lib, instead of the
> >> WEB-INF/lib directory; that is the only difference that I can see - which
> >> makes me think it's some kind of a conflict with existing jars, or there's a
> >> necessary jar that hasn't yet been loaded by the classloader before the
> >> ibatis classes are initialized in this scenario.
> >>
> >> If anyone has used iBatis in this context (tomcat realm implementations) and
> >> is familiar with any nuances, please let me know.  Also, if you have a
> >> suggestion for debugging WHAT particular statements or code cause the
> >> ClassCastException, that would also be very helpful to troubleshooting this.
> >>
> >>>>>> --- Check the data source type or class.
> >>>>>> --- Cause: com.ibatis.sqlmap.client.SqlMapException: Error initializing
> >>>>>> DataSource.  Could not instantiate DataSourceFactory.  Cause:
> >>>>>> java.lang.ClassCastException
> >>
> >> Thanks again.
> >>
> >> -Sasha Borodin
> >>
> >>
> >>> From: Brandon Goodin <brandon.goodin@gmail.com>
> >>> Reply-To: <ibatis-user-java@incubator.apache.org>
> >>> Date: Thu, 31 Mar 2005 19:04:39 -0700
> >>> To: <ibatis-user-java@incubator.apache.org>
> >>> Subject: Re: ClassCastException building SqlMap instance
> >>>
> >>> do you have the ibatis-common.jar on your classpath?
> >>>
> >>> If i were you i would put this in a debugger.
> >>>
> >>> Brandon
> >>>
> >>> On Thu, 31 Mar 2005 19:16:50 -0600, Sasha Borodin <sasha@whoissasha.com>
> >>> wrote:
> >>>> Excerpt from sql-map-config.xml:
> >>>>
> >>>>     <dataSource type="DBCP">
> >>>>         <property name="JDBC.Driver"
> >>>>             value="com.microsoft.jdbc.sqlserver.SQLServerDriver"/>
> >>>>
> >>>> The error persists whether or not I place the commons-dbcp, commons-pool,
> >>>> commons-collections, and the jdbc driver jars in server/lib.
> >>>>
> >>>> Thanks for looking at this.
> >>>>
> >>>> -Sasha
> >>>>
> >>>>> From: Brandon Goodin <brandon.goodin@gmail.com>
> >>>>> Reply-To: <ibatis-user-java@incubator.apache.org>
> >>>>> Date: Thu, 31 Mar 2005 18:09:02 -0700
> >>>>> To: <ibatis-user-java@incubator.apache.org>
> >>>>> Subject: Re: ClassCastException building SqlMap instance
> >>>>>
> >>>>> What are you using for your datasource?
> >>>>>
> >>>>> Brandon
> >>>>>
> >>>>>
> >>>>> On Thu, 31 Mar 2005 18:32:57 -0600, Sasha Borodin <sasha@whoissasha.com>
> >>>>> wrote:
> >>>>>> I've written some classes that employ the iBatis framework for
data
> >>>>>> access.
> >>>>>> All patterns used are identical to the iBatis JPetStore example
> >>>>>> (DaoManager,
> >>>>>> SqlMaps, a "service" class which abstracts all this, etc.)
> >>>>>>
> >>>>>> These classes work great when accessed from a Tomcat web application.
> >>>>>> But
> >>>>>> I
> >>>>>> ran into problems using these classes in a custom Realm for
Tomcat.
> >>>>>> These
> >>>>>> are the errors I'm getting when the class loader initializes
everything
> >>>>>> on
> >>>>>> Tomcat startup:
> >>>>>>
> >>>>>> Caused by: java.lang.RuntimeException: Could not initialize
> >>>>>> BrokerDaoConfig.
> >>>>>> Cause:  com.ibatis.dao.client.DaoException: Error while configuring
> >>>>>> DaoManager.  Cause: com.ibatis.sqlmap.client.SqlMapException:
There was
> >>>>>> an
> >>>>>> error while building the SqlMap instance.
> >>>>>> --- The error occurred in the SQL Map Configuration file.
> >>>>>> --- The error occurred while configuring the data source.
> >>>>>> --- Check the data source type or class.
> >>>>>> --- Cause: com.ibatis.sqlmap.client.SqlMapException: Error initializing
> >>>>>> DataSource.  Could not instantiate DataSourceFactory.  Cause:
> >>>>>> java.lang.ClassCastException
> >>>>>>
> >>>>>> Can anyone shed some light on the ClassCastException?  I Googled
but
> >>>>>> found
> >>>>>> no references to this exception in this context.
> >>>>>>
> >>>>>> As I mentioned, my classes work when all iBatis (and related)
jars are
> >>>>>> under
> >>>>>> a webapp's WEB-INF/lib directory.  But in this case, since I'm
trying to
> >>>>>> use
> >>>>>> the classes in a custom Realm implementation, I've placed all
the jars
> >>>>>> under
> >>>>>> server/lib directory - that is the only difference between a
working and
> >>>>>> non-working scenario.
> >>>>>>
> >>>>>> Thanks for all your help,
> >>>>>>
> >>>>>> -Sasha Borodin
> >>>>>>
> >>>>>>
> >>>>
> >>>>
> >>
> >>
> 
>

Mime
View raw message