ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Simone Tripodi <simone.trip...@gmail.com>
Subject Re: Issue with Interface Mapper that Extends an Interface itself
Date Wed, 30 Dec 2009 15:15:23 GMT
Hy guys,
any news about this issue? I just met the case when a mapper needs to
extend an existing one, but mapper methods are not found :(
Thanks in advance!!!
Simone Tripodi

On Fri, Dec 11, 2009 at 11:27 PM, Soks86 <michael.chrostowski@gmail.com> wrote:
>
> Sorry for not including this in my previous response.
>
> I also noticed an issue when you have the following:
>
> type1 {
> save()
> }
>
> type2 extends type1 {
> save()
> }
>
> If you hold a type1 reference to type2 and call type1.save (even though the
> runtime type is type2) then iBATIS calls the mapping for type1.save()
> instead of type2.save(). Is this expected behavior?
>
> Thanks.
>
>
> Soks86 wrote:
>>
>> I was going over the patch and it looks like it's out of date already,
>> that is it's not compatible with Beta-6. Also, I'm not sure the
>> implementation is as clean as it could be although when I tried to go in
>> there myself I realized the issue does get a bit complicated.
>>
>> That is, the mappers and classes need to be completely mapped out in order
>> to find the correct mapping to call from the method invocation. The
>> current patch goes through the generated proxy looking for an interface
>> that contains the method but this method actually uses exceptions as
>> logic... now I'm not sure if this is workable or not but last time I had
>> exceptions as part of normal logic my code ran very slowly...
>>
>> I'm going to poke around the code over the weekend and see if I can't come
>> up with a solution but something tells me the information regarding which
>> mapping to invoke may need to be stored elsewhere... unless I'm just
>> crazy.
>>
>> Also, I ran into an issue when downloading the SVN code. One of the
>> libraries from a test case comes from javax.nio.cs.US_ASCII (sorry if
>> that's wrong don't have access to code ATM) and my IDE (Eclipse w/
>> SpringSource) is complaining that this is a restricted .jar (the path is
>> resolving to something/something/rt.jar) any ideas as to what could be
>> causing this?
>>
>> Also my maven is refusing to find
>> "org.apache.ibatis:ibatis-3:pom:3.0-SNAPSHOT" from
>> "http://repo1.maven.org/maven2" but I'm guessing that's likely an issue on
>> my end.
>>
>> Thanks.
>>
>> (getMethod().execute() calls for each possibility)
>>
>> Clinton Begin wrote:
>>>
>>> The best thing you can do is try the patch.  iBATIS is easy to check out
>>> and
>>> build (one-click build principle).  So if you check out the source, apply
>>> the patch and let us know if it works for you, that gives me a lot more
>>> confidence.
>>>
>>> Cheers,
>>> Clinton
>>>
>>> On Thu, Dec 10, 2009 at 1:50 PM, Soks86
>>> <michael.chrostowski@gmail.com>wrote:
>>>
>>>>
>>>> Is there anything I could do to help the patch along? Would trying the
>>>> patch
>>>> and vouching for it help... anything like that?
>>>>
>>>> The only fix without changes is to @Override the methods in all my
>>>> interfaces and that will drive me nuts (wish I had interns...).
>>>>
>>>> Thank you for the quick reply.
>>>>
>>>>
>>>> Clinton Begin wrote:
>>>> >
>>>> > Interface inheritance is not yet supported.  There's a Jira ticket
>>>> with a
>>>> > patch submitted, here:
>>>> >
>>>> > http://issues.apache.org/jira/browse/IBATIS-655
>>>> >
>>>> > Clinton
>>>> >
>>>> > On Thu, Dec 10, 2009 at 11:23 AM, Soks86
>>>> > <michael.chrostowski@gmail.com>wrote:
>>>> >
>>>> >>
>>>> >> Hi,
>>>> >>
>>>> >> I've been switching my project over to iBATIS from a pretty complete
>>>> >> Hibernate project. I've run into an issue with how the iBATIS
>>>> >> configuration
>>>> >> seems to look up mapped methods. I'm currently using Beta 5 since
my
>>>> >> Maven
>>>> >> isn't seeing repo2.maven.org/org/... for some reason. I have an
>>>> interface
>>>> >> dao as such:
>>>> >>
>>>> >> public interface Dao<T> {
>>>> >>    void delete(T arg);
>>>> >>    void save(T arg);
>>>> >>    void update(T arg);
>>>> >>    T load(T arg);
>>>> >> }
>>>> >>
>>>> >> then I have another interface which extends this
>>>> >>
>>>> >> public interface SomeTypeDao extends Dao<SomeType> {
>>>> >>   SomeType loadBySomething(String arg);
>>>> >> }
>>>> >>
>>>> >> and finally my implementation:
>>>> >>
>>>> >> public class IbatisSomeTypeDao implements SomeTypeDao {
>>>> >>   void delete(SomeType arg) {
>>>> >>      SqlSession session = sessionFactory.openSession();
>>>> >>      try {
>>>> >>         SomeTypeDao dao = session.getMapper(SomeTypeDao.class);
>>>> >>         dao.delete(arg);
>>>> >>         session.commit();
>>>> >>      } finally {
>>>> >>         session.close();
>>>> >>      }
>>>> >>      //... other code omitted but present in actual code
>>>> >> }
>>>> >>
>>>> >> My mapping file is for the namespace of SomeTypeDao and that is
the
>>>> only
>>>> >> mapped interface or class from the three I posted above.
>>>> >>
>>>> >> Now when I call IbatisSomeTypeDao.delete(arg) instead of finding
my
>>>> >> mapped
>>>> >> interface (SomeTypeDao.delete()) iBATIS seems to look for delete()
in
>>>> my
>>>> >> Dao<T> class instead and thus it looks for a mapping for Dao<T>
>>>> (which
>>>> >> doesn't exist) and then I get this exception:
>>>> >>
>>>> >> java.lang.IllegalArgumentException: Mapped Statements collection
does
>>>> not
>>>> >> contain value for com.icarus.common.dao.Dao.delete
>>>> >>        at
>>>> >>
>>>> >>
>>>> org.apache.ibatis.session.Configuration$StrictMap.get(Configuration.java:366)
>>>> >>        at
>>>> >>
>>>> >>
>>>> org.apache.ibatis.session.Configuration.getMappedStatement(Configuration.java:312)
>>>> >>        at
>>>> >>
>>>> >>
>>>> org.apache.ibatis.binding.MapperMethod.setupCommandType(MapperMethod.java:131)
>>>> >>        at
>>>> >> org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:41)
>>>> >>        at
>>>> >> org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:18)
>>>> >>        at $Proxy1.delete(Unknown Source)
>>>> >>
>>>> >>
>>>> >> Am I missing something here? It would seem to me that this is a
>>>> >> limitation
>>>> >> of iBATIS' configuration class. Shouldn't it first look for a mapping
>>>> for
>>>> >> SomeTypeDao and find my mapping? I do know for a fact that if I
call
>>>> >> SomeTypeDao.loadBySomething (method that isn't in Dao<T> generic
>>>> type)
>>>> >> then
>>>> >> the Configuration seems to find the appropriate mapping and doesn't
>>>> >> complain. However any method that was inherited by the interface
is
>>>> >> mapped
>>>> >> to the parent interface it seems.
>>>> >>
>>>> >> Ideas? Help?
>>>> >>
>>>> >> Thanks.
>>>> >> --
>>>> >> View this message in context:
>>>> >>
>>>> http://old.nabble.com/Issue-with-Interface-Mapper-that-Extends-an-Interface-itself-tp26732131p26732131.html
>>>> >> Sent from the iBATIS - User - Java mailing list archive at
>>>> Nabble.com.
>>>> >>
>>>> >>
>>>> >> ---------------------------------------------------------------------
>>>> >> To unsubscribe, e-mail: user-java-unsubscribe@ibatis.apache.org
>>>> >> For additional commands, e-mail: user-java-help@ibatis.apache.org
>>>> >>
>>>> >>
>>>> >
>>>> >
>>>>
>>>> --
>>>> View this message in context:
>>>> http://old.nabble.com/Issue-with-Interface-Mapper-that-Extends-an-Interface-itself-tp26732131p26734289.html
>>>> Sent from the iBATIS - User - Java mailing list archive at Nabble.com.
>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: user-java-unsubscribe@ibatis.apache.org
>>>> For additional commands, e-mail: user-java-help@ibatis.apache.org
>>>>
>>>>
>>>
>>>
>>
>>
>
> --
> View this message in context: http://old.nabble.com/Issue-with-Interface-Mapper-that-Extends-an-Interface-itself-tp26732131p26752352.html
> Sent from the iBATIS - User - Java mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-java-unsubscribe@ibatis.apache.org
> For additional commands, e-mail: user-java-help@ibatis.apache.org
>
>



-- 
http://www.google.com/profiles/simone.tripodi

---------------------------------------------------------------------
To unsubscribe, e-mail: user-java-unsubscribe@ibatis.apache.org
For additional commands, e-mail: user-java-help@ibatis.apache.org


Mime
View raw message