如何查找:
Context envContext = (Context)initContext.lookup("java:comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/MyDatasource");
继续?
我的意思是说如何搜索名称 MyDataSource
并最终返回什么内容?
添加了两个条目以连接到数据库。 WEB-INF/web.xml
中的一个是:
<resource-ref>
<description>my connection</description>
<res-ref-name>jdbc/MyDatasource</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
和META-INF/context.xml
中添加的另一个是:
<Resource name="jdbc/MyDatasource" auth="Container" type="javax.sql.DataSource"
driverClassName="org.apache.derby.jdbc.ClientDriver"
url="jdbc:derby://localhost:1527/My Database;create=true"
username="me" password="me"
maxActive="20" maxIdle="10" maxWait="-1" />
这2个条目如何帮助查找?
先看了什么:web.xml
或context.xml
?
请在查询中解释整个过程。
答案 0 :(得分:1)
资源位于以下偏好顺序:web.xml
(通过<resource-ref>
元素,context.xml
,server.xml
(通过<GlobalNamingResources>
)。请注意资源已定义您的<Context>
中实际上不需要在<resource-ref>
中包含相应的web.xml
元素。请参阅有关JNDI资源的Tomcat文档:http://tomcat.apache.org/tomcat-7.0-doc/jndi-resources-howto.html
答案 1 :(得分:0)
以下是执行查找的步骤:
第1步:
Context context = new InitialContext():
初始上下文是对JNDI查找服务的引用。 它就像进入JNDI虚拟目录树。
第2步:
Object o = context.lookup("mejb"):
在查找中,我们需要给出服务器中部署的bean的名称,以获得对该bean的home接口的引用。然后我们得到java.lang.Object类型的对象将此对象转换为我们查找的任何bean的Home接口。
第3步:
Home home = (Home) PortableRemoteObject.narrow(o,Home.class):
我们实际上需要将对象转换为我们认为它是类型的类型。但是,由于这是基于IIOP的RMI,我们似乎需要使用PortableRemoteObject.narrow方法,因为它似乎将对象类型过滤为实际的对象类型并检查错误。