GVKun编程网logo

如何访问Weblogic 10.3.6中定义的JNDI数据源(weblogic怎么访问)

33

在本文中,我们将为您详细介绍如何访问Weblogic10.3.6中定义的JNDI数据源的相关知识,并且为您解答关于weblogic怎么访问的疑问,此外,我们还会提供一些关于hibernate连接web

在本文中,我们将为您详细介绍如何访问Weblogic 10.3.6中定义的JNDI数据源的相关知识,并且为您解答关于weblogic怎么访问的疑问,此外,我们还会提供一些关于hibernate 连接 weblogic JNDI 配置、java 使用tomcat的JNDI数据源、JBOSS的JNDI数据源配置、root启动WebLogic后,webLogic用户无法启动WebLogic的有用信息。

本文目录一览:

如何访问Weblogic 10.3.6中定义的JNDI数据源(weblogic怎么访问)

如何访问Weblogic 10.3.6中定义的JNDI数据源(weblogic怎么访问)

我已经使用Weblogic控制台创建了JNDI数据源,但无法从Web应用程序访问该对象。以下是详细信息

在weblogic 10.3.6中,我为数据源指定了JNDI名称: jdbc/mydb

为了从Web应用程序获得数据库连接,我已经在Web应用程序中编写了以下代码:

Context initContext = new InitialContext();DataSource ds = (DataSource)initContext.lookup("java:/comp/env/jdbc/mydb");jndiConnection = ds.getConnection();

之前我使用Tomcat作为服务器,当我在文件中配置资源详细信息时能够获得数据库连接tomcat/conf/server.xml,但是当我开始使用weblogic服务器时,出现以下错误:

Cannot establish DB connection to JNDI:java:/comp/env/jdbc/mydb While trying to look up /comp/env/jdbc/mydb in /app/webapp/sample.war/1811641702. caused by: javax.naming.NameNotFoundException: While trying to look up /comp/env/jdbc/mydb in /app/webapp/sample.war/1811641702.; remaining name ''/comp/env/jdbc/mydb''

我尝试了此链接中提到的选项:如何在WebLogic上查找JNDI资源?但我仍然面临问题。

请让我知道我在哪里做错了,访问JNDI对象的过程是什么。

答案1

小编典典

引用该帖子后:Tomcat vs Weblogic JNDI查找我已经修改了我的代码。

在Web应用程序的Java程序中使用以下代码解决了我的问题:

Context initContext = new InitialContext();DataSource ds = (DataSource)initContext.lookup("jdbc/mydb");jndiConnection = ds.getConnection();

同样在weblogic控制台中,我已将JNDI对象添加到部署Web应用程序的管理服务器(在“服务器”选项下)。

hibernate 连接 weblogic JNDI 配置

hibernate 连接 weblogic JNDI 配置

hibernate 连接 weblogic JNDI 配置

1. 在 weblogic 服务器安装路径下找到两个客户端依赖包 wlfullclient.jar. wlfullclient.jar,并下载下来引入工程当中。

2. 配置 hibernate 配置文件 hibernate.cfg.xml

<hibernate-configuration>
 <session-factory>
  <!-- Database connection settings 数据库的配置 -->
  <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
  <!--weblogic jndi 地址 -->
  <property name="connection.datasource">jdbc/dev/dev</property> 
    <property name="connection.provider_class">org.hibernate.connection.DatasourceConnectionProvider</property> 
  <property name="jndi.class">weblogic.jndi.WLInitialContextFactory</property> 
  <property name="jndi.url">t3://10.2.19.4:7001</property>  <!--weblogic 服务器地址 -->
  <property name="connection.username">weblogic</property>  <!-- 访问 weblogic 服务器用户名 -->
  <property name="connection.password">welcome1</property>  <!-- 访问 weblogic 服务器密码 -->
  
  <!-- SQL dialect 数据库方言,这里我们才爱用 -->
  <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
  <property name="hibernate.connection.autocommit">true</property>
  <!-- Enable Hibernate''s automatic session context management 新功能,暂不使用 -->
  <!-- <property name="current_session_context_class">thread</property> -->
  <!-- Disable the second-level cache 二级缓存,放置不管 -->
  <!-- <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> -->
  <!-- Echo all executed SQL to stdout 设置 show_sql 为 true 表示让 hibernate 将生成 sql 语句在控制台打印出来 -->
  <property name="show_sql">true</property>
  <!-- 格式化 SQL -->
  <property name="format_sql">true</property>
  <!-- <property name="hibernate.query.factory_class">org.hibernate.hql.ast.ASTQueryTranslatorFactory</property> -->
  <!-- Drop and re-create the database schema on startup 是否让 hibernate 自动为我们创建表 -->
  <!-- <property name="hbm2ddl.auto">update</property> -->
  <!-- 这里是将需要 mapping 的类文件进行再次声明 -->
  <mapping/>

 

以上配置方式是单独用 hibernate 方式访问 weblogic JNDI ,运行成功并部署生产环境。

java 使用tomcat的JNDI数据源

java 使用tomcat的JNDI数据源

终于有机会写一些比较基础的代码了,终于有机会在tomcat上配置jndi数据源了,但是这是一个费时间的过程。这里把这个过程记录如下。

目的:tomcat提供数据源,java代码中通过jdbc获取jndi,操作数据库。

步骤:

1、讲数据库的驱动jar放到tomcat的lib目录下,%TOMCAT_HOME%\lib

2、修改%TOMCAT_HOME%\conf目录下配置文件server.xml,增加如下内容:

<Context docBase="/securityProxyWeb" path="/securityProxyWeb" reloadable="true" debug="5" crossContext="true">
	<Resource name="jdbc/exoa" auth="Container" type="javax.sql.DataSource" maxIdle="10" initialSize="10" maxWait="10000" maxActive="20"
	driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@127.0.0.1:1521:exoa" username="exoa" password="exoaexoa"  />
</Context>

注意上面的代码放在Host节点下面,如果读者要用的话,请修改具体的参数,username\password\url

3、web功能里面要使用tomcat的数据源,需在web.xml里面增加引用:

<resource-ref id="ResourceRef_1401952150839">
	<res-ref-name>jdbc/exoa</res-ref-name>
	<res-type>javax.sql.DataSource</res-type>
	<res-auth>Container</res-auth>
	<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>

4、获取Connection的代码如下:

/**
	 * 获取数据库连接
	 * 
	 * @return
	 * @throws Exception
	 */
	public static Connection getConnection() throws Exception {
		Context context = null;
		DataSource dataSource = null;
		try {
			context = new InitialContext();
			try{
				//TOMCAT JDK1.6
				dataSource = (DataSource) context.lookup("java:comp/env/jdbc/exoa");
			}catch(Exception E){
				E.printStackTrace();
			}
			if(dataSource == null){
				//WAS JDK1.4
				dataSource = (DataSource) context.lookup("jdbc/exoa");
			}
			
			if (dataSource == null) {
				System.err.println("打开数据库连接出错!!!");
				return null;
			}
			return dataSource.getConnection();
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

 

JBOSS的JNDI数据源配置

JBOSS的JNDI数据源配置

 

1、mssql-ds.xml的配置

<datasources>

  <local-tx-datasource>
    <jndi-name>MSsqlDS</jndi-name>
    <use-java-context>false</use-java-context>
    <connection-url>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=CHDPSDB</connection-url>
    <driver-class>com.microsoft.jdbc.sqlserver.sqlServerDriver</driver-class>
    <user-name>sa</user-name>
    <password>xiaoquan</password>
      <Metadata>
         <type-mapping>MS sqlSERVER2000</type-mapping>
      </Metadata>
  </local-tx-datasource>

</datasources>

 

2、实例调用

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import java.util.Properties;

import java.util.Hashtable;
import java.sql.*;

public class DBCon {

 public static void main(String[] args) throws NamingException,sqlException {
    Properties props = new Properties();
    props.setProperty("java.naming.factory.initial",
    "org.jnp.interfaces.NamingContextFactory");
    props.setProperty("java.naming.provider.url","localhost:1099");
    props.setProperty("java.naming.factory.url.pkgs","org.jboss.naming");
    InitialContext ctx = new InitialContext(props);
    DataSource ds = (DataSource) ctx.lookup("MSsqlDS");
    Connection conn = ds.getConnection();
    Statement stat = conn.createStatement();
    String sql = "select * from chd_staff";
    ResultSet rs = stat.executeQuery(sql);
    while (rs.next()) {
     System.out.println(rs.getString(1));
    }
    rs.close();
    stat.close();
    conn.close();
  
    System.out.print("End");
  }

}

3、异常处理

如出现以下异常:

Cannot instantiate class: org.jnp.interfaces.NamingContextFactory [Root exception is java.lang.classNotFoundException: org.jnp.interfaces.NamingContextFactory]

请查看是否将JBOSS_Home下client文件夹中的所有jar包都导入到了项目工程中。

 实际上,在classpath內,加上%JBoss Home%clientjbossall-client.jar就可以了

root启动WebLogic后,webLogic用户无法启动WebLogic

root启动WebLogic后,webLogic用户无法启动WebLogic

       在用root用户启动weblogic的时候会在所在域里产生root权限的文件,或者用root权限的文件覆盖了部分原来存在的weblogic用户所属 文件,当再次切换到weblogic用户后,启动的时候就会出现权限问题,所以报告上面的错误。这个错误就是因为EmbeddedLDAP.tran文件 的权限变成了root的。

解决方法:

用root用户登录,将EmbeddedLDAP.log赋权给weblogic用户。但是还有一系列的log文件需要赋权。索性把domains下的所有应用全部赋权。

[root@mnhj02 ~]# chown -R weblogic:weblogic domains_dir

前一个weblogic是用户,后一个weblogic是用户所属组,domains_dir是文件所在的路径。


今天关于如何访问Weblogic 10.3.6中定义的JNDI数据源weblogic怎么访问的介绍到此结束,谢谢您的阅读,有关hibernate 连接 weblogic JNDI 配置、java 使用tomcat的JNDI数据源、JBOSS的JNDI数据源配置、root启动WebLogic后,webLogic用户无法启动WebLogic等更多相关知识的信息可以在本站进行查询。

本文标签: