自由中的数据源初始化错误

时间:2017-02-03 07:06:06

标签: xml datasource jndi websphere-liberty

当我的应用程序尝试使用jndi通过数据源连接到数据库时,它显示我的数据源为null。以下是所有相关代码。

XML文件

 <?xml version="1.0" encoding="UTF-8"?>
    <server description="data source configuration">
        <dataSource id="sybase"
                    jndiName="jdbc/sybase"
                    type="javax.sql.DataSource"
        >
            <jdbcDriver>
                <library>
                    <fileset dir="${ibs.dbdrivers.dir}" includes="jconn3.jar"/>
                </library>
            </jdbcDriver>

            <properties.sybase databaseName="XXX" URL="jdbc:sybase:Tds:XXX:5000"/>
            <recoveryAuthData user="XX" password="XX"/>
        </dataSource>
    </server>

移民类

@Configuration
public class SybaseDataConfig {

  @Bean
  public DataSource localDataSource() {
    JndiTemplate jndi = new JndiTemplate();
    try {
      return (DataSource) jndi.lookup("java:comp/env/jdbc/sybase");
    } catch (NamingException e) {
      throw new BeanCreationException("dataSource", "Error looking up data source", e);
    }
  } 
}

DAOimp课程

public class DAOimp implements IDAOimp{

  private JdbcTemplate jdbcTemplate;

  private SybaseDataConfig sybase;
  @Autowired
  public void setDataSource(DataSource dataSource) {
    this.jdbcTemplate = new JdbcTemplate(sybase.localDataSource());
  }
  //some code  

}

IBM的Web-bnd.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-bnd xmlns="http://websphere.ibm.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-web-bnd_1_0.xsd"
         version="1.0">
    <virtual-host name="default_host"/>
    <resource-ref name="jdbc/sybase" binding-name="jdbc/sybase"/>
</web-bnd>

的web.xml

<resource-ref>
        <res-ref-name>jdbc/sybase</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>

当我的控制器调用daoimpl类中的方法时,它表示数据源为null。我可能知道什么是错的,解决方案是什么。 提前谢谢!

更新:

   <featureManager>
        <feature>webProfile-6.0</feature>
        <feature>jpa-2.0</feature>
        <feature>ssl-1.0</feature>
        <feature>localConnector-1.0</feature>
        <feature>jdbc-4.0</feature> 
    </featureManager>

1 个答案:

答案 0 :(得分:2)

要缩小问题的原因,首先通过临时切换到直接查找来确认您的服务器XML配置是否有效(看起来是否正确):

return (DataSource) javax.naming.InitialContext.doLookup("jdbc/sybase");

如果不成功,您应该看到有助于识别原因的异常或一般命名异常,在这种情况下,请检查服务器日志中是否有任何警告或错误。

如果成功,则通过临时切换到间接查找来确认您的部署描述符和绑定是否正确

return (DataSource) javax.naming.InitialContext.doLookup("java:comp/env/jdbc/sybase");

如果成功,您需要具有Spring专业知识的人来回答这个问题。

如果不成功,部署描述符或绑定可能不正确(它们看起来正确)或放在错误的位置(它们属于WEB-INF),或者localDataSource方法可能没有在线程上运行与绑定所属的Web模块关联。