`
billy_zh
  • 浏览: 61943 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JBoss NamingSystem

阅读更多

  服务定义及启动

<mbean code="org.jboss.naming.NamingService"

      name="jboss:service=Naming"

      xmbean-dd="resource:xmdesc/NamingService-xmbean.xml">

  <attribute name="CallByValue">false</attribute>

  <attribute name="Port">1099</attribute>

  <attribute name="BindAddress">${jboss.bind.address}</attribute>

  <attribute name="RmiPort">1098</attribute>

  <attribute name="RmiBindAddress">${jboss.bind.address}</attribute>

  <depends optional-attribute-name="LookupPool"         proxy-type="attribute">jboss.system:service=ThreadPool</depends>

</mbean> 

NamingService

  // 构造函数 NamingService()

  naming = new Main(this.getClass().getName());

  Main是一个jnp名字服务的实现.

  // 请关注,proxyFactory(JRMPProxyFactoryMBean) 

  // 启动服务 startService()

  naming.start();

    bind ObjectFactory to "java:comp" 

Main.start() 

  // 构造NamingServer, NamingServerJNDI名字服务的实现.

  theServer = new NamingServer(); 

  // initCustomSockFactories() 

  // initJnpInvoker(), 创建NamingServer的服务Stub.

  Remote stub = UnicastRemoteObject.exportObject(theServer, ...);

  serverStub = new MarshalledObject(stub); 

  // initBootstrapListencer()

  启动一个AcceptHandler线程开始listen, 输出serverStub; 

NamingServer 

NamingServerjbossns的核心实现类, 它保存着所有注册的组件,组件的存储结构为树状的。

 

InitialContext

InitialContext是客户端访问JNDI的入口,它通过给定的properties值进行初始化,它可以连接到本地(同一JVM)或者远程的JNDI,典型的初始化代码如下:

Properties props = new Properties();

props.put("java.naming.factory.initial", "...");

props.put("java.naming.factory.url.pkgs", "...");

props.put("java.naming.provider.url", "jnp://...");

InitialContext initCtx = new InitialContext(props); 

InitialContext中有一个getDefaultInitCtx方法,它根据java.naming.factory.initial的值来创建Context.

// initialContext.java

protected Context getDefaultInitCtx() throws NamingException{

    if (!gotDefault) {

    defaultInitCtx = NamingManager.getInitialContext(myProps);

        gotDefault = true;

    }

    return defaultInitCtx;

} 

NamingContextFactory实现了InitialContextFactory接口(必须).

// org.jnp.interfaces.NamingContextFactory

public Context getInitialContext(Hashtable env)

      throws NamingException {

String providerURL = (String) env.get(Context.PROVIDER_URL);

Name prefix = null;

int comma = providerURL != null ? providerURL.indexOf(',') : -1;

    if( providerURL != null && comma < 0 ) {

        // 处理prefix

    }

   return new NamingContext(env, prefix, null);

}

这里返回一个NamingContext, 它是Context的实现类,对InitialContext的一些操作都将转发给它,如lookup, bindunbind等操作。 

NamingContext

NamingContextJBossNS中是一个客户端的角色,它与服务端进行通信并得到一个NamingServerstub 

static Naming getServer(String host, int port,

        Hashtable serverEnv)

      throws NamingException { 

  // step 1.

  SocketFactory factory = loadSocketFactory(serverEnv);

  Socket s; 

  // parse localAddr, localPort

  // ... 

  // step 2.

  s = factory.createSocket(host, port, localAddr, localPort); 

  // Get stub from naming server

  // step 3.

  BufferedInputStream bis = new BufferedInputStream(s.getInputStream());

  ObjectInputStream in = new ObjectInputStream(bis);

  MarshalledObject stub = (MarshalledObject) in.readObject();

  server = (Naming) stub.get();

  s.close(); 

  return server;

}

首先装载SocketFactory的实现类,然后解析localAddrlocalPort并创建客户端socket与服务端进行通信,还记得前面的initBootstrapListencer吗?这里创建的socket就是与initBootstrapListencer创建的服务端socket进行连接.

最后我们就得到了一个NameingServerstub. 



 

[jbossns
关系图]

  • 大小: 24.2 KB
分享到:
评论

相关推荐

    jboss相关Jar包

    jboss-system.jar主要是负责JBoss服务器的启动、初始化和系统级别的管理功能。它包含了处理系统属性、类加载器、安全管理等方面的核心组件。例如,它可能包含了一些启动脚本和配置加载逻辑,以及用于处理系统层面的...

    jboss-as-7.1.1.Final

    jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming"); try { Context context = new InitialContext(jndiProperties); final String appName = ""; final String moduleName = "TestEJB...

    jboss_server_default_conf

    该文件包含了JBoss服务的配置,如JNDI(Java Naming and Directory Interface)命名服务、JMS(Java Message Service)消息传递服务、EJB(Enterprise JavaBeans)服务等。 6. **jboss-web.xml** 这是Web应用程序...

    jboss集群EJB3.doc

    props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces"); props.setProperty("jnp.disableDiscovery", "true"); InitialContext ctx = new InitialContext(props); return...

    eclipse + JBoss 5 + EJB3开发指南

    props.setProperty(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces"); props.setProperty(Context.PROVIDER_URL, "localhost:1099"); Context ctx = new InitialContext(props); HelloRemote...

    tomcat、jboss 连接池配置

    System.out.println("查询结果: " + result); } catch (Exception e) { e.printStackTrace(); } } } ``` 通过上述步骤,您已经成功地在Tomcat上配置了一个数据库连接池,并且可以在Java代码中使用它来执行...

    配置mysql 数据源文档

    具体路径为`JBOSS_HOME/modules/system/layers/base/com/mysql`。如果尚未安装,可以从MySQL官网下载对应版本的驱动,并将其放置于上述路径下。 **步骤2:启动JBOSS CLI** 通过命令行启动JBOSS的CLI客户端。命令...

    第一个EJB3.0范例

    import javax.naming.InitialContext; public class Client { public static void main(String[] args) throws Exception { InitialContext ctx = new InitialContext(); CalculatorRemote calc = ...

    EJB3快速入门

    props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces"); ctx = new InitialContext(props); return ctx; } public static void main(String[] args) { try { Context ...

    weblogic配置

    5. **Exception Sorter Class Name**:用于区分数据库异常类型,以便于更精确地处理异常,如`org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter`。 6. **Type Mapping**:数据库类型映射,如`mySQL`。 ...

    JCA Resource Adapter for 1C EIS System-开源

    部署后,Java应用程序可以通过Java EE的Context and Dependency Injection (CDI) 或者JNDI(Java Naming and Directory Interface)来查找和使用适配器,建立到1C系统的连接。 总的来说,"JCA Resource Adapter for...

    EJB分布式远程调用的小例子的简单实现

    为了实现分布式调用,服务器必须支持JNDI和EJB容器,例如JBoss、GlassFish或TomEE。同时,客户端也需要Java EE API来查找和调用远程bean。当客户端调用`doSomething`方法时,请求会被传输到服务器端,EJB执行相应的...

    fscontext.jar&providerutil.jar

    `fscontext.jar`是Java的一个扩展库,主要用于实现文件系统上下文(File System Context)。这个上下文允许开发者通过JNDI接口来操作文件系统,如读取、写入和管理文件或目录。`fscontext.jar`中的类和接口提供了对...

    java分布式之RMI简介及实例

    例如,通过查看JBoss Remoting等框架可以看到这种设计理念的应用。 #### RMI的基本原理 要理解RMI的工作原理,首先要了解计算机网络通信的基本原理。网络通信的核心在于将数据从一台计算机传输到另一台计算机。这...

    JNDI解析

    JNDI的主要目标是为Java开发者提供一个统一的接口来访问不同的命名和目录系统,如LDAP(Lightweight Directory Access Protocol)、DNS(Domain Name System)以及RMI Registry等。 ### JNDI的基本概念 1. **...

    开发中连接数据库需要的JAR包

    数据源是JNDI(Java Naming and Directory Interface)的一部分,可以在应用服务器(如Tomcat、JBoss或WebLogic)中配置,提供更高级的连接管理和池化功能。 5. 连接数据库的代码示例:以下是一个简单的JDBC连接...

Global site tag (gtag.js) - Google Analytics