设为首页 收藏本站
查看: 580|回复: 0

[经验分享] WebLogic下的JNDI编程

[复制链接]

尚未签到

发表于 2017-2-15 10:39:09 | 显示全部楼层 |阅读模式
  
WebLogic下的JNDI编程
1、JAVA命名和目录服务(JNDI)
(1)JNDI简介
l         JNDI:
分布式计算环境通常使用命名和目录服务来获取共享的组件和资源。命名和目录服务将名称与位置、服务、信息和资源关联起来。它为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口。
命名服务提供了一种为对象命名的机制,这样你就可以在无需知道对象位置的情况下获取和使用对象。只要该对象在命名服务器上注册过,且你必须知道命名服务器的地址和该对象在命名服务器上注册的JNDI名。就可以找到该对象,获得其引用,从而运用它提供的服务。
命名服务提供名称—对象的映射。目录服务提供有关对象的信息,并提供定位这些对象所需的搜索工具。
Java 命名和目录接口或 JNDI 提供了一个用于访问不同的命名和目录服务的公共接口(JAVA API)。运用一个命名服务来查找与一个特定名字相关的一个对象,JDBC可以用JNDI来访问一个关系数据库。
l         JNDI可访问的现有的目录及服务有:
DNS、XNam 、Novell目录服务、LDAP(Lightweight Directory Access Protocol 轻型目录访问协议)、CORBA对象服务、文件系统、Windows XP/2000/NT/Me/9x的注册表、RMI、DSML v1&v2、NIS。
l         JNDI优点:
ü         包含了大量的命名和目录服务,使用通用接口来访问不同种类的服务;
ü         可以同时连接到多个命名或目录服务上;
ü         建立起逻辑关联,允许把名称同Java对象或资源关联起来,而不必指导对象或资源的物理ID。
(2)JNDI程序包
javax.naming:命名操作;
javax.naming.directory:目录操作;
javax.naming.event:在命名目录服务器中请求事件通知;
javax.naming.ldap:提供LDAP支持;
javax.naming.spi:允许动态插入不同实现。
(3)常用的JNDI操作:
void bind(String sName,Object object);――绑定:把名称同对象关联的过程
void rebind(String sName,Object object);――重新绑定:用来把对象同一个已经存在的名称重新绑定
void unbind(String sName);――释放:用来把对象从目录中释放出来
void lookup(String sName,Object object);――查找:返回目录总的一个对象
void rename(String sOldName,String sNewName);――重命名:用来修改对象名称绑定的名称
NamingEnumeration listBinding(String sName);――清单:返回绑定在特定上下文中对象的清单列表
NamingEnumeration list(String sName);
2、JNDI的编程
(1)获得名字服务的初始环境
              Contect ctx=new InitailContext();
这样获得的初始环境为默认的命名服务。假如你想改变提供JNDI服务的类(或厂商)和提供JNDI服务的命名服务器,可以采用以下方法:
java.util.Properties h = new java.util.Properties();
h.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
h.put(Context.PROVIDER_URL, "t3://localhost:7001");
//初始化Context对象。
Context ctx = new InitialContext(h);
(2)将对象与某个名字相绑定
       用bind(String name,Object obj)方法 ,把对象obj绑定到名字name上
例:    import javax.naming.*;
public class TestJNDI
{
public static void main(String[] args)
{
        try
{
        Context ctx=new InitialContext();
      Ctx.bind(“JNDIName”,”BindSring”);   //把BindSring字符串绑定到JNDIName上
        }
catch(NamingException e)
{
        e.printStackTrace();
       }
        }
       }
如果名字已绑定或命名服务器没有启动,则会出现NamingException异常
(3)重新绑定
用ctx.rebind(String name,Object o) 如:
ctx.rebind(“JNDIName”,”BindSring”);   //现在BindSring字符串绑定到JNDIName上
(4)解除绑定
ctx.unbind(String name);
不过你要确保该名字存在,否则出现NameNotFoundException 异常
(5)利用名字查找已绑定的对象
用ctx.lookup(String name);根据name找对象
例:
import javax.naming.*;
public class TestJNDI
{
public static void main(String[] args)
{
        try
{
        Context ctx=new InitialContext();
        Object obj=ctx.lookup(“JNDIName”);  //根据JNDI名查找绑定的对象
        String str=(String)obj;//强制转换            
        }
catch(NamingException e)
{
        e.printStackTrace();
        }
catch(ClassCastException e)
{
        e.printStackTrace();
        }
        }
}
(6)JNDI在EJB组件的编程中的应用(查找EJB HOME对象)
    try
{
         Context context = getInitialContext();
         Object ref = context.lookup("mathSessionEJBBean");   //look up jndi name
         mathSessionEJBHomeObject = (mathSessionEJBHome) PortableRemoteObject.narrow(ref, mathSessionEJBHome.class);
//下面为创建出Remote主接口类型的对象
      mathSessionEJBRemote = mathSessionEJBHomeObject.create();
//下面为利用Remote主接口类型的对象对EJBBean类中的方法进行访问
     System.out.println("利用无状态会话EJB计算10+20的结果="+mathSessionEJBRemote.getSummary(10,20));
    }
    catch(Exception e) {
      e.printStackTrace();
    }
3、查看 WebLogic中的JNDI
(1)在控制台中右击本服务器的名称,然后在快捷菜单中选择“查看JNDI 树”则显示出新的窗口
(2)在新的窗口中将显示出已经在WebLogic服务器中已经绑定的各个对象
4、JNDI应用编程例
(1)设计一个Java程序
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class HelloClient
{
  void test()   throws NamingException
  {
    java.util.Properties h = new java.util.Properties();
    h.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
    h.put(Context.PROVIDER_URL, "t3://localhost:7001");
    Context ctx = new InitialContext(h);    //初始化Context对象。
    System.out.println("下面进行设置JNDI");
    String str="向服务器邦定的字符串";
    ctx.bind("MyStringJNDIName",str);
    System.out.println("下面开始调用JNDI");
    String getStr=(String)ctx.lookup("MyStringJNDIName");
    System.out.println("利用JNDI的名称从服务器中所获得的字符串为:"+getStr);
  }
  public static void main(String[] args) throws Exception
  {
    System.out.println("\n客户端程序测试开始...\n");
    HelloClient client = new HelloClient();
    client.test();
    System.out.println("\n客户端程序测试结束...\n");
  }
}
(2)在JCreator 中引入C:\bea\weblogic81\server\lib中的weblogic.jar文件
(3)执行该Java应用程序

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-342435-1-1.html 上篇帖子: weblogic 新队列配置 下篇帖子: 配置WebLogic Server集群[转]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表