精华内容
下载资源
问答
  • JBoss远程访问EJB

    千次阅读 2013-06-25 23:10:37
    转自:... 1. 远程访问EJB  针对EJB(1)中的HelloEJB例子中,如果在局域网内的另一台机器调用部署在JBoss里面的HelloEJB,则需将HelloEJBClient中的prop.put("java.naming.provider.url

    转自:http://glmxzz.blog.163.com/blog/static/1332127902009102602532810/

    1. 远程访问EJB

            针对EJB(1)中的HelloEJB例子中,如果在局域网内的另一台机器调用部署在JBoss里面的HelloEJB,则需将HelloEJBClient中的prop.put("java.naming.provider.url", "localhost:1099");这段代码改为prop.put("java.naming.provider.url", "192.168.2.182:1099");,也就是将localhost改为JBoss所在的IP地址,运行,如无意外,将会出错,错误信息大概为:Could not obtain connection to any of these urls: 192.168.2.182:1099。
    2. 访问http://192.168.2.182:8080或者http://127.0.0.1:8080
           此时第一反应便是ping 192.168.2.182,结果并没有出现任何问题,接着便访问http://192.168.2.182:8080,发现不能访问,如果是服务器是Tomcat的话,该访问是没有任何问题的。于是便上网搜索,发现JBoss是默认将IP绑定为127.0.0.1的,所以便会出现访问不了http://192.168.2.182:8080,甚至在JBoss服务器本机也不能访问该地址。而只能访问http://127.0.0.1:8080或者http://localhost:8080,那该如何解决呢?
            打开%JBOSS_HOME%\server\default\deploy\jbossweb.sar目录,编辑server.xml,找到
    <Connector protocol="HTTP/1.1" port="8080" address="${jboss.bind.address}"                                                               connectionTimeout="20000" redirectPort="8443" />
    <Connector protocol="AJP/1.3" port="8009" ddress="${jboss.bind.address}" 
                      redirectPort="8443" />
    将address="${jboss.bind.address}修改为address="192.168.2.182",重启JBoss,便可以在局域网中的任何一台机器上访问http://192.168.2.182:8080,可这次如果在JBoss服务器本机上却不能访问http://127.0.0.1:8080,如果要让两个同时都能访问,则需将address="192.168.2.182"修改为address="0.0.0.0"。
    3.解决远程访问EJB
           现在再次调用HelloEJBClient,发现错误依然,可见上面的修改并没有影响到EJB的调用,仔细想想,刚才所修改的是web的URL,而EJB所需要的是JNDI的URL,所以错误依然,再通过网络搜索,发现可以通过以下方法解决,在%JBOSS_HOME%\bin目录下,创建run.bat的快捷方式,然后如图所示在其Target后面加上--host=192.168.2.182,重启JBoss,然后再次调用HelloEJBClient即可成功。
    JBoss(1) - 十诫 - glmxzz的天空
    如果是在eclipse开发环境下的话,打开Servers视图,双击Jboss服务器,再点击Overview视图中的Open launch configuration,在弹出来的对话框里,如图所示输入--host=192.168.2.182,确定之后重启Jboss,即可。
    JBoss(1) - 十诫 - glmxzz的天空

    至于如何设置JBoss的配置文件才能达到这一效果,目前还没有找到,找到了再添加。
    展开全文
  • 首先将ejb的接口文件jar包导入web项目下的lib目录中 如下是jsp文件编码: String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request....

    首先将ejb的接口文件jar包导入web项目下的lib目录中


    如下是jsp文件编码:

    <%@ page language="java" import="java.util.*,javax.naming.*,com.manfred.ejb.*;" pageEncoding="GB18030"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'index.jsp' starting page</title>
    	<meta http-equiv="pragma" content="no-cache">
    	<meta http-equiv="cache-control" content="no-cache">
    	<meta http-equiv="expires" content="0">    
    	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    	<meta http-equiv="description" content="This is my page">
    	<!--
    	<link rel="stylesheet" type="text/css" href="styles.css">
    	-->
      </head>
      
      <body>
        This is my JSP page. <br>
        =========================================<br>
           以下是web远程调用<br>
        <%
        	final Hashtable jndiProperties = new Hashtable();
        	jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
        	Context context;
        	try{
        		context = new InitialContext(jndiProperties);
        		//appName和moduleName分别就打包的格式而定
        		//如果是.ear就是appName,其它就是moduleName(.jar,.war)
        		final String appName = "";
        		final String moduleName = "EJB_01";
        		final String disctinctName = "";
        		//实现类名
        		final String beanName = "HelloWorldBean";
        		final String viewClassName = HelloWorldRemote.class.getName();
        		
        		String jndi = "ejb:" + appName + "/" + moduleName + "/"
                    + disctinctName + "/" + beanName + "!" + viewClassName;
        		
        		HelloWorldRemote hwr = (HelloWorldRemote) context.lookup(jndi);
        		out.println(hwr.sayHello("Manfred"));
        	} catch (Exception e) {
        		e.printStackTrace();
        	}
         %>
      </body>
    </html>
    



    展开全文
  • EJB远程访问和本地访问方式

    千次阅读 热门讨论 2015-09-11 21:37:54
    现在初次接触EJB,对于EJB的技术简介和经典理论,我们这里不详细讲述,今天我们主要介绍EJB中两种访问方式以及在这个demo中遇到的问题和解决方法。...首先我们要知道最基础的知识,远程访问我们通过注解@Remote

       现在初次接触EJB,对于EJB的技术简介和经典理论,我们这里不详细讲述,今天我们主要介绍EJB中两种访问方式以及在这个demo中遇到的问题和解决方法。

       EJB支持两种客户端的访问,一种是远程客户端访问,以及客户端与其调用的EJB对象不在一个JVM进程中,另外一种就是本地访问,和第一种相反,客户端和EJB对象同在一个JVM进程中。首先我们要知道最基础的知识,远程访问我们通过注解@Remote来定义企业Bean,本地访问,我们通过@Local来定义。在这里关于远程客户端和本地客户端的特点,我们不介绍了,内容很好理解。下面我们用两个时序图来表示这两种调用方式,由此来分析两种不同访问方式的区别:

       远程访问调用方式:


      本地访问调用方式:


       从时序图中可以很明显的看出区别在于本地访问客户端方式中不需要进行序列化和反序列号,只需要直接调用对应的方法即可。对于远程方式采用传值和本地方式采用传址意义不同就在于传值方式,本地客户端访问和远程客户端访问,对象会发生变化,而传地址方式,因为操作对象只需要知道地址,所有不管在什么样客户端访问都可以找到相应的对象,所以对象不会发生变化。

       安装JBoss和开发部署程序这里不详细介绍了,重点放在Demo实现过程中。

    首先建立EJB Project项目,开发服务端:

       我们需要编写一个接口和一个实现类:


       注意,我这里有两个接口分别为:UserManager和UserManagerLocal,因为我用的是Jboss-5.5.1-GA,这个版本的JBoss和4.0版本的JBoss的有点不同就在于@Remote和@Local注解不能同时使用,会抛出这种异常:

    org.jboss.deployers.spi.DeploymentException: Error deploying Ejb_03.jar: Cannot designate both javax.ejb.Local and javax.ejb.Remote annotations without 'value' attribute on UserManagerBean. [EJBTHREE-1025]

       他的意思就是说,同一个EJB的Bean对象不能有两种不同的访问方式,因为采用远程和本地bean在JNDI查找的过程中都是以同一个名字进行查找的,如果需要有两种访问方式,我们要为其准备一个value值,指定其具体的访问方式,所以我们采用的解决方法就是,多编写一个接口类,指定为local,也就是UserManagerLocal,并且在bean对象中为不同的方式指定具体的类:

    package com.bjsxt.ejb;
    
    import javax.ejb.Local;
    import javax.ejb.Remote;
    import javax.ejb.Stateless;
    
    @Stateless
    @Remote({UserManager.class})
    @Local({UserManagerLocal.class})
    public class UserManagerBean implements UserManager,UserManagerLocal {
    	
    	public void addUser(User user) {		
    		System.out.println("User[username="+user.getUsername()+"]已经被成功保存");
    		user.setId(10);
    	}
    
    }
    

       编写客户端:

       我们在写客户端程序的时候:

    import javax.naming.InitialContext;
    
    public class UserManagerClient {
    
    	/**
    	 * @param args
    	 * 远程访问必须要序列化,所以用户类要实现Serializable接口
    	 */
    	public static void main(String[] args) throws Exception{
    		
    		InitialContext context=new InitialContext();
    		UserManager userManager=(UserManager)context.lookup("UserManagerBean/remote");
    		User user=new User();
    		user.setUsername("肖红");
    		user.setPassword("xiaohong");
    		userManager.addUser(user);
    		System.out.println("用户信息已经被成功保存,它的ID是:"+user.getId());
    		
    	}
    }
    

       我们编写本地客户端(ejb_03_webclient):

       在页面中进行调用:

    <%
    	    InitialContext context=new InitialContext();
    		UserManager userManager=(UserManager)context.lookup("UserManagerBean/remote");
    		User user=new User();
    		user.setUsername("张三");
    		user.setPassword("zhangsan");
    		userManager.addUser(user);
    		out.println("用户信息已经被成功保存,它的ID是:"+user.getId());
       %>
    

       因为我们采用的远程方式remote,虽然将服务端和本地端部署到同一个JBoss服务器上,也就是用的本地客户端:

       运行程序,然后进行访问:http://localhost:8081/ejb_03_webclient/

       访问结果为:

       采用本地local:

    <%
    	    InitialContext context=new InitialContext();
    		UserManagerLocal   userManagerlocal=(UserManagerLocal)context.lookup("UserManagerBean/local");
    		User user=new User();
    		user.setUsername("张三");
    		user.setPassword("zhangsan");
    		userManagerlocal.addUser(user);
    		out.println("用户信息已经被成功保存,它的ID是:"+user.getId());
       %>
    

       访问结果为:

       两者出现的不同,因为虽然我们是在本地客户端进行访问,但是第一种情况我们仍然使用的是远程的访问方式,采用远程访问方式,客户端参数都会序列化。实现序列化接口以后传递是一个具体的值,这样会发生改变,客户端就不会看到原来的对象。而第二种方式是采用的本地访问方式,不需要序列化,我们从客户端传到服务端的是同一个对象,也就是我们传递的是一个地址,可以通过地址找到这个对象然后进行操作。当服务器端改变了id值,客户端会看到这种改变。

       下面分析一下我遇到的问题以及解决方法:

       在这个过程中我遇到了这样一个问题:“java.lang.ClassCastException: $Proxy103 cannot be cast tocom.tgb.ejb.UserManager”:

       这个问题的解决方法就是修改:

    G:\TGB\zhongjianjian\jboss-5.0.1.GA\server\default\deployers\jbossweb.deployer\META-INF\ war-deployers-jboss-beans.xml中的UseJBossWebLoader值:

    <propertyname="useJBossWebLoader">false</property>将false修改为true,然后重启JBoss,


       另外一个典型的问题就是关于端口号占用,当我们的程序出现这个问题后我们可以查看占用端口号的程序将其关闭释放出端口号,或者修改我们本程序的端口号,我采用的是修改我们本程序的端口号:找到G:\TGB\zhongjianjian\jboss-5.0.1.GA\server\default\deploy\jbossweb.sar\ server.xml文件,修改端口号为8081:

    <Connector protocol="HTTP/1.1" port="8081" address="${jboss.bind.address}" 
                   connectionTimeout="20000" redirectPort="8443" />

       port端口号由8080修改为8081。

       虽然解决掉这些问题也用了我很长时间,但是就是在这样的不断磨练中锻炼了自己使用搜索引擎的能力,我们不怕遇到问题,我们喜欢遇到问题,因为这是这样一个一个的问题让我们长了见识,懂了知识。






    展开全文
  • 远程客户端跨JVM访问EJB

    千次阅读 2009-06-07 16:15:00
    即本地客户端,远程客户端和web服务客户端。 所谓本地客户端,就是其必须与所要访问的的Bean在同一个JVM中,对于远程客户端无此限制,可以在同一个JVM中,也可 以不在通一个JVM中。Web服务客户端也可以以两种方式...

                               对于EJB主要指(SessionBean)大体上有三种客户端。即本地客户端,远程客户端和web服务客户端。

     

    所谓本地客户端,就是其必须与所要访问的的Bean在同一个JVM中,对于远程客户端无此限制,可以在同一个JVM中,也可

     

    以不在通一个JVM中。Web服务客户端也可以以两种方式来访问Bean,但仅限于无状态会话Bean,消息驱动Bean则不可

     

    以。而对于客户端的形式,则无要求,可以是web客户端,普通java应用客户端或其他的Bean。

     

     

                              本次讨论的是EJB的远程客户端,且客户端与Bean在不同的JVM中的调用方式。环境为两个xp,

     

    MyEclipse6.0,JBoss5。还是简单的Hello World的例子。不是Hello fancy !呼呼 !

     

     

      1.首先写远程接口如下:

     

    package test;

    import javax.ejb.Remote;

    @Remote
    public interface HelloWorldRemote {

     public String sayHello(String name);
    }

     

    2.写Bean类实现远程接口

    package test;

    import javax.ejb.Stateless;


    @Stateless
    public class HelloWorld implements HelloWorldRemote{

     public String sayHello(String name){
      
      return "Hello ,"+name;
     }
    }

     

    3.利用MyEclipse打包,将远程接口和Bean类打成helloworld.jar

     

    4.部署EJB,即将helloworld.jar直接copy到D:/jboss5/server/default/deploy下。

     

    5.写客户端代码如下:

     

     

    package client;

    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Properties;

    import javax.naming.InitialContext;
    import javax.naming.NamingException;

    import test.HelloWorldRemote;

     


    /**
     *
     * javac -d . *.java                              ---编译命令
     *
     * java -Djava.ext.dirs=D:/clientLib TestHello    ---运行命令, -Djava.ext.dirs=D:/clientLib指定了外部jar包目录
     *
     *
     * @author rainsunneau
     *
     */

    public class TestHello {

     public static void main(String[] args){

      ClassLoader loader = TestHello.class.getClassLoader();
      InputStream in = loader.getResourceAsStream("context-config.properties");
      Properties props = new Properties();
      try {
       props.load(in);
       try {
        InitialContext ctx = new InitialContext(props);
        HelloWorldRemote hello = (HelloWorldRemote)ctx.lookup("HelloWorld/remote");  
        System.out.println(hello.sayHello("fancy!"));
       } catch (NamingException e) {
        e.printStackTrace();
       }
      } catch (IOException e) {
       e.printStackTrace();
      }
     }
    }


    6.创建JNDI配置文件context-config.properties如下:

     

    java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
    java.naming.provider.url=192.168.1.108:1099
    java.naming.factory.pakgs=org.jboss.naming:org.jnp.interfaces

     

    7.在IDE中直接运行客户端测试程序,输出如下:

     

    Hello ,fancy!

     

     

    8.将客户端程序连同配置文件一同打包,并连同所需jar包,放到另外一台xp上测试。

     

    java -Djava.ext.dirs=D:/clientlib client.TestHello

     

    结果抛如下异常:

     

    javax.naming.CommunicationException [java.rmi.ConnectException: Connection refused to host。。。

     

    根据前辈的帖子指点:

     

     

    客户端程序向服务端请求一个对象的时候,返回的stub对象里面包含了服务器的hostname,客户端的后续操作根据这个

     

    hostname来连接服务器端。

     

    解决方式如下:

     

     

    (1).修改hostname.

            vi /etc/hosts

             将 127.0.0.1 改为真实地址,如:192.168.100.72。这样客户端就能得到真实的ip了。

     (2)在启动jboss时显示指定hostname.

           如:nohup ./run.sh --host="192.168.100.72" &

     

    我用了(2),因为我的是xp吗。第一种方式对应到windows/system32/drivers/etc/hosts文件,怎么修改都不好用。

     

     

    第二种方式可行:启动JBoss命令如下:

     

    run -b192.168.1.108 或 run --host=192.168.1.108。

     

     

    结果在另一台xp上看到:

     

    Hello ,fancy!

     

     

    至此终于实现了跨JVM远程访问EJB。

     

                           

     

                           

                           

     

     

    展开全文
  • 远程EJB使用

    2016-01-07 16:39:50
    urn:jboss:domain:remoting Socket端口配置 ejb-security-realm 远程调用EJB总共以下几个步骤 第一步 写服务器端service ...远程EJB一定要写接口,学过EJB的都知道本地EJB是可以无接口的。 这里为了简
  • 这篇文章简单实现在Java EE7 下实现远程客户端访问Java EE服务器EJB的功能 准备工作: JDK9(jdk-8u92)netbeans-8.1 Java ee sdk (java_ee_sdk-7u2)全部安装完成netbeans启用Java SE 和 Java EE相关插件 创建...
  • Web Service与SOAweb service是解决跨平台(OS)、跨语言(java、C等)系统间协作的一种技术方案。既然是跨语言,所以其语言定义规范(WSDL)里没有“类”、“方法”这样面向对象语言才会有的概念。而是有“端口”...
  • 第 16 章 通过Spring使用远程访问web服务 16.1. 简介 Spring提供类用于集成各种远程访问技术。这种对远程访问的支持可以降低你在用POJO实现支持远程访问业务时的开发难度。目前,Spring...
  • Flex如此简单访问EJB

    2011-08-13 18:24:39
    1、通过blazeds/lcds访问远程EJB,Pomer框架封装了blazeds/lcds的访问式,用户无须添加配置文件,只须在EJBDestinationRegister注册即可将Java对象发布成blazeds/lcds的远程对象(RemoteObject),进行远程访问
  • 创建EJB控件的典型步骤 EJB系统控件无法直接用于访问EJB资源,使用者必须继承EJB控件来创建自己的访问控件。一个继承控件只能对应于一个EJB的访问,所以使用者必须针对不同的EJB创建不同的访问控件。 你可以使用...
  • 使用Spring进行远程访问Web服务

    千次阅读 2007-09-07 14:54:00
     使用Spring进行远程访问Web服务17.1. 简介Spring为各种远程访问技术的集成提供了工具类。Spring远程支持是由普通(Spring)POJO实现的,这使得开发具有远程访问功能的服务变得相当容易。目前,Spring支持四种...
  • 通过Spring使用远程访问web服务

    千次阅读 2008-10-16 14:57:00
    Spring提供类用于集成各种远程访问技术。这种对远程访问的支持可以降低你在用POJO实现支持远程访问业务时的开发难度。目前,Spring提供对下面四种远程访问技术的支持: 远程方法调用(RMI)。通过使用...
  •  通过Spring使用远程访问web服务Spring提供类用于集成各种远程访问技术。这种对远程访问的支持可以降低你在用POJO实现支持远程访问业务时的开发难度。目前,Spring提供对下面四种远程访问技术的支持: 远程方法...
  • Java Web(J2EE 与EJB

    2020-07-01 16:42:00
    2. J2EE与EJB 2.1 什么是J2EE 是java平台企业版简称,用来开发与部署企业级应用的架构,提供一种统一的、开放标准的多层平台,主要由构件、服务和通信组成。 构件包含客户端构件和服务器构件,客户端构件主要包含两...
  • 使用Spring进行远程访问(rmi)与Web服务

    千次阅读 2010-06-12 22:51:00
    Spring使得开发具有远程访问功能的服务变得相当容易,而这些远程访问服务由普通Spring POJO实现。目前,Spring支持四种远程技术: 远程方法调用(RMI) 。通过使用 RmiProxyFactoryBean 和 ...
  • 访问EJB、JDBC、JMS代码示例 2011-03-20 14:52 要调用一个本地或者远程无状态session bean上的方法,客户端代码必须进行JNDI查找,以获取(本地或远程的)EJB Home对象,然后调用该对象的"create"方法,...
  • 第 16 章 通过Spring使用远程访问web服务16.1. 简介Spring提供类用于集成各种远程访问技术。这种对远程访问的支持可以降低你在用POJO实现支持远程访问业务时的开发难度。目前,Spring提供对下面四种远程访问...
  • 本人调试环境是:Tomcat7 jBOSS4.2.3GA 先创建一个普通的java项目 名为HelloWorld 导入JBOSS下的client下的所有jar包 接着开始进行编码 ... * 如果是远程调用,则使用此接口 * @author heardy * */ pu
  • EJB远程接口调用

    2017-03-28 17:56:00
    一.EJB简介 EJB是sun的JavaEE服务器端组件模型,设计目标与核心应用是部署分布式应用程序。简单来说就是把已经编写好的程序(即:类)打包放在服务器上执行。凭借java跨平台的优势,用EJB技术部署的分布式系统...
  • Spring访问EJB3.0的SessionBean方法

    千次阅读 2013-05-28 11:20:31
    Spring2.*提供了一个访问EJB的方法,即 “org.springframework.ejb.access.LocalStatelessSessionProxyFactoryBean”和 “org.springframework.ejb.access.SimpleRemoteStatelessSessionProxyFactoryBean” ...
  • 企业级服务模块简化了其中的部分步骤,它为我们完成了初始化上下文等任务。以下为客户端示例。...{1、访问其他服务器时,可以从注册表查找到企业服务的名称 2、 不同的服务器对应的模块提供相同的接口
  • EJB3.0与Web Service

    千次阅读 2007-08-26 00:14:00
    Java EE API 包括 JAX-RPC、SAAJ和JAXR。SAAJ:SOAP with Attachments API for Java。JAXR:Java API for XML Registries。Web service API的主要目的是将Java...通过JAX-RPC访问Web Service有三种API可以用来访问w
  • 导读 因为JBOSS6,7版本在EJB的本地调用和远程调用的写法上不同于之前的版本。所以在本篇文章中将给出代码实例,仅供参考。... 它可以是Web组件(如:JSP、Servlet)、应用客户端或其他的EJB 对客户端来说
  • EJB的Remote访问方式和Local访问方式

    千次阅读 2014-02-22 08:56:14
    如果我们的ejb和客户端同时部署在这个jvm中,当客户端访问ejb的时候我们就认为是本地访问,否则则是远程访问。那么远程访问和本地访问有什么区别呢? 首先第一点来讲本地访问和远程访问在性能上是有很大的差别的,...
  • 这个年代还在写EJB 2.1的东西感觉很怪,毕竟我在网上寻找答案的时候发现绝大多数提问的帖子都是04年以前的了,如今也没什么人还会用EJB 2.1以下的版本做项目。然而,实际生产总是跟不上潮流的,公司里需要我维护的...
  • Spring远程访问

    千次阅读 2012-02-22 21:49:01
    对于不适用EJB的Java EE应用来说,构建分布式应用的常见方式就是RMI(remote method invocation,Java远程方式调用),他使的运行在一个JVM上的Java对象能被另一个JVM访问到。 RMI相当复杂,而EJB引入的一个地方就...
  • EJB

    2019-06-18 15:15:20
    既然说了EJB 是为了"服务集群"和"企业级开发",那么,总得说说什么是所谓的"服务 集群"和"企业级开发"吧! 这个问题其实挺关键的,因为J2EE 中并没有说明白,也没有具体的指标或者事例告诉 广大程序员什么时候用EJB ...
  • ejb

    2012-08-21 00:13:31
    EJB方面 94、EJB2.0有哪些内容?分别用在什么场合? EJB2.0和EJB1.1的区别? 答:规范内容包括Bean提供者,应用程序装配者,EJB容器,EJB配置工具,EJB服务提供者,系统管理员。这里面,EJB容器是EJB之所以能够运行...
  • ejb应用

    2009-01-23 16:09:00
    javax.ejb.EJBHome 接口 编写远程访问EJB 定义远程Home接口时需要继承它 javax.ejb.EJBLocalHome 接口 编写本地访问的EJB定义本地 Home接口时,需要继承它 javax.ejb. EJBLocalObject 接口 编写本地访问的EJB 定义...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,166
精华内容 8,466
关键字:

web远程访问ejb