Quantcast

Issue with MyBatis/Guice

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Issue with MyBatis/Guice

gpuliyar
Hi MyBatis/Guice team,

I have getting the below exception:
Exception in thread "main" java.lang.NoSuchMethodError: com.google.inject.util.Providers.guicify(Ljavax/inject/Provider;)Lcom/google/inject/Provider;
    at org.mybatis.guice.AbstractMyBatisModule.bindMapper(AbstractMyBatisModule.java:62)
    at org.mybatis.guice.MyBatisModule.addMapperClass(MyBatisModule.java:458)
    at com.metricstream.itgrc.ucf.guice.modules.UcfMybatisModule.initialize(UcfMybatisModule.java:23)
    at org.mybatis.guice.MyBatisModule.internalConfigure(MyBatisModule.java:98)
    at org.mybatis.guice.AbstractMyBatisModule.configure(AbstractMyBatisModule.java:53)
    at com.google.inject.AbstractModule.configure(AbstractModule.java:59)
    at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:223)
    at com.google.inject.spi.Elements.getElements(Elements.java:101)
    at com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:127)
    at com.google.inject.internal.InjectorBuilder.build(InjectorBuilder.java:103)
    at com.google.inject.Guice.createInjector(Guice.java:93)
    at com.google.inject.Guice.createInjector(Guice.java:70)
    at com.google.inject.Guice.createInjector(Guice.java:60)
    at com.metricstream.itgrc.ucf.service.TempAsset1.main(TempAsset1.java:41)

MyBatisModule Code:

package com.metricstream.itgrc.ucf.guice.modules;

import java.util.Properties;

import javax.sql.DataSource;

import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
import org.mybatis.guice.MyBatisModule;
import org.mybatis.guice.datasource.builtin.PooledDataSourceProvider;

import com.google.inject.name.Names;
import com.metricstream.itgrc.core.service.ItgrcDataSourceProvider;
import com.metricstream.itgrc.ucf.abator.dao.ExUcfAssetBasicinfoMapper;
import com.metricstream.itgrc.ucf.abator.dao.ExUcfAssetMetadataMapper;
import com.metricstream.itgrc.ucf.abator.dao.ExUcfAssetReferenceMapper;

public class UcfMybatisModule extends MyBatisModule {

    @Override
    protected void initialize() {
        bindTransactionFactoryType(JdbcTransactionFactory.class);
        bind(DataSource.class).toProvider(ItgrcDataSourceProvider.class);
        addMapperClass(ExUcfAssetMetadataMapper.class);
        addMapperClass(ExUcfAssetBasicinfoMapper.class);
        addMapperClass(ExUcfAssetReferenceMapper.class);
    }

    protected static Properties createTestProperties() {
        Properties myBatisProperties = new Properties();
        myBatisProperties.setProperty("mybatis.environment.id", "development");
        return myBatisProperties;
    }
}

DataSourceProvider Code:

package com.metricstream.itgrc.core.service;

import javax.sql.DataSource;
import com.google.inject.Provider;

public class ItgrcDataSourceProvider implements Provider<DataSource> {

    @Override
    public DataSource get() {
        return new ItgrcDataSource();
    }
}

DataSource Code:
package com.metricstream.itgrc.core.service;

import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import javax.sql.DataSource;

import com.metricstream.log.Logger;

public class ItgrcDataSource implements DataSource {
    private Connection con = null;

    @Override
    public PrintWriter getLogWriter() throws SQLException {
        return new PrintWriter(Logger.getLogPrinter());
    }

    @Override
    public void setLogWriter(PrintWriter out) throws SQLException {
    }

    @Override
    public void setLoginTimeout(int seconds) throws SQLException {
    }

    @Override
    public int getLoginTimeout() throws SQLException {
        return 0;
    }

    @Override
    public <T> T unwrap(Class<T> iface) throws SQLException {
        return null;
    }

    @Override
    public boolean isWrapperFor(Class<?> iface) throws SQLException {
        return false;
    }

    @Override
    public Connection getConnection() throws SQLException {
        synchronized (this) {
            if (con == null) {
                try {
                    String driverName = "oracle.jdbc.driver.OracleDriver";
                    Class.forName(driverName);

                    String serverName = "server.metricstream.com";
                    String portNumber = "1521";
                    String sid = "sid";
                    String url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + ":" + sid;
                    String username = "user";
                    String password = "password";
                    con = DriverManager.getConnection(url, username, password);
                    con.setAutoCommit(true);
                } catch (ClassNotFoundException e) {
                } catch (SQLException e) {
                }
            }
        }

        return con;
    }

    @Override
    public Connection getConnection(String username, String password) throws SQLException {
        return null;
    }
}

Main Method:

public class TempAsset1 {
    private static final String CLASS_ID = AssetsList.class.getName();
    @Inject
    private ExUcfAssetMetadataMapper metaDataDao;
    @Inject
    private ExUcfAssetBasicinfoMapper basicInfoDao;
    @Inject
    private ExUcfAssetReferenceMapper referenceDao;

    public static void main(String args[]) throws FileNotFoundException, AppException, SQLException {
        FileInputStream fi = new FileInputStream("UCF_Assets_List.xml");
        IParser parser = new UcfAssetsListParser();
        UCFAssetsList ucfa = (UCFAssetsList) parser.parse(fi);

        Injector injector = Guice.createInjector(new UcfMybatisModule());
        TempAsset1 t1 = injector.getInstance(TempAsset1.class);
        t1.load(ucfa);
    }

    public void load(final UCFAssetsList ucfAssetsList) throws AppException, SQLException {
        AppLog.info(CLASS_ID, "load");
...
    }
}

POM file
    <repositories>
        <repository>
            <id>guice-maven</id>
            <name>guice maven</name>
            <url>http://guice-maven.googlecode.com/svn/trunk</url>
        </repository>
    </repositories>
    <dependencies>
        <dependency>
            <groupId>ms-itgrc</groupId>
            <artifactId>ms-itgrc-core</artifactId>
            <version>6.0.1.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-io</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.0.6</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-guice</artifactId>
            <version>3.0</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.guice</groupId>
            <artifactId>guice</artifactId>
            <version>2.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-guice</artifactId>
            <version>3.0</version>
        </dependency>
    </dependencies>

Please let me know where did i go wrong?

Thanks,
GP

Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: Issue with MyBatis/Guice

Jeff Butler
Upgrade your versions...

         <dependency>
             <groupId>org.mybatis</groupId>
             <artifactId>mybatis-guice</artifactId>
             <version>3.2</version>
         </dependency>
         <dependency>
             <groupId>com.google.inject</groupId>
             <artifactId>guice</artifactId>
             <version>3.0</version>
         </dependency>

Jeff Butler


On Mon, Feb 20, 2012 at 12:20 AM, Gopalakrishnan <[hidden email]> wrote:

> Hi MyBatis/Guice team,
>
> I have getting the below exception:
> Exception in thread "main" java.lang.NoSuchMethodError:
> com.google.inject.util.Providers.guicify(Ljavax/inject/Provider;)Lcom/google/inject/Provider;
>     at
> org.mybatis.guice.AbstractMyBatisModule.bindMapper(AbstractMyBatisModule.java:62)
>     at
> org.mybatis.guice.MyBatisModule.addMapperClass(MyBatisModule.java:458)
>     at
> com.metricstream.itgrc.ucf.guice.modules.UcfMybatisModule.initialize(UcfMybatisModule.java:23)
>     at
> org.mybatis.guice.MyBatisModule.internalConfigure(MyBatisModule.java:98)
>     at
> org.mybatis.guice.AbstractMyBatisModule.configure(AbstractMyBatisModule.java:53)
>     at com.google.inject.AbstractModule.configure(AbstractModule.java:59)
>     at
> com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:223)
>     at com.google.inject.spi.Elements.getElements(Elements.java:101)
>     at
> com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:127)
>     at
> com.google.inject.internal.InjectorBuilder.build(InjectorBuilder.java:103)
>     at com.google.inject.Guice.createInjector(Guice.java:93)
>     at com.google.inject.Guice.createInjector(Guice.java:70)
>     at com.google.inject.Guice.createInjector(Guice.java:60)
>     at
> com.metricstream.itgrc.ucf.service.TempAsset1.main(TempAsset1.java:41)
>
> MyBatisModule Code:
> package com.metricstream.itgrc.ucf.guice.modules;
>
> import java.util.Properties;
>
> import javax.sql.DataSource;
>
> import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
> import org.mybatis.guice.MyBatisModule;
> import org.mybatis.guice.datasource.builtin.PooledDataSourceProvider;
>
> import com.google.inject.name.Names;
> import com.metricstream.itgrc.core.service.ItgrcDataSourceProvider;
> import com.metricstream.itgrc.ucf.abator.dao.ExUcfAssetBasicinfoMapper;
> import com.metricstream.itgrc.ucf.abator.dao.ExUcfAssetMetadataMapper;
> import com.metricstream.itgrc.ucf.abator.dao.ExUcfAssetReferenceMapper;
>
> public class UcfMybatisModule extends MyBatisModule {
>
>     @Override
>     protected void initialize() {
>         bindTransactionFactoryType(JdbcTransactionFactory.class);
>         bind(DataSource.class).toProvider(ItgrcDataSourceProvider.class);
>         addMapperClass(ExUcfAssetMetadataMapper.class);
>         addMapperClass(ExUcfAssetBasicinfoMapper.class);
>         addMapperClass(ExUcfAssetReferenceMapper.class);
>     }
>
>     protected static Properties createTestProperties() {
>         Properties myBatisProperties = new Properties();
>         myBatisProperties.setProperty("mybatis.environment.id",
> "development");
>         return myBatisProperties;
>     }
> }
>
> DataSourceProvider Code:
> package com.metricstream.itgrc.core.service;
>
> import javax.sql.DataSource;
> import com.google.inject.Provider;
>
> public class ItgrcDataSourceProvider implements Provider<DataSource> {
>
>     @Override
>     public DataSource get() {
>         return new ItgrcDataSource();
>     }
> }
>
> DataSource Code:
> package com.metricstream.itgrc.core.service;
>
> import java.io.PrintWriter;
> import java.sql.Connection;
> import java.sql.DriverManager;
> import java.sql.SQLException;
>
> import javax.sql.DataSource;
>
> import com.metricstream.log.Logger;
>
> public class ItgrcDataSource implements DataSource {
>     private Connection con = null;
>
>     @Override
>     public PrintWriter getLogWriter() throws SQLException {
>         return new PrintWriter(Logger.getLogPrinter());
>     }
>
>     @Override
>     public void setLogWriter(PrintWriter out) throws SQLException {
>     }
>
>     @Override
>     public void setLoginTimeout(int seconds) throws SQLException {
>     }
>
>     @Override
>     public int getLoginTimeout() throws SQLException {
>         return 0;
>     }
>
>     @Override
>     public <T> T unwrap(Class<T> iface) throws SQLException {
>         return null;
>     }
>
>     @Override
>     public boolean isWrapperFor(Class<?> iface) throws SQLException {
>         return false;
>     }
>
>     @Override
>     public Connection getConnection() throws SQLException {
>         synchronized (this) {
>             if (con == null) {
>                 try {
>                     String driverName = "oracle.jdbc.driver.OracleDriver";
>                     Class.forName(driverName);
>
>                     String serverName = "server.metricstream.com";
>                     String portNumber = "1521";
>                     String sid = "sid";
>                     String url = "jdbc:oracle:thin:@" + serverName + ":" +
> portNumber + ":" + sid;
>                     String username = "user";
>                     String password = "password";
>                     con = DriverManager.getConnection(url, username,
> password);
>                     con.setAutoCommit(true);
>                 } catch (ClassNotFoundException e) {
>                 } catch (SQLException e) {
>                 }
>             }
>         }
>
>         return con;
>     }
>
>     @Override
>     public Connection getConnection(String username, String password) throws
> SQLException {
>         return null;
>     }
> }
>
> Main Method:
> public class TempAsset1 {
>     private static final String CLASS_ID = AssetsList.class.getName();
>     @Inject
>     private ExUcfAssetMetadataMapper metaDataDao;
>     @Inject
>     private ExUcfAssetBasicinfoMapper basicInfoDao;
>     @Inject
>     private ExUcfAssetReferenceMapper referenceDao;
>
>     public static void main(String args[]) throws FileNotFoundException,
> AppException, SQLException {
>         FileInputStream fi = new FileInputStream("UCF_Assets_List.xml");
>         IParser parser = new UcfAssetsListParser();
>         UCFAssetsList ucfa = (UCFAssetsList) parser.parse(fi);
>
>         Injector injector = Guice.createInjector(new UcfMybatisModule());
>         TempAsset1 t1 = injector.getInstance(TempAsset1.class);
>         t1.load(ucfa);
>     }
>
>     public void load(final UCFAssetsList ucfAssetsList) throws AppException,
> SQLException {
>         AppLog.info(CLASS_ID, "load");
> ...
>     }
> }
>
> POM file
>     <repositories>
>         <repository>
>             <id>guice-maven</id>
>             <name>guice maven</name>
>             <url>http://guice-maven.googlecode.com/svn/trunk</url>
>         </repository>
>     </repositories>
>     <dependencies>
>         <dependency>
>             <groupId>ms-itgrc</groupId>
>             <artifactId>ms-itgrc-core</artifactId>
>             <version>6.0.1.0.0</version>
>         </dependency>
>         <dependency>
>             <groupId>org.apache.commons</groupId>
>             <artifactId>commons-io</artifactId>
>             <version>1.3.2</version>
>         </dependency>
>         <dependency>
>             <groupId>org.mybatis</groupId>
>             <artifactId>mybatis</artifactId>
>             <version>3.0.6</version>
>         </dependency>
>         <dependency>
>             <groupId>org.mybatis</groupId>
>             <artifactId>mybatis-guice</artifactId>
>             <version>3.0</version>
>         </dependency>
>         <dependency>
>             <groupId>com.google.code.guice</groupId>
>             <artifactId>guice</artifactId>
>             <version>2.0.1</version>
>         </dependency>
>         <dependency>
>             <groupId>org.mybatis</groupId>
>             <artifactId>mybatis-guice</artifactId>
>             <version>3.0</version>
>         </dependency>
>     </dependencies>
>
> Please let me know where did i go wrong?
>
> Thanks,
> GP
>
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate
star

Re: Issue with MyBatis/Guice

gpuliyar
Thanks Jeff.
Issue is resolved.

- GP

On Feb 20, 5:18 pm, Jeff Butler <[hidden email]> wrote:

> Upgrade your versions...
>
>          <dependency>
>              <groupId>org.mybatis</groupId>
>              <artifactId>mybatis-guice</artifactId>
>              <version>3.2</version>
>          </dependency>
>          <dependency>
>              <groupId>com.google.inject</groupId>
>              <artifactId>guice</artifactId>
>              <version>3.0</version>
>          </dependency>
>
> Jeff Butler
>
>
>
>
>
>
>
> On Mon, Feb 20, 2012 at 12:20 AM, Gopalakrishnan <[hidden email]> wrote:
> > Hi MyBatis/Guice team,
>
> > I have getting the below exception:
> > Exception in thread "main" java.lang.NoSuchMethodError:
> > com.google.inject.util.Providers.guicify(Ljavax/inject/Provider;)Lcom/google/inject/Provider;
> >     at
> > org.mybatis.guice.AbstractMyBatisModule.bindMapper(AbstractMyBatisModule.java:62)
> >     at
> > org.mybatis.guice.MyBatisModule.addMapperClass(MyBatisModule.java:458)
> >     at
> > com.metricstream.itgrc.ucf.guice.modules.UcfMybatisModule.initialize(UcfMybatisModule.java:23)
> >     at
> > org.mybatis.guice.MyBatisModule.internalConfigure(MyBatisModule.java:98)
> >     at
> > org.mybatis.guice.AbstractMyBatisModule.configure(AbstractMyBatisModule.java:53)
> >     at com.google.inject.AbstractModule.configure(AbstractModule.java:59)
> >     at
> > com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:223)
> >     at com.google.inject.spi.Elements.getElements(Elements.java:101)
> >     at
> > com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:127)
> >     at
> > com.google.inject.internal.InjectorBuilder.build(InjectorBuilder.java:103)
> >     at com.google.inject.Guice.createInjector(Guice.java:93)
> >     at com.google.inject.Guice.createInjector(Guice.java:70)
> >     at com.google.inject.Guice.createInjector(Guice.java:60)
> >     at
> > com.metricstream.itgrc.ucf.service.TempAsset1.main(TempAsset1.java:41)
>
> > MyBatisModule Code:
> > package com.metricstream.itgrc.ucf.guice.modules;
>
> > import java.util.Properties;
>
> > import javax.sql.DataSource;
>
> > import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
> > import org.mybatis.guice.MyBatisModule;
> > import org.mybatis.guice.datasource.builtin.PooledDataSourceProvider;
>
> > import com.google.inject.name.Names;
> > import com.metricstream.itgrc.core.service.ItgrcDataSourceProvider;
> > import com.metricstream.itgrc.ucf.abator.dao.ExUcfAssetBasicinfoMapper;
> > import com.metricstream.itgrc.ucf.abator.dao.ExUcfAssetMetadataMapper;
> > import com.metricstream.itgrc.ucf.abator.dao.ExUcfAssetReferenceMapper;
>
> > public class UcfMybatisModule extends MyBatisModule {
>
> >     @Override
> >     protected void initialize() {
> >         bindTransactionFactoryType(JdbcTransactionFactory.class);
> >         bind(DataSource.class).toProvider(ItgrcDataSourceProvider.class);
> >         addMapperClass(ExUcfAssetMetadataMapper.class);
> >         addMapperClass(ExUcfAssetBasicinfoMapper.class);
> >         addMapperClass(ExUcfAssetReferenceMapper.class);
> >     }
>
> >     protected static Properties createTestProperties() {
> >         Properties myBatisProperties = new Properties();
> >         myBatisProperties.setProperty("mybatis.environment.id",
> > "development");
> >         return myBatisProperties;
> >     }
> > }
>
> > DataSourceProvider Code:
> > package com.metricstream.itgrc.core.service;
>
> > import javax.sql.DataSource;
> > import com.google.inject.Provider;
>
> > public class ItgrcDataSourceProvider implements Provider<DataSource> {
>
> >     @Override
> >     public DataSource get() {
> >         return new ItgrcDataSource();
> >     }
> > }
>
> > DataSource Code:
> > package com.metricstream.itgrc.core.service;
>
> > import java.io.PrintWriter;
> > import java.sql.Connection;
> > import java.sql.DriverManager;
> > import java.sql.SQLException;
>
> > import javax.sql.DataSource;
>
> > import com.metricstream.log.Logger;
>
> > public class ItgrcDataSource implements DataSource {
> >     private Connection con = null;
>
> >     @Override
> >     public PrintWriter getLogWriter() throws SQLException {
> >         return new PrintWriter(Logger.getLogPrinter());
> >     }
>
> >     @Override
> >     public void setLogWriter(PrintWriter out) throws SQLException {
> >     }
>
> >     @Override
> >     public void setLoginTimeout(int seconds) throws SQLException {
> >     }
>
> >     @Override
> >     public int getLoginTimeout() throws SQLException {
> >         return 0;
> >     }
>
> >     @Override
> >     public <T> T unwrap(Class<T> iface) throws SQLException {
> >         return null;
> >     }
>
> >     @Override
> >     public boolean isWrapperFor(Class<?> iface) throws SQLException {
> >         return false;
> >     }
>
> >     @Override
> >     public Connection getConnection() throws SQLException {
> >         synchronized (this) {
> >             if (con == null) {
> >                 try {
> >                     String driverName = "oracle.jdbc.driver.OracleDriver";
> >                     Class.forName(driverName);
>
> >                     String serverName = "server.metricstream.com";
> >                     String portNumber = "1521";
> >                     String sid = "sid";
> >                     String url = "jdbc:oracle:thin:@" + serverName + ":" +
> > portNumber + ":" + sid;
> >                     String username = "user";
> >                     String password = "password";
> >                     con = DriverManager.getConnection(url, username,
> > password);
> >                     con.setAutoCommit(true);
> >                 } catch (ClassNotFoundException e) {
> >                 } catch (SQLException e) {
> >                 }
> >             }
> >         }
>
> >         return con;
> >     }
>
> >     @Override
> >     public Connection getConnection(String username, String password) throws
> > SQLException {
> >         return null;
> >     }
> > }
>
> > Main Method:
> > public class TempAsset1 {
> >     private static final String CLASS_ID = AssetsList.class.getName();
> >     @Inject
> >     private ExUcfAssetMetadataMapper metaDataDao;
> >     @Inject
> >     private ExUcfAssetBasicinfoMapper basicInfoDao;
> >     @Inject
> >     private ExUcfAssetReferenceMapper referenceDao;
>
> >     public static void main(String args[]) throws FileNotFoundException,
> > AppException, SQLException {
> >         FileInputStream fi = new FileInputStream("UCF_Assets_List.xml");
> >         IParser parser = new UcfAssetsListParser();
> >         UCFAssetsList ucfa = (UCFAssetsList) parser.parse(fi);
>
> >         Injector injector = Guice.createInjector(new UcfMybatisModule());
> >         TempAsset1 t1 = injector.getInstance(TempAsset1.class);
> >         t1.load(ucfa);
> >     }
>
> >     public void load(final UCFAssetsList ucfAssetsList) throws AppException,
> > SQLException {
> >         AppLog.info(CLASS_ID, "load");
> > ...
> >     }
> > }
>
> > POM file
> >     <repositories>
> >         <repository>
> >             <id>guice-maven</id>
> >             <name>guice maven</name>
> >             <url>http://guice-maven.googlecode.com/svn/trunk</url>
> >         </repository>
> >     </repositories>
> >     <dependencies>
> >         <dependency>
> >             <groupId>ms-itgrc</groupId>
> >             <artifactId>ms-itgrc-core</artifactId>
> >             <version>6.0.1.0.0</version>
> >         </dependency>
> >         <dependency>
> >             <groupId>org.apache.commons</groupId>
> >             <artifactId>commons-io</artifactId>
> >             <version>1.3.2</version>
> >         </dependency>
> >         <dependency>
> >             <groupId>org.mybatis</groupId>
> >             <artifactId>mybatis</artifactId>
> >             <version>3.0.6</version>
> >         </dependency>
> >         <dependency>
> >             <groupId>org.mybatis</groupId>
> >             <artifactId>mybatis-guice</artifactId>
> >             <version>3.0</version>
> >         </dependency>
> >         <dependency>
> >             <groupId>com.google.code.guice</groupId>
> >             <artifactId>guice</artifactId>
> >             <version>2.0.1</version>
> >         </dependency>
> >         <dependency>
> >             <groupId>org.mybatis</groupId>
> >             <artifactId>mybatis-guice</artifactId>
> >             <version>3.0</version>
> >         </dependency>
> >     </dependencies>
>
> > Please let me know where did i go wrong?
>
> > Thanks,
> > GP
Loading...