请问:在一个工程中定义了Local/Remote接口的实体bean,在另一个工程中Servlet可以调用,但是会话bean却找不到,这是怎么回事,如何解决 xml 文件修改了,编译时又会自动改回去,怎么办 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果你用的是JBUILER 加引用就容易了.比如下面的步骤:如你有个 CMP.JAR 的包,里面有一个你的实体BEAN CMPBEAN1, 那么在右边的工作区里点上这个实体BEAN, 右边的窗口里会显示出有关这个CMPBEAN1 的所有的操作,如果你用的是LOCAL模式,则点击下面的 EJB LOCAL REFERENCES ,中里面可以添加上所要引用的BEAN.比如一个DD的BEAN,这样在你编译时ejb.xml 里面就会生成你的<ejb-ref> <description /> <ejb-ref-name>DDD</ejb-ref-name> <ejb-ref-type>Entity</ejb-ref-type> <home>DDD</home> <remote>DDD</remote></ejb-ref> 对不起写错了,EJB LOCAL REFERENCES 对你的是:<ejb-local-ref> <description /> <ejb-ref-name>DDD</ejb-ref-name> <ejb-ref-type>Entity</ejb-ref-type> <local-home>DDD</local-home> <local>DDD</local></ejb-local-ref>EJB REFERENCES 对的是:<ejb-ref> <description /> <ejb-ref-name>DDD</ejb-ref-name> <ejb-ref-type>Entity</ejb-ref-type> <home>DDD</home> <remote>DDD</remote></ejb-ref>^_^ 1 JBoss中关于EJB客户端的配置:调用EJB的客户端可以是JSP、Servlet或客户端应用程序。如果客户端和服务器不在同一个Java VM上,那么在客户端必须提供一个jndi.properties文件告诉客户端进行有关JNDI命名服务的信息,并且把这个文件所在目录设定到环境变量classpath中。以下是一个jndi.properties的样例:java.naming.factory.initial=org.jnp.interfaces.NamingContextFactoryjava.naming.provider.url=localhost:1099 (服务器地址和端口号)java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces通过这个文件和JBoss的一些客户端类库,就可以使用JBoss提供的EJB对象服务了。2.2 JBoss中部署EJB:首先介绍JBoss容器中部署各类EJB对象的两种方法。下面的演示以Session Bean为例,客户端是一个本机上的web应用。这里不对演示程序进行具体介绍。第一种方式:把开发好的ejb jar包和web应用的war包公共放在deploy目录下。演示1:不需要jboss.xml文件和其他任何特殊的设置。ejb-jar.xml:<ejb-jar> ······ <ejb-name>ejbtest</ejb-name> ······</ejb-jar>客户端:web应用中对web.xml不需要添加ejb信息,不需要jboss-web.xml文件。引用ejb对象的jsp文件如下: ······ InitialContext ctx = new InitialContext(); Object objref = ctx.lookup("ejbtest"); //使用<ejb-name> beanHome=(zcxejb1Home)PortableRemoteObject.narrow(objref,ejbtestHome.class); ······演示2:使用jboss.xml文件。在缺省情况下JBoss的JNDI服务将通过ejb-jar.xml中<ejb-name>XXX</ejb-name>中的XXX来使用EJB的home interface。但是如果有多个ejb对象在相同的ejb jar包中,在ejb-jar.xml中通过<ejb-name>XXX</ejb-name>就可能不能很好的表示某一个ejb对象,所以一般我们希望可以提供一些附加的信息,例如采用这样的格式"[应用名]/[bean名]"来引用一个EJB对象。这时JNDI服务就可能不能正确地找到你的ejb对象,我们就需要使用jboss.xml文件,通过它实现jndi 名到ejb名的重定向。这个文件必须和ejb-jar.xml一起放到META-INFO目录下。ejb-jar.xml:<ejb-jar> ······ <ejb-name>ejbtest</ejb-name> ······</ejb-jar>jboss.xml:<jboss> <ejb-name>ejbtest</ejb-name> <jndi-name>example/ejbtest</jndi-name></jboss>客户端:需要使用新的jndi名进行ejb定位。······ InitialContext ctx = new InitialContext(); Object objref = ctx.lookup("example/ejbtest"); //使用<jndi-name> beanHome=(zcxejb1Home)PortableRemoteObject.narrow(objref,ejbtestHome.class);······第二种方式: 把ejb和web应用包装成一个企业应用包。部署ear时可以简单地把通过application.xml描述ejb jar包和web应用的war包,同样在web.war中不需要提供特殊的信息就可以和第一种方式一样使用ejb对象。客户端代码也不需要进行改动。这里不再举例说明。此外我们可以进行更进一步的部署,这时需要使用到web.xml和jboss-web.xml。jboss-web.xml是JBoss提供的一个针对web应用进行配置的文件。jboss-web.xml和web.xml一起放在web应用的WEB-INF目录下。演示1:改动web.xml文件,添加<ejb-ref>标记,不使用jboss-web.xml文件。(注意<ejb-ref>包括内部引用和外部引用。如果是同一个单元的可以通过<ejb-link>直接进行引用,而不用提供其他信息。)web.xml:······<ejb-ref> <ejb-ref-name>ejb/ejbtest</ejb-ref-name> <!--采用sun推荐的命名方式--> <ejb-ref-type>Session</ejb-ref-type> <home>org.zcx.test.zcxejb1Home</home> <remote>org.zcx.test.zcxejb1</remote> <ejb-link>ejbtest</ejb-link> <!--必须和被应用的ejb-name匹配--></ejb-ref>······客户端:由于在web.xml中引入ejb引用描述这时ejb定位发生了变化:······ InitialContext ctx = new InitialContext(); Object objref = ctx.lookup("java:comp/env/ ejb/ejbtest "); //使用java:comp/env命名空间 beanHome=(zcxejb1Home)PortableRemoteObject.narrow(objref,ejbtestHome.class);······演示2:联合使用web.xml和jboss-web.xmlweb.xml······<ejb-ref><ejb-ref-name>ejb/ejbtest</ejb-ref-name> <!--采用sun推荐的命名方式--> <ejb-ref-type>Session</ejb-ref-type> <home>org.zcx.test.zcxejb1Home</home> <remote>org.zcx.test.zcxejb1</remote></ejb-ref>······jboss-web.xml<ejb-ref><ejb-ref-name> ejb/ejbtest </ejb-ref-name><jndi-name> example/ejbtest </jndi-name> <!-- 这里对应ejb对象的jndi名--></ejb-ref>客户端: nitialContext ctx = new InitialContext(); Object objref = ctx.lookup("java:comp/env/ ejb/ejbtest "); beanHome=(zcxejb1Home)PortableRemoteObject.narrow(objref,ejbtestHome.class);以上的所有演示说明了ejb-jar.xml、jboss.xml、web.xml、jboss-web.xml之间的基本关系和它们的使用方式。它们是部署各类ejb对象的关键文件。接下来介绍针对不同类型的ejb对象所需要的特殊配置。 我用的Jbuilder9,在实体bean所在的工程1中用sessBean调用没问题,也是在sessBean的Local Reference中加了对实体Bean的引用。但问题是,我将此工程打好的Jar文件在另外的工程2中引入后,工程2中的sessBean的EJB Local Reference 或EJB Reference中添加对实体Bean的引用时,可以添加的Bean列表里没有引入的Jar中的Cmp,添加不上。 ??? 求大神们相助···· s2sh,删除jsp行数据。 java 程序 怎样导入导出informix的表数据 高手给点思路 spring配置问题 请问一个ejb,无状态会话bean的问题,我就是测试一下,怎么输出的结果乱七八糟的, 面试j2ee,为何问的问题都是j2se的? 关于JSF的参考实现 高分求助,作业,急!!! 如何测试jdbc的效率? 刚学struts,熟悉struts的高手请进来,在线等候!(问题解决就结贴) 两种调用EJB的方式, 哪种好一点, 刚入门有些概念还比较模糊的说//////
<ejb-ref>
<description />
<ejb-ref-name>DDD</ejb-ref-name>
<ejb-ref-type>Entity</ejb-ref-type>
<home>DDD</home>
<remote>DDD</remote>
</ejb-ref>
<ejb-local-ref>
<description />
<ejb-ref-name>DDD</ejb-ref-name>
<ejb-ref-type>Entity</ejb-ref-type>
<local-home>DDD</local-home>
<local>DDD</local>
</ejb-local-ref>
EJB REFERENCES 对的是:<ejb-ref>
<description />
<ejb-ref-name>DDD</ejb-ref-name>
<ejb-ref-type>Entity</ejb-ref-type>
<home>DDD</home>
<remote>DDD</remote>
</ejb-ref>^_^
调用EJB的客户端可以是JSP、Servlet或客户端应用程序。如果客户端和服务器不在同一个Java VM上,那么在客户端必须提供一个jndi.properties文件告诉客户端进行有关JNDI命名服务的信息,并且把这个文件所在目录设定到环境变量classpath中。
以下是一个jndi.properties的样例:
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=localhost:1099 (服务器地址和端口号)
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
通过这个文件和JBoss的一些客户端类库,就可以使用JBoss提供的EJB对象服务了。
2.2 JBoss中部署EJB:
首先介绍JBoss容器中部署各类EJB对象的两种方法。下面的演示以Session Bean为例,客户端是一个本机上的web应用。这里不对演示程序进行具体介绍。
第一种方式:
把开发好的ejb jar包和web应用的war包公共放在deploy目录下。
演示1:不需要jboss.xml文件和其他任何特殊的设置。
ejb-jar.xml:
<ejb-jar>
······
<ejb-name>ejbtest</ejb-name>
······
</ejb-jar>
客户端:web应用中对web.xml不需要添加ejb信息,不需要jboss-web.xml文件。引用ejb对象的jsp文件如下:
······
InitialContext ctx = new InitialContext();
Object objref = ctx.lookup("ejbtest"); //使用<ejb-name> beanHome=(zcxejb1Home)PortableRemoteObject.narrow(objref,ejbtestHome.class);
······演示2:使用jboss.xml文件。
在缺省情况下JBoss的JNDI服务将通过ejb-jar.xml中<ejb-name>XXX</ejb-name>中的XXX来使用EJB的home interface。但是如果有多个ejb对象在相同的ejb jar包中,在ejb-jar.xml中通过<ejb-name>XXX</ejb-name>就可能不能很好的表示某一个ejb对象,所以一般我们希望可以提供一些附加的信息,例如采用这样的格式"[应用名]/[bean名]"来引用一个EJB对象。这时JNDI服务就可能不能正确地找到你的ejb对象,我们就需要使用jboss.xml文件,通过它实现jndi 名到ejb名的重定向。这个文件必须和ejb-jar.xml一起放到META-INFO目录下。
ejb-jar.xml:
<ejb-jar>
······
<ejb-name>ejbtest</ejb-name>
······
</ejb-jar>
jboss.xml:
<jboss>
<ejb-name>ejbtest</ejb-name>
<jndi-name>example/ejbtest</jndi-name>
</jboss>客户端:需要使用新的jndi名进行ejb定位。
······
InitialContext ctx = new InitialContext();
Object objref = ctx.lookup("example/ejbtest"); //使用<jndi-name> beanHome=(zcxejb1Home)PortableRemoteObject.narrow(objref,ejbtestHome.class);
······
第二种方式:
把ejb和web应用包装成一个企业应用包。部署ear时可以简单地把通过application.xml描述ejb jar包和web应用的war包,同样在web.war中不需要提供特殊的信息就可以和第一种方式一样使用ejb对象。客户端代码也不需要进行改动。这里不再举例说明。
此外我们可以进行更进一步的部署,这时需要使用到web.xml和jboss-web.xml。jboss-web.xml是JBoss提供的一个针对web应用进行配置的文件。jboss-web.xml和web.xml一起放在web应用的WEB-INF目录下。
演示1:改动web.xml文件,添加<ejb-ref>标记,不使用jboss-web.xml文件。
(注意<ejb-ref>包括内部引用和外部引用。如果是同一个单元的可以通过<ejb-link>直接进行引用,而不用提供其他信息。)
web.xml:
······
<ejb-ref>
<ejb-ref-name>ejb/ejbtest</ejb-ref-name> <!--采用sun推荐的命名方式-->
<ejb-ref-type>Session</ejb-ref-type>
<home>org.zcx.test.zcxejb1Home</home>
<remote>org.zcx.test.zcxejb1</remote>
<ejb-link>ejbtest</ejb-link> <!--必须和被应用的ejb-name匹配-->
</ejb-ref>
······
客户端:由于在web.xml中引入ejb引用描述这时ejb定位发生了变化:
······
InitialContext ctx = new InitialContext();
Object objref = ctx.lookup("java:comp/env/ ejb/ejbtest "); //使用java:comp/env命名空间 beanHome=(zcxejb1Home)PortableRemoteObject.narrow(objref,ejbtestHome.class);
······演示2:联合使用web.xml和jboss-web.xml
web.xml
······
<ejb-ref>
<ejb-ref-name>ejb/ejbtest</ejb-ref-name> <!--采用sun推荐的命名方式-->
<ejb-ref-type>Session</ejb-ref-type>
<home>org.zcx.test.zcxejb1Home</home>
<remote>org.zcx.test.zcxejb1</remote>
</ejb-ref>
······
jboss-web.xml
<ejb-ref>
<ejb-ref-name> ejb/ejbtest </ejb-ref-name>
<jndi-name> example/ejbtest </jndi-name> <!-- 这里对应ejb对象的jndi名-->
</ejb-ref>
客户端:
nitialContext ctx = new InitialContext();
Object objref = ctx.lookup("java:comp/env/ ejb/ejbtest "); beanHome=(zcxejb1Home)PortableRemoteObject.narrow(objref,ejbtestHome.class);以上的所有演示说明了ejb-jar.xml、jboss.xml、web.xml、jboss-web.xml之间的基本关系和它们的使用方式。它们是部署各类ejb对象的关键文件。接下来介绍针对不同类型的ejb对象所需要的特殊配置。