如何从Web容器外部查找JNDI数据源?
我有以下环境设置:
- Java 1.5
- Sun Application Server 8.2
- Oracle 10 XE
- Struts 2
- 过冬
我很想知道如何编写可以引用应用程序服务器提供的JNDI数据源的Java客户端(即Web应用程序之外)的代码。
Sun Application Server的端口都是默认端口。 服务器配置中有一个名为jdbc / xxxx的JNDI数据源,但我注意到Web应用程序的Hibernate配置使用名称java:comp / env / jdbc / xxxx。
到目前为止,我见过的大多数例子都涉及代码
Context ctx = new InitialContext(); ctx.lookup("jdbc/xxxx");
但似乎我要么使用错误的JNDI名称,要么我需要配置jndi.properties或其他配置文件来正确指向监听器? 我有来自Sun Application Server的appserv-rt.jar,里面有一个jndi.properties,但似乎没什么帮助。
这里有一个类似的问题,但它没有给出任何代码/指的是让iBatis自动获取JNDI数据源: 从Web容器外部访问数据源(通过JNDI)
我陷入了这个完全相同的问题。 我写了一个小教程。 基本上,您必须创建自己的DataSource对象实现,并将它们添加到您自己的自定义初始上下文中。 这里有源代码示例:
在本地运行使用Application Server数据源的Bean
试试Simple-JNDI。 它为您提供了JNDI服务的内存实现,并允许您使用属性文件中定义的对象填充JNDI环境。 还支持加载文件中配置的数据源或连接池。
要获得连接池,您必须创建如下文件:
type=javax.sql.DataSource driver=com.sybase.jdbc3.jdbc.SybDriver pool=myDataSource url=jdbc:sybase:Tds:servername:5000 user=user password=password
在您的应用程序中,您可以通过访问池
Context ctx = new InitialContext(); DataSource ds = (DataSource) ctx.lookup("path/to/your/connectionPool");
多年来我一直用它来使用Simple-JNDI。 但它不再处于积极发展之中。 因为我发现了一些有关共享上下文的问题(特别是使用数据源),所以我决定分支原始项目并添加一些新function。 现在有一个0.13.0。 您可以在https://github.com/h-thurow/Simple-JNDI找到更多相关信息。
如果你每天都在谈论一些在容器外运行的通用Java应用程序,那么你就不走运了。 实际上,您需要使用自己的配置连接池等配置自己的JNDI实现。
但是,您可以编写Java EE“独立”应用程序。 这些是在Java EE应用程序客户端中运行的应用程序。 基本上,它是一个部署和打包的应用程序,但随后使用Java EE容器提供的启动程序执行。
在应用程序客户端环境中运行时,应用程序服务器的所有资源(连接池,EJB,队列等)都可供您的应用程序使用,就像在应用程序服务器中部署代码时一样。
以下是Sun App Server 8.2的一些教程文档,它是一个J2EE 1.4容器。
如果有可能我强烈建议升级到Glassfish v2.1,只是一个更现代,更好的全方位服务器应该部署你的应用程序,因为它是8.2的后代。
这对你来说可能有点晚了,但我已经使用了Simple-JNDI库多年来出于你提到的确切目的。 我不确定它是否具有您可能需要的所有选项,但它足以满足我的命令行实用程序。
你想要的是一个应用程序客户端
或者,您可以从独立客户端建立一个简单的JDBC连接,这可能更容易创建 – 但您必须在客户端中配置连接详细信息,并且不能重用应用程序服务器中的设置。
- 我应该在应用程序或应用程序服务器中定义数据源吗?
- 用于MS SQL Server的JBoss AS 5数据库连接池重新连接例程
- 使用javamail API发送带附件的电子邮件
- Oracle getConnection运行缓慢
- java.lang.AbstractMethodError:com.mysql.jdbc.Connection.isValid(I)Z
- 轻松启动独立JNDI服务器(并注册一些资源)
- 如何使用一个DataSource以编程方式更改Spring中的数据库?
- MyBatis-guice 3.3 +多个数据源+属性+ scriptrunner
- 防止JBoss 7上的JNDI数据源的Oracle连接自动提交(Jeeves DBMS)