2024年10月initialcontext(jms是什么意思)

 更新时间:2024-10-12

  ⑴initialcontext(jms是什么意思

  ⑵JavaMessageService的简称。

  ⑶读音:英[?d?ɑ?v??mes?d??s??v?s]?美[?d?ɑv??mes?d??s??rv?s]

  ⑷释义:消息服务,使用Java消息服务。

  ⑸语法:JMS即Java消息服务(JavaMessageService应用程序接口,是一个Java平台中关于面向消息中间件(MOM的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。

  ⑹You?have?suessfully?used?the?JMS?protocol?for?municating?with?your?SOAP?requests.

  ⑺您已经成功地使用JMS协议和SOAP请求通信了。

  ⑻JMS定义了五种不同的消息正文格式,以及调用的消息类型,允许你发送并接收以一些不同形式的数据,提供现有消息格式的一些级别的兼容性。

  ⑼StreamMessage--Java原始值的数据流

  ⑽MapMessage--一套名称-值对

  ⑾TextMessage--一个字符串对象

  ⑿ObjectMessage--一个序列化的Java对象

  ⒀BytesMessage--一个未解释字节的数据流

  ⒁框架技术怎么使用InitialContext对象绑定一个对话框

  ⒂我也有这个问题,同问。不过在些贴上我对initalContext一些了解:JNDI(ThejavaNamingandDirectoryInterace,Jave命名和目录接口是一组在Java应用中访问命名和目录服务的API。命名服务将名称和对象联系起来,使得我们可以用名称访问对象。目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性。命名或目录服务使你可以集中存储共有信息,这一点在网络应用中是重要的,因为这使得这样的应用更协调,更容易管理。例如,可以将打印机设置在目录服务中,以便被与打印机有关的应用使用。目录服务是命名服务的自然扩展,两者之间的关键差别是目录服务中对象可以有属性(例如用户有email地址,而命名服务中对象没有属性。因此,在目录服务中,你可以根据属性搜索对象。jNdI允许你访问文件系统中的文件,定位远程RMI注册的对象,访问像LDAP这样的目录服务,定位网络上的EJB组件。JNDI架构JNDI架构提供了一组标准的独立于命名系统的API.JNDI独立于目录服务的具体实现,只要你有目录的服务提供接口(或驱动,你就可以使用目录。JNDI上下文正如在前面提到的,命名服务将名称和对象联系起来。这种联系称之为绑定。一组这样的绑定称之为上下文(context),上下文提供了解析(即返回对象的查找操作。其他操作包括:名称的绑定和取消绑定,列出绑定的名称。注意到一个上下文对象的名称可以绑定到有同样的命名约定的另一人上下文对象。这称之为子上下文。Lookup(Stringname):接受串名,为了用名称从命名服务或目录中取得或解析对象,使用context的lookup方法:objectobj=contxt.loopup(name)。lookup方法返回一个对象,这个对象表示的是你想要找的上下文的儿子。

  ⒃EJB的initialContext.lookup为什么获取不到对象

  ⒄initialContext.lookup(“CustomerDao/remote“);这段的lookup里面写的是该类的jndiname

  ⒅javax.naming.NoInitialContextException

  ⒆DataBasaConn这个类必须运行在tomcat环境中才可以,而且要启动tomcat服务器,如果你单独的运行在jvm上是部可以的,你应该在jsp页面上调用这个类就可以了

  ⒇为什么出现了Cannotinstantiateclass:weblogic.jndi.WLInitialContextFactory这个错误

  ⒈看看那你的weblogic里面的“row......”?是否为true?????

  ⒉很关键的!!!!!!!

  ⒊首先本地要有一个数据库软件、远程公网的IP地址、数据库名、用户名、密码在你的本地数据库搜索加入组。就可以在本地直连接到远程数据库了!或者空间商会提供你数据库的IP你可以在本地备份好数据库用FTP上传软件上传到空间商的网页管理器还原数据库,就可以了!

  ⒋InitialContext()是什么意思

  ⒌InitialContext()是可以加载配置文件的(jndi.properties),构造方法也可以带参数的(见API,以下是我的看法,它的初始化是由容器来(系统内部来完成的,如果你的客户端和服务器都在一台机子上且同一个JVM,那么ContextnamingContext=newInitialContext();是没问题,如果你的服务器端在另一台机器上,想想也知道,肯定要配置个IP的,对于JNDI的编程都是先注册资源(数据库连接,EJB等,然后再用,这样的原则的,我在EJB,也同样用到InitialContext(我想道理是相同的,以下是jnid.properties的配置文件(EJBjava.naming.factory.initial=.jnp.interfaces.NamingContextFactoryjava.naming.factory.url.pkgs=.jboss.naming:.jnp.interfacesjava.naming.provider.url=localhost:--------------------------------------------------------------------------------

  ⒍什么是命名和目录服务

  ⒎JNDI:命名和目录服务stringpropertiesjavacredentialsinterfaceapi主要内容-JNDI介绍-JNDI架构-包结构-JNDI上下文-JNDI的使用-JNDI实例.JNDI介绍——Java命名和目录接口(JavaNamingandDirectoryInterface,JNDI是一组在Java应用中访问命名和目录服务的API。命名服务将名称和对象联系起来,使得我们可以用名称访问对象。目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性。——命名和目录服务用于在分布式计算环境中共享资源,用户在不清楚资源具体位置的情况下,依靠这种服务机制可以获取和使用资源。——JNDI允许服务器按照指定的名字处置对象,远程客户机可以检索JNDI服务,获得一个对指定对象的引用。JNDI最简单的形式就是用来查找通过JavaEE服务器注册的资源。命名服务——命名服务作为一种基础设施出现在众多的计算机系统,其意义在于提供根据名称关联对象和通过对象匹配相应名称的服务。命名服务允许你通过名称找到一个与之对应的对象。——一个命名服务的主要功能就是把一个人类容易理解的名字映射到相应的对象。举例来说,Inter域名系统(DNS把机器名字(例如映射到IP地址(...。一个文件系统把一个文件名(例如c:/bin/autoexec.bat)映射到一个文件句柄以便程序能够存取文件的内容。目录服务——目录服务是命名服务的自然扩展。两者之间的主要差别是目录服务中对象可以有属性(例如,用户有email地址,而命名服务中对象没有属性。因此,在目录服务中,你可以根据属性搜索对象。JNDI允许你访问文件系统中的文件,定位远程RMI注册的对象,访问象LDAP这样的目录服务,定位网络上的EJB组件。.JNDI架构JNDI架构提供了一组标准的独立于命名系统的API,这些API构件在于命名系统有关的驱动之上。这一层有助于将应用与实际数据源分离,而不用理会应用访问的是LDAP,RMI,DNS,还是其他的目录服务。换句话说,JNDI独立于目录服务的具体实现,只要你有目录的服务提供接口(或驱动,你就可以使用目录服务。Java应用程序---------------JNDI应用编程接口------------------命名和目录管理器----------------------服务提供者接口(SPI)--------------------------WeblogicJNDI树|LDAP|RMI|DNS|.......JNDI架构JNDI提供了应用编程接口(applicationprogramminginterface,API)和服务提供者接口(serviceproviderinterface,SPI).这一点的真正含义是,要让你的应用与命名服务或目录服务交互,必须有这个服务的JNDI服务提供者,这正是JNDISPI发挥作用的地方。服务提供者,这正是JNDISPI发挥作用的地方。服务提供者基本上是一组类,这些类为各种具体的命名和目录服务实现了JNDI接口-很像JDBC驱动为各种具体的数据库系统实现了JDBC接口一样。作为一个应用开发者,你不必操心JNDISPI。你只需要确认你要使用的每一个命名或目录服务都有服务提供者。.包结构——JNDI包含在JavaSE平台中。要使用JNDI,您必须有JNDI的类和至少一个服务提供者。JDK.及以上的版本包含了JNDI,支持以下服务:.LDAP(LightweightDirectoryAessProtocol)服务提供者.CORBACOS(monObjectRequestBrokerArchitecturemonObjectServices)命名服务提供者.RMI(JavaRemoteMethodInvocation)注册服务提供者.DNS(DomainNameSystem)服务提供者.包结构更多的服务提供者可以在如下网址找到可以下载的服务提供者列表:Propertiesp=newProperties();p.put(Context.INITIAL_CONTEXT_FACTORY,“weblogic.jndi.WLInitialContextFactory“);p.put(Context.PROVIDER_URL,“t://localhost:“);//下面的内容是为了验证用户身份而设置的p.put(Context.SECURITY_PRINCIPAL,“maly“);//用户名malyp.put(Context.SECURITY_CREDENTIALS,““);//密码END

  ⒏分布式处理技术是什么

  ⒐Java分布式处理技术.RMI的基本概念..什么是RMIRMI(RemoteMethodInvocation)远程方法调用是一种计算机之间对象互相调用对方函数,启动对方进程的一种机制,使用这种机制,某一台计算机上的对象在调用另外一台计算机上的方法时,使用的程序语法规则和在本地机上对象间的方法调用的语法规则一样。..RMI的用途、分布式体系结构我们为什么要使用分布式计算呢??当我们想与多个用户或客户机共享一个中央资源(如一个数据库时,就会使用分布式计算。?分布式计算用来利用多个系统的组合计算能力,以便比在单个系统上更有效或更快地解决问题。可以用多种方法配置多个计算机系统以共享处理,包括共享内存、共享磁盘或只是共享一条公共通信通道。最新的技术允许物理上相隔很远的系统能够在处理计算问题时协同工作。关于利用计算能力这一主题,因特网及伴随的通信协议TCP/IP的出现已使无数的计算机系统史无前例地连接起来。对一些应用程序来说,能够利用如此多的计算功能来解决问题是令人满意的。甚至更吸引人的是,大多数计算机系统都有充足的空闲时间,可以帮助解决其它问题。将来,网格计算会利用分布式计算能力进行出售,这与电力行业出售电能非常相似。、Java分布式对象编程技术RMI是EnterpriseJavaBeans的支柱,是建立分布式Java应用程序的方便途径。只要按照RMI规则设计程序,可以不必再过问在RMI之下的网络细节了,如:TCP和Socket等等。任意两台计算机之间的通讯完全由RMI负责。调用远程计算机上的对象就像本地对象一样方便。..RMI应用程序分类依据RMI应用程序各部分职责,可对应用程序进行如下分类:?服务器程序:服务器程序将创建多个远程对象,并使每个对象能够被引用。等待客户端调用创建好的远程对象上的方法。?客户端程序:从服务端程序中得到一个或多个远程对象的引用。客户端能用此引用调用远程对象上的方法。?对等计算程序:双方地位相等,互为对方的服务器和客户端。.创建RMI应用程序步骤、定义远程接口在Java中,远程对象是实现远程接口的类的实例,远程接口声明每个要远程调用的方法。在需要创建一个远程对象的时候,我们通过传递一个接口来隐藏基层的实施细节,客户通过接口句柄发送消息即可。远程接口具有如下特点:?远程接口必须为public属性。如果不这样,除非客户端与远程接口在同一个包内,否则当试图装入实现该远程接口的远程对象时,调用会得到错误结果。?远程接口必须扩展接口java.rmi.Remote。?除与应用程序本身特定的例外之外,远程接口中的每个方法都必须在自己的throws从句中声明java.rmi.RemoteException。(或RemoteException的父类。代码范例package.itjob;importjava.rmi.*;publicinterfaceRmiSampleextendsRemote{publicintsum(inta,intb)throwsRemoteException;}、实现远程接口远程对象实现类必须扩展远程对象java.rmi.UnicastRemoteObject类,并实现所定义的远程接口。远程对象的实现类中包含实现每个远程接口所指定的远程方法的代码。这个类也可以含有附加的方法,但客户只能使用远程接口中的方法。因为客户是指向接口的一个句柄,而不是它的哪个类。必须为远程对象定义构造函数,即使只准备定义一个默认构造函数,用它调用基础类构造函数。因为基础类构造函数可能会抛出java.rmi.RemoteException,所以即使别无它用必须抛出java.rmi.RemoteException例外。代码范例package.itjob.rmi;importjava.rmi.*;importjava.rmi.server.*;import.itjob.RmiSample;/**远程接口实现类,继承了UnicastRemoteObject并实现了RmiSample远程接口*/publilassRmiSampleImplextendsUnicastRemoteObjectimplementsRmiSample{//覆盖默认构造函数并抛出RemoteExceptionpublicRmiSampleImpl()throwsRemoteException{super();}//所有远程实现方法必须抛出RemoteExceptionpublicintsum(inta,intb)throwsRemoteException{returna+b;}}、编写服务器类包含main方法的类可以是实现类自身,也可以完全是另一个类。下面通过RmiSampleServer来创建一个远程对象的实例,并通过java.rmi.registry.LocateRegistry类的createRegistry方法从指定端口号启动注册服务程序,也可以通过执行rmiregistry命令启动注册服务程序,注册服务程序的缺省运行端口为。代码范例package.itjob.rmi;importjava.rmi.*;importjava.rmi.registry.*;publilassRmiSampleServer{publicstaticvoidmain(Stringargs){/*创建和安装一个安全管理器,令其支持RMI.作为Java开发包的一部分*适用于RMI唯一一个是RMISecurityManager.*if(System.getSecurityManager()==null){System.setSecurityManager(newRMISecurityManager());}*/try{LocateRegistry.createRegistry();RmiSampleImplserver=newRmiSampleImpl();Naming.rebind(“//localhost:/SAMPLE-SERVER“,server);System.out.println(“远程对象注册成功,RMI服务已经启动,等待客户端调用....“);}catch(java..MalformedURLExceptionme){System.out.println(“MalformedURL:“+me.toString());}catch(RemoteExceptionre){System.out.println(“Remoteexception:“+re.toString());}catch(AlreadyBoundExceptionabe){System.out.println(“(AlreadyBoundexception:“+abe.toString());}}}?代码范例中将将远程对象名字绑定到对远程对象的引用上:LocateRegistry.createRegistry();指定本RMI服务程序不使用默认端口,而是使用自己指定的端口。Naming.rebind(“//localhost:/SAMPLE-SERVER“,Server);将远程对象在服务器上注册并指定了将查找远程对象引用的URL,URL格式为//host:port/name。其中host是注册表所在的主机(远程或本地,port是注册表接受调用的端口号,name是未经注册表解释的简单字符串。host和port两者都是可选项。如果省略了host,则主机默认为本地主机。如果省略了port,则端口默认为,该端口是RMI的注册表rmiregistry使用的“著名”端口。代码范例的运行结果如图所示:图.代码范例运行结果、编写使用远程服务的客户机类客户机类的主要功能有两个,一是通过Naming.lookup方法来构造注册服务程序stub程序实例,二是调用服务器远程对象上的远程方法。代码范例package.itjob.rmi;importjava.rmi.*;importjava.rmi.server.*;publilassRmiSampleClient{publicstaticvoidmain(Stringargs){try{Stringurl=“//localhost:/SAMPLE-SERVER“;RmiSampleRmiObject=(RmiSample)Naming.lookup(url);System.out.println(“+=“+RmiObject.sum(,));}catch(RemoteExceptionexc){System.out.println(“Errorinlookup:“+exc.toString());}catch(java..MalformedURLExceptionexc){System.out.println(“MalformedURL:“+exc.toString());}catch(java.rmi.NotBoundExceptionexc){System.out.println(“NotBound:“+exc.toString());}}}、为远程对象实现创建根和干客户端是通过Naming.lookup方法来构造注册服务程序stub程序实例,通过该实例的引用来发起对远程对象方法调用的,所以在运行运行客户端应用前必须为远程对象实现创建根(stub)和干(Skeleton)。要创建存根程序和骨架文件,应以包含远程对象实现的已编译类包全名运行rmic编译器。存根(Stub是远程对象在客户端的代理,它将RMI调用传递给服务器端的骨架(Skeleton,后者负责将该调用传递给实际的远程方法。在命令行模块下运行RMIC调用:图.RMIC命令调用RMIC命令运行结果如图所示:图.RMIC运行结果?我们可以看系统帮我们生成了存根(stub)RmiSampleImpl_Stub.class但系统并没有帮我们生成骨架(SkeletonRmiSampleImpl_Skeleton.class。这与JDK的版本有关:采用JDK.版本运行rmiom.itjob.rmi.RmiSampleImpl命令系统将会生成存根(stub)RmiSampleImpl_Stub.class和骨架(SkeletonRmiSampleImpl_Skeleton.class两个类文件;采用JDK.版本运行rmiom.itjob.rmi.RmiSampleImpl命令系统将只会生成存根(stub)RmiSampleImpl_Stub.class,骨架(SkeletonRmiSampleImpl_Skeleton.class的功能将通反射技术由系统在运行时自动实现;、运行程序依次做完上述步骤后,我们现在来运行一下我们的RMI应用。先运行服务端程序,运行结果如图.所示。接下来我们运行客户端程序(代码范例,运行结果如图所示:图.客户端程序运行结果看到上面结果说明我们客户端程序进行RMI远程调用已经成功了。.RMI接口和类简介负责指定rmi系统远程对象行为的接口和类在java.rmi包中定义的,接下来我们了解一下几个核心接口和类:、Java.rmi.Remote接口在rmi中,远程接口声明了可从远程java虚拟机中调用的方法集,远程接口必须满足下列条件:?远程接口必须至少直接或间接的扩展java.rmi.Remote接口。?远程接口中的方法申明必须满足:远程方法申明在其throws子句中除了要包含与应用程序有关的异常之外,还必须包括RemoteException异常(或她的父类);在远程方法申明中,作为参数或返回值申明的远程对象必须申明为远程接口,而非该接口的实现类。、Java.rmi.RemoteException类RemoteException类是在远程方法调用期间由RMI运行所抛出的异常,在使用了rmi系统的应用程序中,远程接口中申明的远程方法在其throws子句中必须指定RemoteException或者其超类。?当远程方法调用由于某种原因失败时,将抛出RemoteException异常。?RemoteException类是一个已检验的异常,而不是RuntimeException。、Java.rmi.server.RemoteObject类?RMI服务器函数由RemoteObject类及其子类RemoteServer,UnicastRemoteObject和Activatabble提供。?RemoteObject为远程对象敏感的Object方法,hashCode,equals和toString方法提供实现。?创建远程对象并将其导出,所需的方法由类UnicastRemoteObject和Activatable提供,子类可以识别远程方法。?UnicastRemoteObject定义了单个调用的远程对象,其引用只有在服务器进程运行时才有效。?类Activatable是抽象类,它定义的activatable远程对象在其远程方法被调用时开始执行,并在必要时自己关闭。、Java.rmi.registry.LocateRegistry类LocateRegistry类用于获得对特定主机的引导远程对象注册服务程序的引用(创建stub),或者创建能在特定端口接受调用的远程对象注册服务程序,注册服务程序实现将远程对象名与远程对象引用关联的简单命名语法,服务器重新启动不会记住这些名字和远程对象之间的绑定。LocateRegistry类中的方法:publicstaticRegistrygetRegistry()throwsRemoteExceptionPublicstaticRegistrygetRegistry(intport)throwsRemoteExceptionPublicstaticRegistrygetRegistry(Stringhost)throwsRemoteExceptionPublicstaticRegistrygetRegistry(Stringhost,intport)throwsRemoteExceptionPublicstaticRegistrygetRegistry(Stringhost,intport,RMIClientSocketFactorycsf)throwsRemoteExceptionPublicstaticRegistrycreateRegistry(intport)throwsRemoteExceptionPublicstaticRegistrycreateRegistry(intport,RMIClientSocketFactorycsf,RMIServerSocketFactoryssf)throwsRemoteException、Java.rmi.Naming类Naming类提供了存储和获得远程对象注册服务程序中的远程对象进行引用的方法?Naming类中的方法以url的形式作为其中的一个参数,//host:port/name?当远程对象使用rmi注册服务程序在本地主机上进行过注册后,远程主机上的调用程序就可以按名称查询远程对象,获得其引用,然后在对象上调用远程方法。PublicstaticRemotelookup(Stringname)throwsNotBoundException,MalformedURException,RemoteExceptionPublicstaticvoidbind(Stringname,Remoteobj)throwsAlreadyBoundException,MalforedURException,RemoteExceptionPublicstaticvoidunbind(Stringname)throwsRemoteException,NotBoundException,MalformedURLExceptionPublicstaticvoidrebind(Stringname,Remoteobj)throwsRemoteException,MalformedURLException、Java.rmi.server.UnicastRemoteObject类类UnicastRemoteObject创建并导出远程对象,该类实现的远程服务具有以下特点:?将这种对象的引用至多仅在创建该远程对象的进程生命周期内有效。?通过TCP传输与远程对象通信调用,参数和结果使用流协议在客户端和服务器之间进行通信。、Stub和skeleton在远程对象的通信过程中,rmi使用标准机制:stub和skeleton图.Stub和Skeleton?Stub的功能初始化与包含远程对象的远程机器的连接。对远程机器参数进行编组(写入并传输。等待方法调用结果。读取返回值或返回的异常。将值返回给调用程序。?Skeleton的功能在远程机器中,每个远程对象都可以有相应的skeleton,skeleton负责将调用分配给实际的远程对象实现,他的主要功能如下:读取远程方法的参数。调用实际远程对象实现上的方法。将结果(返回值或异常编组(写入并传输给调用程序。.JNDI基本概念JNDI诞生的理由似乎很简单。随着分布式应用的发展,远程访问对象访问成为常用的方法。虽然说通过Socket等编程手段仍然可实现远程通信,但按照模式的理论来说,仍是有其局限性的。RMI技术,RMI-IIOP技术的产生,使远程对象的查找成为了技术焦点。JNDI技术就应运而生。JNDI技术产生后,就可方便的查找远程或是本地对象。、JNDI是什么?JNDI(TheJavaNamingandDirectoryInterface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。为开发人员提供了查找和访问各种命名和目录服务的通用、统一的方式。借助于JNDI提供的接口,能够通过名字定位用户、机器、网络、对象服务等。?命名服务:就像DNS一样,通过命名服务器提供服务,大部分的JEE服务器都含有命名服务器。?目录服务:一种简化的RDBMS系统,通过目录具有的属性保存一些简单的信息。目录服务通过目录服务器实现,比如微软ACTIVEDIRECTORY等。、JNDI的好处:?包含大量命名和目录服务,可以使用相同API调用访问任何命名或目录服务。?可以同时连接多个命名和目录服务。?允许把名称同JAVA对象或资源关联起来,不必知道对象或资源的物理ID。?使用通用接口访问不同种类的目录服务?使得开发人员能够集中使用和实现一种类型的命名或目录服务客户API上。.JNDI应用程序结构JNDI的结构由一个API和一个SPI组成,Java应用程序实用JNDIAPI访问各种各样的命名和目录服务。图.JNDI应用程序结构、JNDI上下文前面提到命名服务是将名称与对象相关联。这种关联被称为绑定。一组这样的绑定被称为上下文,Jndi上下文可以用来查找,捆绑/解除捆绑,创建或者破坏绑定名称操作在JNDI中,上下文是使用javax.naming.Context接口来表示的,而这个接口也正是与命名服务进行交互的主要接口。Context接口中的每个命名方法都有两种重载的形式:lookup(Stringname):接受一个字符串名称参数,查找绑定远程对象。lookup(javax.naming.Name):接受一个结构化的名称,查找绑定远程对象。、初始化上下文InitialContext是一个实现了Context接口的类。使用这个类作为您到命名服务的入口点。创建一个InitialContext对象构造器需要采用一组属性,形式为java.util.Hashtable或其子类之一,比如:代码范例Propertiesprops=newProperties();props.setProperty(“java.naming.factory.initial“,“.jnp.interfaces.NamingContextFactory“);props.setProperty(“java.naming.provider.url“,“localhost:“);InitialContext=newInitialContext(props);要通过JNDI进行资源访问,我们必须设置初始化上下文的参数,主要是设置JNDI驱动的类名(java.naming.factory.initial)和提供命名服务的URL(java.naming.provider.url)。因为Jndi的实现产品有很多。所以java.naming.factory.initial的值因提供JNDI服务器的不同而不同,java.naming.provider.url的值包括提供命名服务的主机地址和端口号。下表列出了用于所支持的服务提供程序的工厂类。表:Context.INITIAL_CONTEXT_FACTORY的值名称服务提供程序工厂文件系统.sun.jndi.fscontext.RefFSContextFactoryLDAP.sun.jndi.ldap.LdapCtxFactoryRMI.sun.jndi.rmi.registry.RegistryContextFactoryCORBA.sun.jndi.cosnaming.CtxFactoryDNS.sun.jndi.dns.DnsContextFactory.RMI与JNDI集成通过上面对JNDI的了解我们可以利用JNDI来管理RMI远程对象的注册服务,我们将代码范例进行如下改写:代码范例package.itjob.rmi;importjava.rmi.*;importjava.rmi.registry.*;importjavax.naming.*;publilassRmiSampleServerJndi{publicstaticvoidmain(Stringargs)throwsException{LocateRegistry.createRegistry();RmiSampleImplserver=newRmiSampleImpl();System.setProperty(Context.INITIAL_CONTEXT_FACTORY,“.sun.jndi.rmi.registry.RegistryContextFactory“);System.setProperty(Context.PROVIDER_URL,“);InitialContextctx=newInitialContext();ctx.bind(“java:p/env/SampleDemo“,server);ctx.close();}}启动服务端程序如图所示:图.JNDI服务程序启动表示服务端程序已经将远程对象在JNDI是进行了注册,等待客户端进行调用。接下来我们改写客户端程序采用JNDI方式来调用远程对象代码范例package.itjob.rmi;importjava.rmi.*;importjava.rmi.server.*;importjavax.naming.*;publilassRmiSampleClientJndi{publicstaticvoidmain(Stringargs)throwsException{System.setProperty(Context.INITIAL_CONTEXT_FACTORY,“.sun.jndi.rmi.registry.RegistryContextFactory“);System.setProperty(Context.PROVIDER_URL,“);InitialContextctx=newInitialContext();Stringurl=“java:p/env/SampleDemo“;RmiSampleRmiObject=(RmiSample)ctx.lookup(url);System.out.println(“+=“+RmiObject.sum(,));}}运行客户端程序如图所示:图.客户端JNDI程序运行结果表示客户端已经通过JNDI调用服务端远程对象成功。.学习总结?RMI运行在一个java虚拟机上的对象调用运行在另一个java虚拟机上的对象的方法.。RMI的用途就是为java程序之间的远程通信提供服务。?RMI的编程思想n对客户端:需要一些特定的代码来引用远程对象,一旦客户端的代码拥有对远程对象的引用,对远程对象上的调用与对本地对象方法的调用除了速度以外没什么区别。n对服务端:必须定义类并实例化类的远程对象,服务器的代码必须能够登记对象并向客户端导出它们的方法,这样,这些方法就能够被远程调用了。n客户端和服务端的代码都必须定义或能够访问一个接口,该接口中申明了可以远程调用的方法,并且两者还可以设置一个安全管理器。n当调用远程对象上的方法时,客户端可以将对象作为参数来传递,并且,远程对象上的方法可以返回对象,这些是通过序列化来实现的。?JNDI为开发人员提供了查找和访问各种命名和目录服务的通用、统一的方式。?JNDI的结构由一个API和一个SPI组成,Java应用程序实用JNDIAPI访问各种各样的命名和目录服务。

  ⒑使用CAS,登录后报错:CASisUnavailable

  ⒒使用CAS,登录后报错:CASisUnavailable是登录错误造成的,解决方法为:

  ⒓首先我在GitHub上下载最新的cas的overlays利用它来搭建一套maven工程。

  ⒔紧接着,我们配置成maven项目,点击maven的package,打包成一个cas服务端的war包。

  ⒕把生成的war包放到Tomcat的webapps目录即可,然后配置Tomcat的server.xml开启端口,需要使用JDK自带的keytool生成证书。

  ⒖最后我们点击Tomcat的bin目录然后就可以启动cas服务端了。

  ⒗最后发现已经登陆成功了,如下图所示。

您可能感兴趣的文章:

相关文章