ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sasha Borodin <sa...@whoissasha.com>
Subject Re: ClassCastException building SqlMap instance
Date Fri, 01 Apr 2005 18:49:16 GMT
Darn.  Seemed like a good explanation.  I will try to figure out how to
debug the Tomcat startup from within Idea; if you've done this before,
please post.

Would a ClassCastException be thrown if the instatiation failed and a null
was returned?  If not, how could an incompatible class be returned if the
fully qualified class name is supplied to the class loader, and no errors
are thrown before the cast operation?

Thanks,

-Sasha Borodin


> From: Brandon Goodin <brandon.goodin@gmail.com>
> Reply-To: <ibatis-user-java@incubator.apache.org>
> Date: Thu, 31 Mar 2005 20:54:11 -0700
> To: <ibatis-user-java@incubator.apache.org>
> Subject: Re: ClassCastException building SqlMap instance
> 
> 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