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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> > > 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 <[EMAIL PROTECTED]> > > 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 <[EMAIL PROTECTED]> > >>> 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 <[EMAIL PROTECTED]> > >>> 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 <[EMAIL PROTECTED]> > >>>>> 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 <[EMAIL PROTECTED]> > >>>>> 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 > >>>>>> > >>>>>> > >>>> > >>>> > >> > >> > >