- 浏览: 144628 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
邪恶八进制:
译的还不错,其实简单说、JPA三种继承映射体系如下:1.参照父 ...
[译文]JPA的实施模式:映射继承的层次体系 -
mondayw:
卓越上有售,地址:http://www.amazon.cn/m ...
翻译的第一本书出版了 -
黑暗浪子:
哪里有订?
翻译的第一本书出版了 -
mondayw:
不好意思,没有测试过,我以为这只是示范性的代码而已。
[译文]Java EE 6中的依赖注入——第1部分(二) -
jimmy.shine:
不知道你有无测试过这范例程序,在JBoss 6.0M2中,程序 ...
[译文]Java EE 6中的依赖注入——第1部分(二)
原文:DataSource Resource Definition in Java EE 6
作者:Jagadish Ramu
出处:http://blogs.sun.com/enterprisetechtips/entry/datasource_resource_definition_in_java
Java EE应用在通过JDBC API访问关系数据库时用到了DataSource对象,DataSource有一组用来标识和描述其所代表的真实世界中的数据源的属性,这些属性包括了诸如数据库服务器的位置、数据库名称以及用来与服务器通信的网络协议等一类信息。此外,DataSource对象还可与Java命名和目录接口(Java Naming and Directory Interface,JNDI)这一命名服务一起工作,DataSource对象在JNDI命名服务中注册了之后,应用就可以使用JNDI API来访问该DataSource对象,该对象随即可被用来连接其所代表的数据源。
在Java EE 6之前,你可以使用厂商特有的诸如命令一类的机制来创建DataSource对象,然后在应用中使用该Datasource对象,尽管如此,Java EE 6还是为数据源的定义带来了更多的灵活性,其引入了一种新的数据源定义资源,你可以为横跨任何兼容Java EE 6的应用服务器的数据库连接做出可移植的声明,可以通过注解(annotation)或者使用部署描述符来声明数据源定义。
本篇技术贴士给你展示了如何使用注解或者部署描述符来创建数据源定义,其中还包括了演示这些功能的用法的示例应用。
使用注解来创建数据源定义
Java EE 6提供了两个新的用于创建数据源定义的注解:@DataSourceDefinition和@DataSourceDefinitions,这两个注解都位于javax.annotation.sql包中,使用@DataSourceDefinition注解来创建单个的数据源定义,使用@DataSourceDefinitions注解来创建多个数据源定义。
@DataSourceDefinition注解
你可以使用@DataSourceDefinition注解来创建一个数据源定义,可以在诸如应用客户端、servlet或者Enterprise JavaBean(EJB)组件等一类的应用组件类中详细说明该注解,其定义了一个DataSource对象并把它注册到JNDI中。你可以通过使用常用的DataSource属性设置注解元素来配置DataSource对象,可以在注解的属性元素中指明附加的标准和厂商特有的属性。
例如,下面的注解创建了一个用于Derby数据库的数据源定义:
@DataSourceDefinition(name = "java:app/env/Servlet_DataSource", minPoolSize = 0, initialPoolSize = 0, className = "org.apache.derby.jdbc.ClientXADataSource", user = "APP", password = "APP", databaseName = "testdb", properties = {"connectionAttributes=;create=true"} )
数据源定义由name这一元素来唯一标识,这是数据源注册时用到的JDNI名称,可以注意到,在name元素中指定的名称以一个命名空间范围为开始,本例中是java:app。Java EE 6引入了应用组件的环境命名空间,其包括以下的这些范围。
-
java:comp。该命名空间中的名称有对每组件来说的可见性。
-
java:module。该命名空间中的名称由某个模块中的所有组件共享。例如,定义在某个ejb-jar.xml文件中的EJB组件。
-
java:app。该命名空间中的名称由应用中的所有的组件和模块共享。例如,某个.ear文件中的应用客户端、web和EJB组件等。
-
java:gobal。在该命名空间中的名称由服务器中的所有应用共享。
根据在name元素中指定的命名空间范围,你可以让数据源在整个模块、应用或者整个服务器中都是可用的。如果使用这些内容来作为name元素的值的前缀:
-
java:comp/env/,数据源可用于该数据源在其之中定义的那个组件,例如servlet、EJB或者应用的客户端组件等。
-
java:module/env/,数据源可以用于所有那些定义在它的ejb-jar.xml文件中的组件。
-
java:app/env/,数据源可用于应用中的所有组件和模块,例如EJB、servlet和应用的客户端组件等。
@DataSourceDefinitions注解
你可以使用@DataSourceDefinitions注解来在一个组件类中创建多个数据源定义,在该注解的value元素中具体说明每一个数据源定义,这儿有一个在EJB类中创建多个用于Derby数据库的数据源定义的例子:
@DataSourceDefinitions( value = { @DataSourceDefinition(name = "java:app/env/HelloStatefulEJB_DataSource", minPoolSize = 0, initialPoolSize = 0, className = "org.apache.derby.jdbc.ClientXADataSource", portNumber = 1527, serverName = "localhost", user = "APP", password = "APP", databaseName = "testdb", properties = {"connectionAttributes=;create=true"} ), @DataSourceDefinition(name = "java:comp/env/HelloStatefulEJB_DataSource", minPoolSize = 0, initialPoolSize = 0, className = "org.apache.derby.jdbc.ClientXADataSource", portNumber = 1527, serverName = "localhost", user = "APP", password = "APP", databaseName = "testdb", properties = {"connectionAttributes=;create=true"} ) } ) @Stateful public class HelloStatefulEJB implements HelloStateful { ... ... }
使用部署描述符来创建数据源的定义
你可以在application.xml、application-client.xml、web.xml或者ejb-jar.xml文件中使用部署描述符来创建数据源定义资源,例如,以下的部署描述符创建了与在之前的@DataSourceDefinition注解例子中的定义相同的数据源定义:
可见到这两个例子都创建了同样的数据源定义,一种使用注解而另一种使用部署描述符。实际上,可以通过这种方法来创建有相同名称的两个数据源定义,在这种情况下,在部署描述符中指定的值优先于在注解中指定的值。例如,如果你使用相同的名称创建了两个数据源定义,一个使用注解而另一个使用部署描述符,并且分别指定了一个数据库名称,则在部署描述符中指定的数据库名称将会被使用。不过,如果你为注解中的某个元素指定了值,但没有在部署描述符中说明相等的元素,则来自注解的值将会与基于部署描述符的信息合并使用。 示范应用 伴随着这一贴士而来的是一个示例应用,该应用演示了使用注解和部署描述符的数据源定义,其为各种Java EE组件和在各种命名空间范围中做了定义。该应用包括以下的Java EE组件: 有一个数据源定义的名称可提供给该应用使用,应用随后在应用客户端、EJB和servlet组件中查找该数据源,基于组件范围内的现有可用资源,应用或者使用所提供的数据源,或者使用默认的数据源java:app/env/Application_DD_DataSource。 以下是应用创建的或者导出的数据源定义: 从资源的名称和命名空间范围就可以识别出该资源所在其中定义的组件,例如,对于被命名为java:app/env/HelloEJB_DD_DataSource的数据源定义来说,其命名空间范围是java:app,并且该资源是在部署描述符“DD”中为“HelloEJB”定义的。 要运行该应用,请执行以下操作: 该命令编译、组装、部署并运行应用,然后再反部署该应用。 作为响应,你应该会看到各种数据源的输出,以下是你应该会见到的名为java:app/env/Servlet_DataSource的数据源的输出: 在上面的输出中,RESULT一行中的DATASOURCE ACCESSIBLE表明名为java:app/env/Servlet_DataSource的数据源在所有的组件中都是可用的,也就是可用于EJB、servelet和应用的客户端组件中。 同样的,以下名为java:module/env/HelloEJB_DataSource的输出内容看起来应该类似这个样子: 在这里,RESULT一行表明名为java:module/env/HelloEJB_DataSource的数据源只可用于定义在ejb-jar.xml文件中EJB组件,也就是说,只可用于HelloEJB和HelloStatefulEJB。 可以注意到,示例应用做了获取资源访问的查找,不过,它也可以以如下方式来注入数据源: 另外请注意,除了前面提到的那些之外,示例应用还定义了许多的数据源,要运行应用使用这些额外的数据源的话,在示例目录下找到build.xml文件,把注释了的target=”runclient”调用的注释符号去掉。 更进一步的阅读资料 如需了解更多关于Java EE 6中的DataSource资源的定义,请参阅Java EE 6规范中的EE.5.17一节“DataSource Resource Definition”。 关于作者 Jagadish Ramu是GlassFish应用服务器团队中的一名工程师,他的工作领域是JDBC、连接池以及连接器,从2005年中期开始其加入了Sun的连接器团队,Jagadish拥有印度Pilani的博拉理工学院(BITS)的M.Tech学位。 <data-source>
<name>java:app/env/Application_Level_DataSource</name>
<class-name>org.apache.derby.jdbc.ClientXADataSource</class-name>
<server-name>localhost</server-name>
<port-number>1527</port-number>
<database-name>testdb</database-name>
<user>APP</user>
<password>APP</password>
<property>
<name>connectionAttributes</name>
<value>;create=true</value>
</property>
</data-source>
[exec] Mode : appclient
[exec] Data-Source name : java:app/env/Servlet_DataSource
[exec] ----------------------------------------------------------------------------------------------------------
[exec] REQUESTED DATA SOURCE : java:app/env/Servlet_DataSource
[exec] ACTUAL DATA SOURCE USED : java:app/env/Servlet_DataSource
[exec] RESULT : DATASOURCE ACCESSIBLE
[exec] ----------------------------------------------------------------------------------------------------------
[exec]
[exec] Mode : servlet
[exec] Data-Source name : java:app/env/Servlet_DataSource
[exec] ----------------------------------------------------------------------------------------------------------
[exec] REQUESTED DATA SOURCE : java:app/env/Servlet_DataSource
[exec] ACTUAL DATA SOURCE USED : java:app/env/Servlet_DataSource
[exec] RESULT : DATASOURCE ACCESSIBLE
[exec] ----------------------------------------------------------------------------------------------------------
[exec]
[exec] Mode : stateful_ejb
[exec] Data-Source name : java:app/env/Servlet_DataSource
[exec] ----------------------------------------------------------------------------------------------------------
[exec] REQUESTED DATA SOURCE : java:app/env/Servlet_DataSource
[exec] ACTUAL DATA SOURCE USED : java:app/env/Servlet_DataSource
[exec] RESULT : DATASOURCE ACCESSIBLE
[exec] ----------------------------------------------------------------------------------------------------------
[exec]
[exec] Mode : stateless_ejb
[exec] Data-Source name : java:app/env/Servlet_DataSource
[exec] ----------------------------------------------------------------------------------------------------------
[exec] REQUESTED DATA SOURCE : java:app/env/Servlet_DataSource
[exec] ACTUAL DATA SOURCE USED : java:app/env/Servlet_DataSource
[exec] RESULT : DATASOURCE ACCESSIBLE
[exec] ----------------------------------------------------------------------------------------------------------
[exec] Mode : appclient
[exec] Data-Source name : java:module/env/HelloEJB_DataSource
[exec] ----------------------------------------------------------------------------------------------------------
[exec] REQUESTED DATA SOURCE : java:module/env/HelloEJB_DataSource
[exec] ACTUAL DATA SOURCE USED : java:global/default-datasource
[exec] RESULT : DATASOURCE NOT ACCESSIBLE
[exec] ----------------------------------------------------------------------------------------------------------
[exec]
[exec] Mode : servlet
[exec] Data-Source name : java:module/env/HelloEJB_DataSource
[exec] ----------------------------------------------------------------------------------------------------------
[exec] REQUESTED DATA SOURCE : java:module/env/HelloEJB_DataSource
[exec] ACTUAL DATA SOURCE USED : java:global/default-datasource
[exec] RESULT : DATASOURCE NOT ACCESSIBLE
[exec] ----------------------------------------------------------------------------------------------------------
[exec]
[exec] Mode : stateful_ejb
[exec] Data-Source name : java:module/env/HelloEJB_DataSource
[exec] ----------------------------------------------------------------------------------------------------------
[exec] REQUESTED DATA SOURCE : java:module/env/HelloEJB_DataSource
[exec] ACTUAL DATA SOURCE USED : java:module/env/HelloEJB_DataSource
[exec] RESULT : DATASOURCE ACCESSIBLE
[exec] ----------------------------------------------------------------------------------------------------------
[exec]
[exec] Mode : stateless_ejb
[exec] Data-Source name : java:module/env/HelloEJB_DataSource
[exec] ----------------------------------------------------------------------------------------------------------
[exec] REQUESTED DATA SOURCE : java:module/env/HelloEJB_DataSource
[exec] ACTUAL DATA SOURCE USED : java:module/env/HelloEJB_DataSource
[exec] RESULT : DATASOURCE ACCESSIBLE
[exec] ----------------------------------------------------------------------------------------------------------
@Stateless
public class HelloEJB implements Hello {
@Resource(lookup = "java:app/env/HelloEJB_DataSource")
private DataSource app;
...
...
}
发表评论
-
[译文]技巧:防范代码的终结器漏洞
2011-08-02 11:11 769你的Java代码有可能会因终结操作带来的漏洞而易受到攻击,了解 ... -
[译文] 一种减少多线程Java应用的工作队列中的竞争和开销的方法
2011-06-21 10:08 1023许多的服务器应用,比如说Web服务器、应用服务器、数据库服务器 ... -
[译文]Java SE 7带来更好的资源管理:不仅仅是语法糖
2011-06-18 19:55 796本文介绍了Java Platform, Standard Ed ... -
[译文]双重检查锁定和单件模式
2011-05-06 11:50 875所有的编程语言都会有分享一些它们的惯用技法,其中的 ... -
RJC501:为周转期付出的代价有多大?
2011-04-18 16:43 841通过重载Java类(Reloading Java ... -
RJC401:HotSwap和JRebel——幕后的故事
2011-04-11 16:31 1048在本文中,我们会回顾类在没有动态类加载器情况下的重载方式;我们 ... -
RJC301:Web开发——Tomcat、GlassFish、OSGi、Tapestry等服务器和框架中的Classloader
2011-04-04 15:26 985在本文中,我们会回顾真实的服务器、容器和框架是如何使用动态的类 ... -
RJC201:ClassLoader的泄漏是如何发生的?
2011-03-28 19:58 895你如果使用Java编程已有一段时间的话,那么你就会知道内存泄漏 ... -
jQuery的.bind()、.live()和.delegate()之间的区别
2011-03-19 22:01 860.bind()、.live()和.delegate()之间的 ... -
示例:JavaScript中的后续传递风格
2011-03-19 21:57 865本文介绍了CPS所扮演的两种角色——作为JavaScript中 ... -
[译文]开发者见解系列,第3部分:编写代码的步骤(下)
2010-07-27 22:11 916原文:The Developer Insight ... -
[译文]开发者见解系列,第3部分:编写代码的步骤(上)
2010-07-27 22:05 1145原文:The Developer Insight Series ... -
[译文]开发者见解系列,第2部分:谈谈编码(下)
2010-07-14 22:31 889原文:The Developer Insight Series ... -
[译文]开发者见解系列,第2部分:谈谈编码(上)
2010-07-14 22:26 1117原文:The Developer Insight Series ... -
[译文]开发者见解系列,第1部分:编写傻瓜代码——来自四位首席Java开发者的建议(下)
2010-06-28 12:32 863原文:The Developer Insight Series ... -
[译文]开发者见解系列,第1部分:编写傻瓜代码——来自四位首席Java开发者的建议(上)
2010-06-28 12:25 1454原文:The Developer Insight Series ... -
[译文] Java Applets和ASP.net——你可让他们玩到一起吗?
2010-05-13 18:01 1726原文:Java Applets, ASP.net - Can ... -
[译文]使用Java编写你的第一个Google Wave机器人(下)
2010-01-25 21:03 1088原文:Write Your First Google Wave ... -
[译文]使用Java编写你的第一个Google Wave机器人(上)
2010-01-25 21:02 1359原文:Write Your First Google Wave ... -
[译文]一些Java并发技巧
2009-12-20 18:25 1055原文:Some Java Concurrency Tips ...
相关推荐
在Java与Spring框架结合开发的应用程序中,数据库连接池(DataSource)是十分关键的一个环节,它直接影响着应用程序的性能和稳定性。本文将详细介绍如何利用Java代码动态地为Spring中的`dataSource`设置参数,并通过...
Java EE 6 APIs in the Java Platform, Standard Edition 6.0 31 GlassFish Server Tools 34 Chapter 2: Using the Tutorial Examples 37 Required Software 37 Starting and Stopping the GlassFish Server ...
Java EE(Java Platform, Enterprise Edition)是Java编程语言在企业级应用开发中的核心框架,它提供了构建分布式、多层架构的Web应用程序所需的各种组件和服务。本教程基于2018年的版本,旨在帮助初学者入门Java EE...
在Java中,DataSource是一个接口,位于javax.sql包下,它是连接池管理数据库连接的入口。通过实现DataSource接口,我们可以控制连接的创建、管理和回收。通常,我们不会直接实现DataSource,而是选择使用已有的成熟...
通过标注如@Resource、@EJB和@WebServiceRef,开发者可以声明性地请求和注入所需的资源,如SessionContext、DataSource等,而不必在代码中显式创建和查找。这有助于降低组件之间的耦合,提高代码的可测试性。 Java ...
《Java EE企业级应用开发教程Spring+Spring MVC+MyBatis》是一本深入探讨Java企业级应用程序开发的书籍,源代码包含多个章节的实例,旨在帮助读者理解和掌握使用Spring、Spring MVC和MyBatis框架进行实际开发的关键...
DataSource是Java中用于管理数据库连接的一种重要组件,它在企业级应用开发中广泛使用,特别是在J2EE环境中。DataSource的主要作用是提供对数据库连接的管理,包括创建、分配、回收和关闭连接,使得应用程序能够高效...
总结来说,DataSource是Java应用中管理数据库连接的重要工具,它通过数据连接池技术提高了系统性能,降低了资源消耗,并提供了更高级别的连接管理和监控功能。理解并正确使用DataSource对于任何涉及数据库操作的Java...
而DataSource则是Java EE中的数据源,它提供了一种连接数据库的便捷方式,确保了多线程环境下的高效资源管理。 首先,Struts1是Apache软件基金会开发的一个开源框架,主要应用于Java Web应用的开发。它通过分离业务...
4. **JPA与Hibernate**:Java Persistence API(JPA)是Java EE中定义的ORM(对象关系映射)标准,而Hibernate是其流行的实现。它们使得开发者可以使用面向对象的方式来操作数据库,降低了数据库操作的复杂性。 5. ...
在XML配置中,我们可以在`beans.xml`文件中定义`<bean>`来创建`DataSource`。例如,使用Apache DBCP: ```xml <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> ...
在Java开发中,SpringMVC框架是用于构建Web应用程序的常用工具,而DataSource则是Java中管理数据库连接的核心组件。在大型分布式系统中,往往需要处理多个数据源,比如读写分离、多数据库集群等场景,这时就需要实现...
- JPA是Java EE中的ORM(对象关系映射)规范,提供了一种在Java应用中管理和持久化对象的方式。Hibernate是流行的JPA实现,提供更丰富的功能和性能优化。 6. **JSF(JavaServer Faces)**: - JSF是一种MVC(模型...
在IT行业中,Spring框架是Java企业级应用开发的首选,而WebLogic则是一款知名的Java EE应用服务器,常用于部署和管理企业级应用。本篇将深入讲解如何在WebLogic服务器中配置Spring的数据源(Datasource),以便应用...
1. **DataSource**: DataSource是Java中用于连接数据库的标准接口,由JDBC(Java Database Connectivity)提供。它负责管理数据库连接,如创建、获取和释放连接。相比于直接使用`DriverManager`来获取连接,...
在IT行业中,DataSource是Java应用中的一个重要概念,特别是在企业级应用开发中,它扮演着连接数据库的关键角色。DataSource是Java的JDBC(Java Database Connectivity)API的一部分,它提供了一种在应用程序和...
p6spy dataSource 配置 监听真实sql语句
- **JNDI(Java Naming and Directory Interface)数据源**:在Java EE环境中,DataSource通常通过JNDI服务进行查找和配置,使得应用服务器可以管理数据库连接,提供跨应用共享的能力。 - **非JNDI数据源**:在...
在Spring Boot框架中,`DataSource`的注入是应用程序与数据库交互的基础。`DataSource`是一个接口,通常由诸如HikariCP、Druid或Tomcat JDBC等实现提供,它负责存储和管理数据库连接,使得我们的应用能够高效且安全...