当我的应用程序尝试使用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>
答案 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模块关联。