今天又有问题了,所有的例子都是在WEB页面里面调用EJB的,这很容易理解,因为WEB页面也在JBOSS容器里面,EJB和WEB页面同在一个JVM里面,调用当然会比较方便,可是如何跨JVM来调用它里面的对象呢
我照WEB里面的样子试了一下,却发现不行.代码如下
java 代码
-
-
-
-
-
-
-
-
-
- package lbf.demo.filter;
-
-
-
-
-
- import com.foshanshop.ejb3.*;
- import com.foshanshop.ejb3.bean.*;
- import javax.naming.*;
- import java.util.*;
- import java.io.*;
- public class Test {
-
-
- public Test() {
- }
- public static void main(String[] args)throws Exception {
- PrintStream out=System.out;
- Properties props = new Properties();
- props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
- props.setProperty("java.naming.provider.url", "localhost:1099");
- props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");
-
- InitialContext ctx = new InitialContext(props);
- try {
- System.out.println("初始化OK");
- OrderDAO orderdao = (OrderDAO) ctx.lookup("lbf/OneToMany");
- System.out.println("得到OrderDAO");
-
- orderdao.insertOrder();
- List list = orderdao.getAllOrder();
- if (list!=null){
- Integer orderid = null;
- for(int i=0; i
- Order od = (Order) list.get(i);
- if (od!=null){
- if (!od.getOrderid().equals(orderid)){
- orderid = od.getOrderid();
- out.println("==============订单号:"+ od.getOrderid() +"=================
");
- Iterator iterator = od.getOrderItems().iterator();
- while (iterator.hasNext()){
- OrderItem SubOrder = (OrderItem) iterator.next();
- out.println("订购产品:"+ SubOrder.getProductname() +"
");
- }
- }
- }
- }
- }else{
- out.println("获取不到订单列表");
- }
- } catch (Exception e) {
- out.println(e.getMessage());
- }
- }
- }
抛出的错误(注意,不是异常)为
Exception in thread "main" java.lang.NoClassDefFoundError: [Lorg/jboss/aop/advice/Interceptor;
at java.lang.Class.getDeclaredFields0(Native Method)
at java.lang.Class.privateGetDeclaredFields(Class.java:2232)
at java.lang.Class.getDeclaredField(Class.java:1852)
at java.io.ObjectStreamClass.getDeclaredSUID(ObjectStreamClass.java:1582)
at java.io.ObjectStreamClass.access$700(ObjectStreamClass.java:52)
at java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:408)
at java.security.AccessController.doPrivileged(Native Method)
at java.io.ObjectStreamClass.<init></init>(ObjectStreamClass.java:400)
at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:297)
at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:531)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1551)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1465)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1551)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1465)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1551)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1465)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1698)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1304)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1917)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1841)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1718)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1304)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:349)
at java.rmi.MarshalledObject.get(MarshalledObject.java:135)
at org.jnp.interfaces.MarshalledValuePair.get(MarshalledValuePair.java:72)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:652)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:587)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at lbf.demo.filter.Test.main(Test.java:36)
没有发现"org/jboss/aop/advice/Interceptor"类的定义,为什么在这里会需要这么一个类呢,为什么在WEB页面里面不会需要它呢,并且我在WEB页面里面试了,连
props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url", "localhost:1099");
props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");
这些变量没设都可以通过,并且顺利的得到该得到的对象,我这里如果去除了的,就会出异常,说
Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
需要配置环境变量什么的.
EJB肯定是可以跨JVM调用的,连平台都可以跨,那JVM又算什么.可是在我这里为什么连JVM也跨不了呢?
因为调试EJB总用WEB网页的形式也不好,因为网页也要发布,如果直接可以用application来调用,那岂不是更方便?
唉,此问题留给以后解决.希望能尽快在应用程序中调用EJB.
==========================================================================================
唉,原来是一个很简单的问题,WEB里面之所以能行是因为它初始化InitialContext的时候要用到环境变量所指定的一些类,这些类在JBOSS里面是肯定有的,但是我如果做成独立的应用程序的话,运行的时候,当然找不到那些类了,所以就出错了.
这么简单的一个问题却让我想了半天.还好,今天就把它解决了,顺便把要用的包附上
下面的jar 文件是必需的:
[jboss安装目录]\client\jbossall-client.jar
[jboss安装目录]\server\all\deploy\jboss-aop-jdk50.deployer\jboss-aop-jdk50.jar
[jboss安装目录]\server\all\deploy\jboss-aop-jdk50.deployer\jboss-aspect-library-jdk50.jar
[jboss安装目录]\server\all\deploy\ejb3.deployer\jboss-ejb3.jar
[jboss安装目录]\client\jboss-remoting.jar
把以上文件组合成一个库就可以了,以后想怎么调试都可以了.还有,这些还是不够的,还有一个重要的库,那么就是支持EJ的javaee.jar文件.
分享到:
相关推荐
在企业级应用开发中,Spring、JavaServer Faces (JSF) 和 Enterprise JavaBeans 3 (EJB3) 是三个核心的框架和技术。这篇博客文章详细介绍了如何整合这些技术来构建高效且可扩展的企业应用程序。 首先,Spring 框架...
总结来说,EJB中的JNDI使用主要包括了查找和绑定EJB组件,以及在EJB内部查找和使用其他资源。源码例子将提供具体实现细节,帮助你掌握这些关键点。通过学习和实践,你能够熟练地在实际项目中运用JNDI,提升企业级...
企业级JavaBean(Enterprise JavaBeans,简称EJB)是Java平台上的一个核心组件,用于构建可扩展、安全且事务处理能力强大的分布式应用程序。EJB标准经历了多个版本的发展,从早期的EJB 2.0到后来的EJB 3.0,每个版本...
标题 "通过Web Service让Delphi/Visual Basic程序访问EJB" 涉及的核心知识点是利用Web Service技术来实现不同编程环境之间的通信,特别是让传统的Delphi或Visual Basic应用程序能够调用Enterprise JavaBeans (EJB) ...
EJB是一组遵循特定规范的Java类,它们专注于实现业务逻辑,从而简化复杂的企业级应用程序开发。EJB3.0是EJB规范的一个重要版本,它引入了许多改进,提高了开发者的生产力。 【EJB在J2EE应用体系结构中的角色】 J2EE...
EJB(Enterprise JavaBeans)是Java企业级应用开发的核心组件之一,主要用于构建分布式、事务处理、安全和可管理的企业级应用程序。本视频教程由清华大学的黎活明教授主讲,聚焦于EJB的客户端开发以及如何将JBoss...
EJB (Enterprise JavaBeans) 是Java EE平台中用于开发分布式企业应用程序的重要组件。在实际开发过程中,经常需要一个EJB调用另一个EJB来实现更复杂的业务逻辑。 ##### 1. 采用默认的JNDI上下文对象进行查找 当两...
**企业JavaBean(EJB)**是Java平台上用于构建可部署在服务器端的企业级应用程序的组件模型。EJB提供了一种标准的方式来实现业务逻辑,使开发者可以专注于代码,而无需关心底层的分布式计算细节。本实例旨在帮助初学...
EJB(Enterprise JavaBeans)是Java EE平台中的核心组件,用于构建可扩展的、安全的、事务处理的服务器端应用程序。EJB技术主要用于实现企业级的业务逻辑,它提供了多种类型的bean来处理不同类型的任务,如状态ful和...
EJB(Enterprise JavaBeans)是Java EE平台的核心组件之一,用于构建可扩展、安全和事务处理的服务器端应用程序。在本案例中,我们讨论的是EJB 2.0的会话bean(Session Bean),这是一种临时性的业务逻辑组件,用于...
5. **TimerService**:EJB的TimerService接口允许在应用程序中创建定时任务,执行计划的任务或触发事件。这个部分的源码可能会展示如何配置和使用定时器服务来执行周期性任务。 6. **CompositePK**:在数据库设计中...
在实际开发中,EJB常常与其他Java EE组件如Servlet、JSP、JSF等结合使用,构建复杂的Web应用程序。随着技术的发展,现代的Java EE框架如Spring、Quarkus等虽然提供了更轻量级的替代方案,但EJB依然是理解企业级Java...
5. **JNDI(Java Naming and Directory Interface)**: JNDI用于查找和绑定应用程序组件,例如EJB的引用,数据库连接池等资源。 6. **JTA(Java Transaction API)和JPA(Java Persistence API)**: JTA管理事务,...
Struts、Spring和EJB3是Java开发中的三个重要框架,它们在企业级应用程序开发中发挥着关键作用。Struts提供了MVC(Model-View-Controller)架构,Spring强化了依赖注入和面向切面编程,而EJB3则是Java EE平台上的...
内嵌EJB(Embedded Java EE Components)是指在非全面的Java EE服务器环境中使用EJB组件,如在普通的Java SE应用程序中。这种方式允许开发者在不依赖完整Java EE服务器的情况下利用EJB的功能,比如会话bean。会话...
EJB的核心理念是将应用程序的业务逻辑与展示层、数据访问层等其他组件分离,实现组件化开发,提高软件的可重用性和可维护性。 本培训资料主要涵盖了EJB的基础知识和实践应用,包括以下关键知识点: 1. **EJB类型**...
本文将深入探讨EJB的概念、其在Java应用程序中的角色,以及如何开发和应用Session Bean。** **EJB简介** 企业级JavaBeans(EJB)是Java EE(Enterprise Edition)的一部分,它提供了一种规范来创建服务器端的可重用...
5. **JNDI服务相关**:如`jboss-jndi.jar`,用于查找和绑定EJB的JNDI名称。 6. **JAXB和JPA实现**:如`jaxb-api.jar`、`hibernate-entitymanager.jar`,它们分别用于XML数据绑定和对象关系映射。 7. **JMS相关**:...