一个有问题的EJB_Tomcat, WebLogic及J2EE讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Tomcat, WebLogic及J2EE讨论区 »
总帖数
5
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3748 | 回复: 4   主题: 一个有问题的EJB        下一篇 
    本主题由 hui.chen 于 2014-11-11 15:06:54 移动
yunpeng.xian
注册用户
等级:少校
经验:993
发帖:34
精华:0
注册:1970-1-1
状态:离线
发送短消息息给yunpeng.xian 加好友    发送短消息息给yunpeng.xian 发消息
发表于: IP:您无权察看 2014-8-7 17:25:11 | [全部帖] [楼主帖] 楼主

本来是想做一个简单的EJB小例子的但报错了,调了半天也没找出错误:下面是代码:

(使用的是EJB3.0,)
package test;
import javax.ejb.Remote;
@Remote
public interface HelloWorld {
      public String SayHello(String name);
}
package test.impl;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import test.HelloWorld;
@Stateless(mappedName = "myDate")
@Remote({HelloWorld.class})
public class HelloWorldBean implements HelloWorld {
      @Override
      public String SayHello(String name) {
            // TODO Auto-generated method stub
            return name+"说:终于成功了";
      }
}
package test;
import java.io.IOException;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import test.HelloWorld;
public class EjbT extends HttpServlet {
      @Override
      protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
      throws ServletException, IOException {
            String url = "t3://192.168.93.1:7001";
            Properties p = new Properties();
            p.put(Context.INITIAL_CONTEXT_FACTORY,
            "weblogic.jndi.WLInitialContextFactory");
            p.put(Context.PROVIDER_URL, url);
            try {
                  Context context = new InitialContext(p);
                  Object a = context.lookup("ejb2ejb2_jarHelloWorldBean_Home");
                  System.out.println(a.getClass().toString()+"--------------------");
                  HelloWorld s=null;
                  s= (HelloWorld)a;
                  System.out.println(s.getClass());
                  arg0.setAttribute("message", s.SayHello("xianyu"));
            } catch (NamingException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
            }
            arg0.getRequestDispatcher("/index.jsp").forward(arg0, arg1);
      }
}


将ejb打包用weblogic发布,查看JNDI树

将HelloWorld接口打包在web程序里引用

报的错误如下:

北京联动北方科技有限公司

我在想我是不是不该用EJB3.0啊,但网上大多说只有EJB3.0才好用点。

该贴由hui.chen转至本版2014-11-11 15:06:54

该贴由hui.chen转至本版2014-11-11 15:08:04




赞(0)    操作        顶端 
shun.zhang
注册用户
等级:上士
经验:305
发帖:14
精华:0
注册:1970-1-1
状态:离线
发送短消息息给shun.zhang 加好友    发送短消息息给shun.zhang 发消息
发表于: IP:您无权察看 2014-8-8 8:55:35 | [全部帖] [楼主帖] 2  楼

HelloWorld这个接口在发布方(EJB)中有,这个应该会存在。HelloWorld在客户端这里是servlet中也应该有。不知道是不是这个原因。另外,好像EJB发布的时候打成jar包,servlet发布的时候打成war包,这两种包的组织结构不一样。最后,貌似这已经是ejb3的特性了。ejb3之前好像要实现什么Home,还有什么的接口,而且不能使用注解。



赞(0)    操作        顶端 
yunpeng.xian
注册用户
等级:少校
经验:993
发帖:34
精华:0
注册:1970-1-1
状态:离线
发送短消息息给yunpeng.xian 加好友    发送短消息息给yunpeng.xian 发消息
发表于: IP:您无权察看 2014-8-8 17:08:22 | [全部帖] [楼主帖] 3  楼

我们现在看EJB主要是EJB3.0还是以前的版本啊

北京联动北方科技有限公司感觉ejb3.0简洁好多。


赞(0)    操作        顶端 
yunpeng.xian
注册用户
等级:少校
经验:993
发帖:34
精华:0
注册:1970-1-1
状态:离线
发送短消息息给yunpeng.xian 加好友    发送短消息息给yunpeng.xian 发消息
发表于: IP:您无权察看 2014-8-15 14:14:52 | [全部帖] [楼主帖] 4  楼

     上面为一个有问题的EJB,能力有限现在还不知道问题所在。不过我又写了一个能运行成功的,本人初学EJB对其理解有限,下面只是把具体的代码和我觉得需要注意的地方写下来

     我使用的是Myeclipse和weblogic,EJB的版本是3.0

     首先下面是EJB工程的目录结构及代码:

北京联动北方科技有限公司

package com.earth;
public class Employee implements java.io.Serializable
{
      private String name;
      private String
      job;
      private int age;
      public String getName()
      {
            return name;
      }
      public void setName(String
      name) {
            this.name = name;
      }
      public String
      getJob() {
            return job;
      }
      public void
      setJob(String job) {
            this.job = job;
      }
      public
      int getAge() {
            return age;
      }
      public void
      setAge(int age) {
            this.age = age;
      };
}
package com.earth;
import javax.ejb.Remote;
@Remote
public interface CompanyRemote {
      public String
      getName();
      public Employee[] getEmployees();
}
package com.earth;
import javax.ejb.Stateless;
@Stateless(mappedName="Company")
public class Company implements
CompanyRemote {
      @Override
      public String getName() {
            return
            "xianyuyuyuyuyuyu";
      }
      @Override
      public Employee[] getEmployees()
      {
            Employee[] employees = new
            Employee[2];
            employees[0] = new
            Employee();
            employees[0].setName("superman");
            employees[0].setJob("CEO");
            employees[0].setAge(1234);
            employees[1]
            = new
            Employee();
            employees[1].setName("xianyu");
            employees[1].setJob("CTO");
            employees[1].setAge(4321);
            return
            employees;
      }
}


下面是测试用的代码,当然测试用的代码是写在另外一个java工程里

import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import
javax.naming.NamingException;
import com.earth.*;
public class TestCompany {
      /**
      * @param args
      */
      public static void
      main(String[] args) {
            String url =
            "t3://localhost:7001";
            Properties p = new
            Properties();
            p.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
            p.put(Context.PROVIDER_URL,
            url);
            InitialContext ctx;
            try
            {
                  ctx = new
                  InitialContext(p);
                  CompanyRemote companyRemote
                  =(CompanyRemote)ctx.lookup("Company#com.earth.CompanyRemote");
                  System.out.println(companyRemote.getName());
                  Employee[]
                  employees = companyRemote.getEmployees();
                  for(Employee employee :
                  employees){
                        System.out.println("name:"+employee.getName());
                        System.out.println("job:"+employee.getJob());
                        System.out.println("age:"+employee.getAge());
                        System.out.println("----------------------");
                  }
            }
            catch (NamingException e) {
                  // TODO Auto-generated catch
                  block
                  e.printStackTrace();
            }
      }
}


我是直接用Myeclipse发布的,当然你们也可以手动发布这里我就不多少了。

北京联动北方科技有限公司

我们需要通过JNDI来得到对象,下面是查询JNDI名的界面,而JNDI的详解我就不说了。

北京联动北方科技有限公司

下面附上结果:

北京联动北方科技有限公司



赞(0)    操作        顶端 
koei
版主
等级:大校
经验:4186
发帖:7
精华:0
注册:2011-7-21
状态:离线
发送短消息息给koei 加好友    发送短消息息给koei 发消息
发表于: IP:您无权察看 2014-8-18 10:01:31 | [全部帖] [楼主帖] 5  楼

最早那个提示,是说找不到Class的定义,肯定是以排查环境、配置等为主



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