2016-04-22 11 views
3

Ich versuche Spring-mybatis in meiner Anwendung zu integrieren. Ich verwende spring 4.1.4 und mybatis 3.2.8java 7 und der Server ist WebSphere Application Server Liberty. Ich benutze eine Spring-Java-Konfigurationsklasse. Dieser Fehler wird nur angezeigt, wenn ich die WAR-Datei bereitstelle. Wenn ich Eclipse zum Bereitstellen des Projekts verwende, ist alles in Ordnung. Die Bereitstellung in Tomcat 8 funktioniert auch.Fehler beim Erstellen von Bean mit dem Namen 'sqlSessionFactory' ... Aufruf der init-Methode fehlgeschlagen; verschachtelte Ausnahme ist java.lang.NullPointerException

@Configuration 
@MapperScan("x.y.z.mappers") 
@PropertySource("classpath:/x/y/z/data_source.properties") 
@EnableTransactionManagement 
public class DataAccessConfiguration { 
    @Autowired 
    private Environment env; 
    @Bean 
    public DataSource dataSource() { 
     DriverManagerDataSource dataSource = new DriverManagerDataSource(); 
     dataSource.setDriverClassName(env.getProperty("driver")); 
     dataSource.setUrl(env.getProperty("url")); 
     dataSource.setUsername(env.getProperty("user")); 
     dataSource.setPassword(env.getProperty("password")); 
     return dataSource; 
    } 
    @Bean 
    public DataSourceTransactionManager transactionManager() { 
     return new DataSourceTransactionManager(dataSource()); 
    } 
    @Bean 
    public SqlSessionFactoryBean sqlSessionFactory() throws Exception {  
     SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); 
     sessionFactory.setDataSource(dataSource()); 
     sessionFactory.setTypeAliasesPackage("x.y.z.portal.model"); 
     return sessionFactory; 
     } 
    } 

Ich habe diese stacktrace

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in a.b.c.DataAccessConfiguration: Invocation of init method failed; nested exception is java.lang.NullPointerException 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1566) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1127) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1051) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:949) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireByType(AbstractAutowireCapableBeanFactory.java:1280) 
... 60 more 

Caused by: java.lang.NullPointerException 
at java.io.FilterInputStream.read(FilterInputStream.java:133) 
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:283) 
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:325) 
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177) 
at java.io.InputStreamReader.read(InputStreamReader.java:184) 
at java.io.BufferedReader.fill(BufferedReader.java:154) 
at java.io.BufferedReader.readLine(BufferedReader.java:317) 
at java.io.BufferedReader.readLine(BufferedReader.java:382) 
at org.apache.ibatis.io.DefaultVFS.list(DefaultVFS.java:93) 
at org.apache.ibatis.io.VFS.list(VFS.java:193) 
at org.apache.ibatis.io.ResolverUtil.find(ResolverUtil.java:216) 
at org.apache.ibatis.type.TypeAliasRegistry.registerAliases(TypeAliasRegistry.java:127) 
at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:399) 
at org.mybatis.spring.SqlSessionFactoryBean.afterPropertiesSet(SqlSessionFactoryBean.java:355) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1625) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1562) 
+0

vielleicht das? https://github.com/mybatis/mybatis-3/issues/497 – leeor

+0

das Packen der Klassen als ein jar in WEB-INF/lib löst das Problem. siehe https://stripesframework.atlassian.net/browse/STS-922 – user2282936

Antwort

0

Stattdessen versuchen, diese Anwendung mit Mybatis zu integrieren. Fügen Sie den folgenden Code zu spring-dispatcher-servlet.xml hinzu.

<context:property-placeholder location="x/y/z/data_source.properties"/> 

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
      <property name="driverClassName"><value>${database.driver}</value></property> 
      <property name="url"><value>${database.url}</value></property> 
      <property name="username"><value>${database.username}</value></property> 
      <property name="password"><value>${database.password}</value></property> 
      <property name="maxActive"><value>${database.maxactiveconnections}</value></property> 
      <property name="maxIdle"><value>${database.idleconnections}</value></property> 
      <property name="initialSize"><value>${database.initialSize}</value></property> 

    </bean> 

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="configLocation" value="/WEB-INF/mybatis-config.xml"/> 
    </bean> 

    <bean id="Dao" class="org.mybatis.spring.mapper.MapperFactoryBean"> 
     <property name="sqlSessionFactory" ref="sqlSessionFactory"/>  
     <property name="mapperInterface" value="com.dao.Dao" /> 
    </bean>