[原创]如何使用WebLogic上配置的数据源_Tomcat, WebLogic及J2EE讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Tomcat, WebLogic及J2EE讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3045 | 回复: 0   主题: [原创]如何使用WebLogic上配置的数据源        下一篇 
panpan.nie
注册用户
等级:大校
经验:4754
发帖:217
精华:2
注册:1970-1-1
状态:离线
发送短消息息给panpan.nie 加好友    发送短消息息给panpan.nie 发消息
发表于: IP:您无权察看 2014-10-17 18:08:50 | [全部帖] [楼主帖] 楼主

前提:

已经配置数据源连接,如其JNDI名称为 MySqlDS,参考:WebLogic 使用数据源连接池

连接数据源的方法:

1、 使用jsp 页面访问

WebLogic上部署一个项目,如CodeTest,添加一个jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page import="javax.naming.*" %>
<%@ page import="javax.sql.*" %>
<%@ page import="java.sql.*" %>
<%
String JNDINAME="MySqlDs";
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
String sql = "select * from temp;";
try {
      Context ctx = new InitialContext();
      DataSource ds = (DataSource)ctx.lookup(JNDINAME);
      conn = ds.getConnection();
      stmt = conn.createStatement();
      rs = stmt.executeQuery(sql);
      while(rs.next())
      {
            %>
            <%=rs.getInt("id")%>
            <%=rs.getString("name")%><br>
            <%
      }
} catch (NamingException e) {
      e.printStackTrace();
} catch (SQLException e) {
      e.printStackTrace();
}
finally
{
if(conn!=null)
{
      try {
            conn.close();
      } catch (SQLException e) {
            e.printStackTrace();
      }
}
}


在浏览器上中访问该页面:http://localhost:7001/CodeTest/index.jsp

2、如何直接使用JavaProject 里面的一个Class 去访问访问 该数据源呢?

   以下都只给出程序的主要代码

1)同jsp,直接使用这三句

Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("MySqlDs");
conn = ds.getConnection();


   执行结果:

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:344)
at javax.naming.InitialContext.lookup(InitialContext.java:411)
at SqlDsDemo.queryJNDI(SqlDsDemo.java:23)
at SqlDsDemo.main(SqlDsDemo.java:64)


错误原因:未设置环境变量,因为是直接使用的java代码去访问在WebLogic中的数据源,而上述的jsp访问是已经部署在了WebLogic服务器中

解决方法

final String INIT_FACTORY = "weblogic.jndi.WLInitialContextFactory";
final String SERVER_URL = "t3://localhost:7001";
Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY, INIT_FACTORY);
props.put(Context.PROVIDER_URL, SERVER_URL);
Context ctx = new InitialContext(props);


2

)在1)的基础上修改后执行

执行结果

can't connect the WebLogic t3://localhost:7001
javax.naming.NoInitialContextException: Cannot instantiate class: weblogic.jndi.WLInitialContextFactory [Root exception is java.lang.ClassNotFoundException: weblogic.jndi.WLInitialContextFactory]
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:674)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307)
at javax.naming.InitialContext.init(InitialContext.java:242)
at javax.naming.InitialContext.<init>(InitialContext.java:216)
at SqlDsDemo.getInitialContext(SqlDsDemo.java:72)
at SqlDsDemo.queryJNDI(SqlDsDemo.java:22)
at SqlDsDemo.main(SqlDsDemo.java:84)
Caused by: java.lang.ClassNotFoundException: weblogic.jndi.WLInitialContextFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:270)
at com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:63)
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:671)
... 6 more
Exception in thread "main" java.lang.NullPointerException
at SqlDsDemo.queryJNDI(SqlDsDemo.java:23)
at SqlDsDemo.main(SqlDsDemo.java:84)


错误原因:找不到相关类

解决方法:将 WebLogic\wlserver_12.1\server\lib\weblogic.jar 加入classpath 中

程序中还可能有一下异常:

Exception in thread "main" java.lang.IncompatibleClassChangeError: Implementing class
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:476)
at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:181)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:223)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)


错误原因:导入了重复的jar包

解决方法:检查一下jar包是否导入错误,jre 是否设置正确

至此,直接使用class 可以成功访问 weblogic 中的数据源了!

总结:直接使用class 访问weblogic中的配置就是两点:①设置环境变量  ② 导入weblogic.jar




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论