我在websphere上设置了一个Web应用程序,但它无法找到webphere提供的数据源的JNDI名称。
我是websphere的新手,之前没有使用过JDNI,我发现很难直接使用这个应用程序。
如何创建一个可以在websphere上运行并使用websphere提供的数据源的简单Web应用程序。或者我可以尝试任何现有的演示吗?
我认为这样的应用程序可以帮助我找到问题。
答案 0 :(得分:4)
如果使用Context查找,则必须在部署描述符(web.xml)中声明新的资源引用:
<resource-ref>
<res-ref-name>jdbc/newReference</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
但这不是全部。您还必须将此新引用绑定到服务器的JDBC资源(ibm-web-bnd.xml):
<resource-ref name="jdbc/newReference" binding-name="jdbc/ressourceOnServer"/>
请注意,此机制与使用sun-web.xml文件在Glassfish上执行的操作非常相似,只是绑定有点不同:
<resource-ref>
<res-ref-name>jdbc/newReference</res-ref-name>
<jndi-name>jdbc/ressourceOnServer</jndi-name>
</resource-ref>
看看这个问题:How do I connect to a Websphere Datasource with a given JNDI name?。如果您需要更多细节,我可以举一个例子。
答案 1 :(得分:2)
在websphere中设置数据源时,系统会要求您输入所需的JNDI名称。据我所知,它通常类似于“jdbc / appname”。
然后,如果您使用JPA,则只需将给定名称放在persistence.xml文件中:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="appname" transaction-type="RESOURCE_LOCAL">
<non-jta-data-source>jdbc/appname</non-jta-data-source>
<!-- CLASS TO PERSIST -->
</persistence-unit>
</persistence>
我现在注意到我在我的应用程序中将数据源列为非jta,但我相信WebSphere的数据源是JTA感知的。你可能想检查一下。
答案 2 :(得分:1)
打开您的Websphere管理控制台。
点击资源&gt;&gt; 数据来源。
您将获得已配置的数据源列表。在列表中将有Default Datasource
。点击它。在配置表单中,有一个名为JNDI name
的字段。这是Websphere提供的默认数据源的jndi名称。
您可以使用注释注入在Web组件中注入DataSource。
@Resource(name = "DefaultDatasource")
DataSource ds;
教程适用于tomcat,但请参阅servlet示例和使用datasource作为注释注入&gt;&gt; http://theopentutorials.com/tutorials/java-ee/servlet/servlet-datasource-resource-injection-in-tomcat/