MyEclipse6Java开发中文教程 30的开发相对好一点,有一个实体Bean的生成向导以及从数据库生成实体Bean的反向 工程功能。开源免费的 Netbeans6对EJB的开发也支持的不错。 1631配置应用服务器 在第六章管理应用服务器中,我们已经详细讨论了配置应用服务器的普遍方法,读者 可以参考那一章的内容完成配置。那么在我们本章的例子中用的服务器是 JBoss422GA 其配置步骤是:点击 Servers视图的工具栏上的按钮来打开服务器配置对话框,或者从 主菜单中选择 Window> Preferences,这样就可以打开配置对话框。 当配置对话框打开后,可以展开左侧的树,选择 My Eclipse> Servers,然后就可以看 到左侧列出的可用的应用服务器连接器了,选中 JBoss4x,接着在右侧的 JBoss home directory处输入JBos的主目录,例如cψboss-422GA,随后需要根据情況添加一个 JDK,因为 JBoss必须使用JDK才能运行,最后点击 Enable单选钮完成配置。对话框中 的 Server name可以取值为al,eut和mnma,对应着三个实际存在的自录,位于 c:boss422 GAlserver下面(关于这三个目录差别的介绍,参考不节内容)。另外,默 认情况下 JBoss只监听来自本地( localhost)的连接请求,如果读者希望能够通过局域网 来测试的话,必须设置 Optional program arguments为-b00.0.0,关于此一问题在14 JBoss服务器的下载,安装和运行(可选)一节中也有介绍。具体配置读者可以参考图16.16 lter text JBoss 4.x JBoss server 0s5 + JBoss 3.x ●)Enab1e ○ Disable - JDK Launch JBoss home directory C: \jboss-4.2.2. GA defat Optional program arguments: -b0.0.0.0 +.JOnAS + JRun Optional shut down arguments shut down 图1616配置 JBoss服务器 163.2 JBoss服务器目录结构简介 开源版本的 JBoss基于微内核和插件机制进行设计,因此其服务器的各种功能都是通 过插件的方式实现的。目前来说 JBoss的Web层是基于 Tomcat内核实现的,不过 JBoss 的管理功能比较弱,其控制台只能浏览组件,无法修改,也无法实现人工重新部署。另外 JBoss目前尚未通过 Java ee5全面认证,这意味着某些功能缺失,对EJB3的支持尚可, 其实体Bean是通过 Hibernate实现的。很遗憾的 JBoss的开源版本不带说明文档,因此很 多功能只能参考配置文件中的注释来修改。不过,读者可以购买 JBoss商业版本,带有完 整的文档和全面的功能。 JBoss4安装之后,得到如下表所示的目录结构 目录 描述 启动和关闭 JBoss的脚本。 run. bat启动服务器,有一些附加参数可用,例如-b 和-c; shutdown.bat关闭服务器。 刘长炯著
MyEclipse 6 Java 开发中文教程 21 刘长炯著 3.0 的开发相对好一点,有一个实体 Bean 的生成向导以及从数据库生成实体 Bean 的反向 工程功能。开源免费的 Netbeans 6 对 EJB 的开发也支持的不错。 16.3.1 配置应用服务器 在第六章 管理应用服务器中,我们已经详细讨论了配置应用服务器的普遍方法,读者 可以参考那一章的内容完成配置。那么在我们本章的例子中用的服务器是 JBoss 4.2.2GA, 其配置步骤是:点击 Servers 视图的工具栏上的 按钮来打开服务器配置对话框,或者从 主菜单中选择 Window > Preferences,这样就可以打开配置对话框。 当配置对话框打开后,可以展开左侧的树,选择 MyEclipse > Servers,然后就可以看 到左侧列出的可用的应用服务器连接器了,选中 JBoss 4.x,接着在右侧的 JBoss home directory 处输入 JBoss 的主目录,例如 C:\jboss-4.2.2.GA,随后需要根据情况添加一个 JDK,因为 JBoss 必须使用 JDK 才能运行,最后点击 Enable 单选钮完成配置。对话框中 的 Server name 可以取值为 all,default 和 minimal,对应着三个实际存在的目录,位于 C:\jboss-4.2.2.GA\server 下面(关于这三个目录差别的介绍,参考下一节内容)。另外,默 认情况下 JBoss 只监听来自本地(localhost)的连接请求,如果读者希望能够通过局域网 来测试的话,必须设置 Optional program arguments 为 -b 0.0.0.0,关于此一问题在 1.4 JBoss 服务器的下载,安装和运行(可选)一节中也有介绍。具体配置读者可以参考图 16.16。 图 16.16 配置 JBoss 服务器 16.3.2 JBoss 服务器目录结构简介 开源版本的 JBoss 基于微内核和插件机制进行设计,因此其服务器的各种功能都是通 过插件的方式实现的。目前来说 JBoss 的 Web 层是基于 Tomcat 内核实现的,不过 JBoss 的管理功能比较弱,其控制台只能浏览组件,无法修改,也无法实现人工重新部署。另外 JBoss 目前尚未通过 Java EE 5 全面认证,这意味着某些功能缺失,对 EJB 3 的支持尚可, 其实体 Bean 是通过 Hibernate 实现的。很遗憾的 JBoss 的开源版本不带说明文档,因此很 多功能只能参考配置文件中的注释来修改。不过,读者可以购买 JBoss 商业版本,带有完 整的文档和全面的功能。 JBoss 4 安装之后,得到如下表所示的目录结构: 目录 描述 bin 启动和关闭 JBoss 的脚本。run.bat 启动服务器,有一些附加参数可用,例如-b 和-c;shutdown.bat 关闭服务器
MyEclipse6Java开发中文教程 client 客户端访问 JBoss服务(远程调用EJB等)所需的Java类库 不是文档,只是一些配置的样本文件(数据源配置等)和XML的DTD, Schema 文件。包括下列子目录:dtd, examples, licenses, schema, tests lib 包括 JBoss启动时加载的全局类库(以及一些 JBoss内核类库),并被所有 JBoss Server配置共享(不要放置JDBC驱动等全局类库到此处)。 各种 JBoss服务器配置(相当于 Windows中每个用户拥有自己不同的桌面一样, 但是大家用的系统都是一样的)。每个配置必须放在不同的子目录。子目录的名 字表示配置的名字。 JBoss包含3个默认的配置: minimal, default和a,运 时可以切换,例如: run bat-cal将会运行这个配置。可以创建自己的配 置,但同一时刻默认情况下只能运行一个配置。 minimal包含了最简配置 server/all JBoss的完全配置,启动所有服务,包括集群和loP,如果需要全部功能,可 以使用此配置。启用方式: run. bat-ca,或者在 MyEclipse连接器中输入al erver/default JBoss的默认配置目录。默认运行时即启用此配置,包含大多数功能。 server/置/ conf| JBoss的配置文件,包括身份验证等 sene配置 data JBoss的配置数据,不要删除或者手工修改,否则会出错。 server!配置| JBoss的热部署目录。放到这里的任何文件或目录会被 JBoss自动部署,包括 deploy EJB、WAR、EAR,Web服务,以及数据源等服务。 server/配置№b当前配置的共享JAR文件(例如JDBC驱动), JBoss在启动特定配置时加载。 server/置 logJBoss的日志文件。 sene配置 mp JBoss的临时文件 server/配置|JBos的JsP工作文件夹,包含了编译后的JP对应的 Servlet源代码文件和 类文件,可在必要时清空以纠正某些页面无法刷新问题 图1617列出了 jboss的目录结构,以及发布的应用列表。可以看到我们上一章所做 的练习 JBossWSwar也在其中,只要把1613节中所说的文件复制到此处即可发布,或者 是建立对应的目录也可,例如: myEJB」arl。另外,数据源的发布也可以通过此处完成,此 时只需将XML文件复制到此处即可。当新文件覆盖了老文件时,即可激活重新部署,不过 个别时候会出错无法完成,此时需要重启服务器。 日jbos4.2.2.GA A Oejb3 deployer Chttp-invoker. ajboss-bean deploy +0 lib ojboss-web deployer serve □ jboss.sar 白a11 JBosswS, war □jms +□conf 口dat H O depl Quuid-key-generator,sar o lib egbsh-deployer.xml 10 gicache-invalidation-serv ±白tmp g]client-deployer-service os minimal 图1617 JBoss的目录结构 刘长炯著
MyEclipse 6 Java 开发中文教程 22 刘长炯著 client 客户端访问 JBoss 服务(远程调用 EJB 等)所需的 Java 类库 docs 不是文档,只是一些配置的样本文件(数据源配置等)和 XML 的 DTD,Schema 文件。包括下列子目录:dtd,examples,licenses,schema,tests。 lib 包括JBoss 启动时加载的全局类库(以及一些JBoss内核类库),并被所有JBoss Server 配置共享(不要放置 JDBC 驱动等全局类库到此处)。 server 各种JBoss 服务器配置(相当于Windows中每个用户拥有自己不同的桌面一样, 但是大家用的系统都是一样的)。每个配置必须放在不同的子目录。子目录的名 字表示配置的名字。JBoss 包含 3 个默认的配置:minimial,default 和 all,运 行时可以切换,例如:run.bat –c all 将会运行 all 这个配置。可以创建自己的配 置,但同一时刻默认情况下只能运行一个配置。minimial 包含了最简配置。 server/all JBoss 的完全配置,启动所有服务,包括集群和 IIOP,如果需要全部功能,可 以使用此配置。 启用方式:run.bat –c all,或者在 MyEclipse 连接器中输入 all server/default JBoss 的默认配置目录。默认运行时即启用此配置,包含大多数功能。 server/配置/conf JBoss 的配置文件,包括身份验证等。 server/配置/data JBoss 的配置数据,不要删除或者手工修改,否则会出错。 server/ 配 置 /deploy JBoss 的热部署目录。放到这里的任何文件或目录会被 JBoss 自动部署,包括 EJB、WAR 、EAR,Web 服务,以及数据源等服务。 server/配置/lib 当前配置的共享 JAR 文件(例如 JDBC 驱动),JBoss 在启动特定配置时加载。 server/配置/log JBoss 的日志文件。 server/配置/tmp JBoss 的临时文件。 server/ 配 置 /work JBoss 的 JSP 工作文件夹,包含了编译后的 JSP 对应的 Servlet 源代码文件和 类文件,可在必要时清空以纠正某些页面无法刷新问题。 图 16.17 列出了 jboss 的目录结构,以及发布的应用列表。可以看到我们上一章所做 的练习 JBossWS.war 也在其中,只要把 16.1.3 节中所说的文件复制到此处即可发布,或者 是建立对应的目录也可,例如:myEJB.jar/。另外,数据源的发布也可以通过此处完成,此 时只需将 XML 文件复制到此处即可。当新文件覆盖了老文件时,即可激活重新部署,不过 个别时候会出错无法完成,此时需要重启服务器。 图 16.17 JBoss 的目录结构
MyEclipse6Java开发中文教程 164走进 Java ee:JND 本节内容对JND进行介绍,并编写程序访问JND。 1641JND|简介 俗话说中国人不知道长城,就像当于美国人不知道华盛顿一样可笑。不过,如果您学完 了EJB仍然不知道JND是什么,那也是件相当严重的问题。JND|是打开 Java ee大门的 钥匙,有了它您才能理解数据源,EJB等等种种神奇的东西。 JNDl是什么呢?JND( Java Naming and Directory Interface)是指通过提供统一的 Java ap|访问不同的命名和目录服务。包括下列功能 ●把名字和对象联系起来 提供一个工具,根据名字寻找资源,我们称为査寻或搜索资源 类似于文件系统或者地址薄,一棵绑满了对象的树,不同的是树根在上 举个例子,大家的电脑上都有一棵文件树,大家找文件的时候,是从根节点我的电脑开始的, 然后从上到下一步步的找。文件系统就是一个命名服务,它将我们能够理解的东西,文件名, 和我们不能直接操作的东西:硬盘上的一格格的小磁铁所存储的数据,关联起来。虽然从本 质上说,当我们打开一个电影文件的时候,是操作系统通过复杂的线路打开了硬盘或者光盘 上的文件。这就是命名服务的功能所在:将文件名和磁盘上的文件关联;提供工具,文件浏 览器,可以査找资源并操作资源。由于通常操作系统的开发商,例如微软,已经做好了文件 浏览器,它相当于命名服务提供者,那么对于我们这些用户来说,只需要按照规定操作,点 击鼠标,即可打开或者复制删除某个文件,而无须知道底层的细节(即使从来没听说过硬盘 也无所谓,您要的只是数据,那个文件)。磁盘相当于一个服务器,存放着大量真实的二进 制0101的数据,而我们,则通过微软的这个系统,来访问到想要的数据。而且,文件一般 都有根文件夹,根文件夹下面可以放文件,也可以继续放一个子文件夹,层层嵌套。图16.18 已经很好的展示了JND的结构。所不同的是,Jaa中的每个节点,存放的是Java Initial C 对象1 日录A 目录B 日录A1 对象2 对象3 图1618JND树状结构 刘长炯著
MyEclipse 6 Java 开发中文教程 23 刘长炯著 16.4 走进 Java EE:JNDI 本节内容对 JNDI 进行介绍,并编写程序访问 JNDI。 16.4.1 JNDI 简介 俗话说中国人不知道长城,就像当于美国人不知道华盛顿一样可笑。不过,如果您学完 了 EJB 仍然不知道 JNDI 是什么,那也是件相当严重的问题。JNDI 是打开 Java EE 大门的 钥匙,有了它您才能理解数据源,EJB 等等种种神奇的东西。 JNDI 是什么呢?JNDI(Java Naming and Directory Interface)是指通过提供统一的 Java API 访问不同的命名和目录服务。包括下列功能: z 把名字和对象联系起来 z 提供一个工具,根据名字寻找资源,我们称为查寻或搜索资源 z 类似于文件系统或者地址薄, 一棵绑满了对象的树,不同的是树根在上 举个例子,大家的电脑上都有一棵文件树,大家找文件的时候,是从根节点我的电脑开始的, 然后从上到下一步步的找。文件系统就是一个命名服务,它将我们能够理解的东西,文件名, 和我们不能直接操作的东西:硬盘上的一格格的小磁铁所存储的数据,关联起来。虽然从本 质上说,当我们打开一个电影文件的时候,是操作系统通过复杂的线路打开了硬盘或者光盘 上的文件。这就是命名服务的功能所在:将文件名和磁盘上的文件关联;提供工具,文件浏 览器,可以查找资源并操作资源。由于通常操作系统的开发商,例如微软,已经做好了文件 浏览器,它相当于命名服务提供者,那么对于我们这些用户来说,只需要按照规定操作,点 击鼠标,即可打开或者复制删除某个文件,而无须知道底层的细节(即使从来没听说过硬盘 也无所谓,您要的只是数据,那个文件)。磁盘相当于一个服务器,存放着大量真实的二进 制 0101 的数据,而我们,则通过微软的这个系统,来访问到想要的数据。而且,文件一般 都有根文件夹,根文件夹下面可以放文件,也可以继续放一个子文件夹,层层嵌套。图 16.18 已经很好的展示了 JNDI 的结构。所不同的是,Java 中的每个节点,存放的是 Java 图 16.18 JNDI 树状结构
MyEclipse6Java开发中文教程 Java Application JNDI API Naming Manager JNDI SPI JNDI LDAP DNS NIS NDS RMI CORBA Implementation Possibilities t拿拿拿拿 图1619小NDAP体系结构《 对象,而不是磁盘文件,这个对象可以是任意类型,只要实现了序列化接口就可以了。包括 但不限于:字符串,整数,EJB,Web服务,数据源等等,这样一来开发人员就不用关心 这些数据的来源,只需要使用即可,就相当于看电影文件时不需要关心到底是硬盘还是光盘 的文件。JND服务器就是一台没有预装数据的空白磁盘外加管理器。图16.19列出了其层 次结构。由于JND规定了三层结构,对于程序员来说,只需要了解JND的AP|,这就相 当于大家只需知道怎么找到文件浏览器就行了,剩下的事情,交给JND|SPl( Service Provider Interface),它们来实现具体的读写功能,包括读写光盘,软盘,硬盘。因此,JNDl 具有替代功能,例如可以用 Windows,也可以用 Linux,来读取同一张光盘上的内容而不会 出现读取错误,这就是替换了服务提供者。正因为如此,除了标准 JNDI AP之外,我们还 需要特定JNDI厂商所提供的驱动程序(一般叫做JND工厂类库),并指定连接参数,即可 访问不同的服务器数据了。所幸的是 JBoss已经提供了一个JND实现,我们可以进行一些 测试 和文件一样,每个对象所在的路径都必须是唯一的,也不允许有重复的上下文。对于对 象来说,有的是只读的,有的是加密的,还有的是只有特定用户才能访问的。JND支持类 似的概念,有的对象属于服务器特定对象,用户无法访问;而有的对象则只能读取,无法修 改和删除,例如 Tomcat通过JND配置的连接池。同样的有的服务器也不支持用户设置自 定义对象,这就相当于只读服务器。 JND|的客户端开发包括下列步骤 1创建初始化上下文( ntialContext。它相当于打开文件浏览器,就像要找文件先要打 开 Windows上的“我的电脑”一样。对本地客户端(例如同一台服务器上的EJB或者Web 层的 Servlet中),可以直接初始化上下文: Context ct= new IntialContext( 对任意客户端的话,则需要设置一些初始化的参数 Hashtable ht = new Hashtable ∥设置工厂类(指定SP1),不同的服务器取值不同 ht put (Context. INITIAL_ CONTEXTFACTORY, org. jnp. interfaces. Naming ContextFactory) 刘长炯著
MyEclipse 6 Java 开发中文教程 24 刘长炯著 图 16.19 JNDI API 体系结构 对象,而不是磁盘文件,这个对象可以是任意类型,只要实现了序列化接口就可以了。包括 但不限于:字符串,整数,EJB,Web 服务,数据源等等,这样一来开发人员就不用关心 这些数据的来源,只需要使用即可,就相当于看电影文件时不需要关心到底是硬盘还是光盘 的文件。JNDI 服务器就是一台没有预装数据的空白磁盘外加管理器。图 16.19 列出了其层 次结构。由于 JNDI 规定了三层结构,对于程序员来说,只需要了解 JNDI 的 API,这就相 当于大家只需知道怎么找到文件浏览器就行了,剩下的事情,交给 JNDI SPI(Service Provider Interface),它们来实现具体的读写功能,包括读写光盘,软盘,硬盘。因此,JNDI 具有替代功能,例如可以用 Windows,也可以用 Linux,来读取同一张光盘上的内容而不会 出现读取错误,这就是替换了服务提供者。正因为如此,除了标准 JNDI API 之外,我们还 需要特定 JNDI 厂商所提供的驱动程序(一般叫做 JNDI 工厂类库),并指定连接参数,即可 访问不同的服务器数据了。所幸的是 JBoss 已经提供了一个 JNDI 实现,我们可以进行一些 测试。 和文件一样,每个对象所在的路径都必须是唯一的,也不允许有重复的上下文。对于对 象来说,有的是只读的,有的是加密的,还有的是只有特定用户才能访问的。JNDI 支持类 似的概念,有的对象属于服务器特定对象,用户无法访问;而有的对象则只能读取,无法修 改和删除,例如 Tomcat 通过 JNDI 配置的连接池。同样的有的服务器也不支持用户设置自 定义对象,这就相当于只读服务器。 JNDI 的客户端开发包括下列步骤: 1.创建初始化上下文(IntialContext)。它相当于打开文件浏览器,就像要找文件先要打 开 Windows 上的“我的电脑”一样。对本地客户端(例如同一台服务器上的 EJB 或者 Web 层的 Servlet 中),可以直接初始化上下文: Context ctx = new IntialContext(); 对任意客户端的话,则需要设置一些初始化的参数: Hashtable ht = new Hashtable(); // 设置工厂类(指定 SPI),不同的服务器取值不同 ht.put (Context.INITIAL_CONTEXT_FACTORY, ”org.jnp.interfaces.NamingContextFactory”);
MyEclipse6Java开发中文教程 ∥指定要连接的服务器地址(相当于JDBC的URL) ht put( Context PROVIDER URL, jnp.: lOcalhost)m如果要加端口,地址为:jnp/ host: port ∥可以设置服务器的用户名和密码(也和JDBC类似) I/ht put(Context. SECURITY PRINCIPAL, "user); Iht put(Context. SECURITY CREDENTIALS, password), Context ctx new InitialContext(ht) 当然编写这一步的时候需要确保放入了驱动类。不同的服务器,驱动程序类( Context Factory.)和URL都是不一样的 然而这样要写很多的代码才可以,另有一种办法就是在类路径根目录下放置配置文件 indi properties,文件代码清单如下 javanaming factory initia/=org jnp. interfaces. Naming ContextFactory java namingprovider. ur/=jnp. /localhost 此时也可以直接编写代码: Context ctx= new IntialContext0:来创建初始化下文。 2创建上下文(类似于创建目录)。代码如下: ctx create Subcontext(dbc∥这相当于在C盘创建了个子目录 如需创建多层目录结构,那么还可以继续这样创建 ctx create Subcontext(jdbc/mysq/); 结构相当于下列层次结构 jdbc/mysql/ 既然有创建上下文,自然也就有删除上下文,对应的代码是: ctx destroy Subcontext(jdbc/mysql") 注意:目前 JBoss并不支持这一销毁的操作,调用会报错: not supported 3绑定对象。因为对象不能凭空产生,需要服务器或者用户创建后,然后绑定到服务器 (相当于上传文件到服务器上),之后才能被访问和使用。 JBoss绑定也是这样做的,它会 启动时首先创建EJB等对象,然后绑定EJB等资源。被绑定的类唯一的要求就是实现 Java. Io. Serializable接口。示意代码如下 ctx rebind( bc/MyName," Bean Soft刘长炯)∥我们可以绑定一个数据源对象等其它可 序列化的对象 还有一个方法名为bin,其主要区别是 rebind0可以重复绑定(或者说更新老对象),而 bind()只能调用一次。 4查找对象。这一步相当于从服务器下载文件,或者说读取文件,代码如下所示 ∥查找JND的对象 Object my Name = ct lookup( jdbc/My Name); ∥打印读取的值 System. out. printin(my Name) 5.从服务器删除对象。这一步的操作叫 unbind,取消绑定,相当于从服务器上删除文 件,后果就是服务器上指定位置的对象被删掉,不能再次访问到。代码如下: ctxunbind(jdbc/My Name); 6关闭上下文。这一步相当于断开到服务器的连接,注意数据仍然在服务器上存在,可 以在下次连接时再次取到。即使服务器关闭了,这些数据也应该可以通过下次启动时加载 ctx. close(/关闭 JND|的这一客户端访问过程如图1620所示。 JND服务器上的数据一般都是针对读取优化的,虽然也能做一些增删改查,但是这些 数据多放置在内存中,并不经常做变动。因此,它不能作为数据库来使用,只能存储少量信 刘长炯著
MyEclipse 6 Java 开发中文教程 25 刘长炯著 // 指定要连接的服务器地址(相当于 JDBC 的 URL) ht.put(Context.PROVIDER_URL,” jnp://localhost”);//如果要加端口,地址为:jnp://host:port // 可以设置服务器的用户名和密码(也和 JDBC 类似) //ht.put(Context.SECURITY_PRINCIPAL,”user”); //ht.put(Context.SECURITY_CREDENTIALS,”password”); Context ctx = new InitialContext (ht); 当然编写这一步的时候需要确保放入了驱动类。不同的服务器,驱动程序类(Context Factory)和 URL 都是不一样的。 然而这样要写很多的代码才可以,另有一种办法就是在类路径根目录下放置配置文件 jndi.properties,文件代码清单如下: java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory java.naming.provider.url=jnp://localhost 此时也可以直接编写代码:Context ctx = new IntialContext();来创建初始化上下文。 2.创建上下文(类似于创建目录)。代码如下: ctx.createSubcontext("jdbc");//这相当于在 C 盘创建了个子目录 如需创建多层目录结构,那么还可以继续这样创建: ctx.createSubcontext("jdbc/mysql"); 结构相当于下列层次结构: /jdbc/mysql/ 。既然有创建上下文,自然也就有删除上下文,对应的代码是: ctx.destroySubcontext("jdbc/mysql"); 注意:目前 JBoss 并不支持这一销毁的操作,调用会报错:not supported。 3.绑定对象。因为对象不能凭空产生,需要服务器或者用户创建后,然后绑定到服务器 (相当于上传文件到服务器上),之后才能被访问和使用。JBoss 绑定也是这样做的, 它会 启动时首先创建 EJB 等对象,然后绑定 EJB 等资源。被绑定的类唯一的要求就是实现 java.io.Serializable 接口。示意代码如下: ctx.rebind("jdbc/MyName", "BeanSoft 刘长炯");// 我们可以绑定一个数据源对象等其它可 序列化的对象 还有一个方法名为 bind(),其主要区别是 rebind()可以重复绑定(或者说更新老对象),而 bind()只能调用一次。 4.查找对象。这一步相当于从服务器下载文件,或者说读取文件,代码如下所示: // 查找 JNDI 上的对象, Object myName = ctx.lookup("jdbc/MyName"); // 打印读取的值 System.out.println(myName); 5.从服务器删除对象。这一步的操作叫 unbind,取消绑定,相当于从服务器上删除文 件,后果就是服务器上指定位置的对象被删掉,不能再次访问到。代码如下: ctx.unbind("jdbc/MyName"); 6.关闭上下文。这一步相当于断开到服务器的连接,注意数据仍然在服务器上存在,可 以在下次连接时再次取到。即使服务器关闭了,这些数据也应该可以通过下次启动时加载。 ctx.close();// 关闭 JNDI 的这一客户端访问过程如图 16.20 所示。 JNDI 服务器上的数据一般都是针对读取优化的,虽然也能做一些增删改查,但是这些 数据多放置在内存中,并不经常做变动。因此,它不能作为数据库来使用,只能存储少量信