﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-go4it</title><link>http://www.blogjava.net/cxccbv/</link><description>EJB--SEAM</description><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 10:45:56 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 10:45:56 GMT</pubDate><ttl>60</ttl><item><title>EJB实现多个接口</title><link>http://www.blogjava.net/cxccbv/archive/2008/12/09/245221.html</link><dc:creator>go4it</dc:creator><author>go4it</author><pubDate>Tue, 09 Dec 2008 04:53:00 GMT</pubDate><guid>http://www.blogjava.net/cxccbv/archive/2008/12/09/245221.html</guid><wfw:comment>http://www.blogjava.net/cxccbv/comments/245221.html</wfw:comment><comments>http://www.blogjava.net/cxccbv/archive/2008/12/09/245221.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cxccbv/comments/commentRss/245221.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cxccbv/services/trackbacks/245221.html</trackback:ping><description><![CDATA[<p>1.默认EJB BEAN的名称为JNDI的名称，除非用注解指定。</p> <p><a href="mailto:2.@Remote/@Local">2.@Remote/@Local</a>可以定义在接口，也可以在实现类定义。</p> <p>3.如果一个EJB实现了多个接口，必须指定那些接口是remote，哪些是local。</p> <p>4.另一种定义</p> <p>@Remote(value={EjbInterface01.class,EjbInterface02.class})<br>@Local(value={EjbInterface03.class,EjbInterface04.class})  <p>当属性为value而且只定义一个属性时，value可以省略只写值。</p> <p>5.直接在接口里面定义，那么实现类就不用再定义了。</p><img src ="http://www.blogjava.net/cxccbv/aggbug/245221.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cxccbv/" target="_blank">go4it</a> 2008-12-09 12:53 <a href="http://www.blogjava.net/cxccbv/archive/2008/12/09/245221.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EJB3本地访问</title><link>http://www.blogjava.net/cxccbv/archive/2008/12/09/245220.html</link><dc:creator>go4it</dc:creator><author>go4it</author><pubDate>Tue, 09 Dec 2008 04:52:00 GMT</pubDate><guid>http://www.blogjava.net/cxccbv/archive/2008/12/09/245220.html</guid><wfw:comment>http://www.blogjava.net/cxccbv/comments/245220.html</wfw:comment><comments>http://www.blogjava.net/cxccbv/archive/2008/12/09/245220.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cxccbv/comments/commentRss/245220.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cxccbv/services/trackbacks/245220.html</trackback:ping><description><![CDATA[<p>1.不需要jndi配置，直接new InitialContext()即可，因为本地访问服务器已经有相关配置了。</p> <p>2.本地客户端也不需要依赖包（相关接口和类定义；client包）。就是web应用在运行时自然处在服务器里面，那些依赖包都有了。</p> <p>&nbsp; 如果把Jbossall-client.jar也拷到本地客户端来，则会出错。因为在部署web项目时，myeclipse会将jar包部署到web项目下Web-root\web-inf\lib文件夹下。</p> <p>引起重复出现错误。</p><img src ="http://www.blogjava.net/cxccbv/aggbug/245220.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cxccbv/" target="_blank">go4it</a> 2008-12-09 12:52 <a href="http://www.blogjava.net/cxccbv/archive/2008/12/09/245220.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>远程客户端和本地客户端</title><link>http://www.blogjava.net/cxccbv/archive/2008/12/09/245219.html</link><dc:creator>go4it</dc:creator><author>go4it</author><pubDate>Tue, 09 Dec 2008 04:51:00 GMT</pubDate><guid>http://www.blogjava.net/cxccbv/archive/2008/12/09/245219.html</guid><wfw:comment>http://www.blogjava.net/cxccbv/comments/245219.html</wfw:comment><comments>http://www.blogjava.net/cxccbv/archive/2008/12/09/245219.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cxccbv/comments/commentRss/245219.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cxccbv/services/trackbacks/245219.html</trackback:ping><description><![CDATA[<p>１.远程客户端：传值，对象必须序列化，服务器对对象的修改不会在客户端体现。</p> <p>２.本地客户端：</p> <p>　（１）创建一个ｗｅｂ项目，与ｊｂｏｓｓ部署在同一个ＪＶＭ当中。</p> <p>　（２）添加服务器端项目的依赖或手动添加接口的ｊａｒ包</p> <p>　（３）在index.jsp改编码。</p> <p>&nbsp;&nbsp;&nbsp; 本地客户端也可以使用远程调用方式：</p><pre>&lt;% 
    
		  Hashtable env=<span style="color: #0000ff">new</span> Hashtable();   
		  env.put(Context.INITIAL_CONTEXT_FACTORY,"<span style="color: #8b0000">org.jnp.interfaces.NamingContextFactory</span>");   
		  env.put(Context.PROVIDER_URL,"<span style="color: #8b0000">localhost:1099</span>");   
		  env.put("<span style="color: #8b0000">java.naming.factory.url.pkgs</span>","<span style="color: #8b0000">org.jboss.naming:org.jnp.interfaces</span>");   
		  InitialContext cxt=<span style="color: #0000ff">new</span> InitialContext(env);
		  UserManager us=(UserManager)cxt.lookup("<span style="color: #8b0000">UserManagerBean/remote</span>");
		  User u=<span style="color: #0000ff">new</span> User();
		  u.setUsername("<span style="color: #8b0000">persia</span>");
		  u.setPassword("<span style="color: #8b0000">p</span>");
		  
          us.addUser(u);
          
          out.println("<span style="color: #8b0000">user--perisa已经创建。</span>"+u.getId());
   %&gt;</pre>
<p></p>
<p>本地客户端的本地调用方式没成功：</p><pre>00:18:28,661 ERROR [[jsp]] Servlet.service() <span style="color: #0000ff">for</span> servlet jsp threw exception
java.lang.IllegalArgumentException: Wrong target. <span style="color: #0000ff">class</span> com.persia.ejb.UserManagerBean <span style="color: #0000ff">for</span> <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> com.persia.ejb.UserManagerBean.addUser(com.persia.ejb.User)
	at org.jboss.aop.joinpoint.MethodInvocation.handleErrors(MethodInvocation.java:141)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:116)
	at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:166)
	at org.jboss.ejb3.interceptor.EJB3InterceptorsInterceptor.invoke(EJB3InterceptorsInterceptor.java:63)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
	at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:54)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
	at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
	at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:79)
	at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:191)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
	at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:95)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
	at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
	at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:77)
	at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3AuthenticationInterceptor.java:110)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
	at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:46)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
	at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
	at org.jboss.ejb3.stateless.StatelessContainer.localInvoke(StatelessContainer.java:240)
	at org.jboss.ejb3.stateless.StatelessContainer.localInvoke(StatelessContainer.java:210)
	at org.jboss.ejb3.stateless.StatelessLocalProxy.invoke(StatelessLocalProxy.java:84)
	at $Proxy94.addUser(Unknown Source)
	at org.apache.jsp.index_jsp._jspService(index_jsp.java:97)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:336)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
	at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
	at java.lang.Thread.run(Thread.java:619)
</pre>
<p></p><pre> &lt;% 
    
		  Hashtable env=<span style="color: #0000ff">new</span> Hashtable();   
		  env.put(Context.INITIAL_CONTEXT_FACTORY,"<span style="color: #8b0000">org.jnp.interfaces.NamingContextFactory</span>");   
		  env.put(Context.PROVIDER_URL,"<span style="color: #8b0000">localhost:1099</span>");   
		  env.put("<span style="color: #8b0000">java.naming.factory.url.pkgs</span>","<span style="color: #8b0000">org.jboss.naming:org.jnp.interfaces</span>");   
		  InitialContext cxt=<span style="color: #0000ff">new</span> InitialContext(env);
		  UserManager us=(UserManager)cxt.lookup("<span style="color: #8b0000">UserManagerBean/local</span>");
		  
		  User u=<span style="color: #0000ff">new</span> User();
		  u.setUsername("<span style="color: #8b0000">persia</span>");
		  u.setPassword("<span style="color: #8b0000">p</span>");
		  
         us.addUser(u);
          
          out.println("<span style="color: #8b0000">user--perisa已经创建。</span>"+u.getId());
   %&gt;</pre>
<p>有待以后多些见识解决或偶遇高人指点。</p>
<p>不大清楚，本地调用还需要ＪＮＤＩ吗？</p><img src ="http://www.blogjava.net/cxccbv/aggbug/245219.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cxccbv/" target="_blank">go4it</a> 2008-12-09 12:51 <a href="http://www.blogjava.net/cxccbv/archive/2008/12/09/245219.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Local and Remote Interfaces cannot have duplicate interface for bean UserManagerBean错误</title><link>http://www.blogjava.net/cxccbv/archive/2008/12/09/245218.html</link><dc:creator>go4it</dc:creator><author>go4it</author><pubDate>Tue, 09 Dec 2008 04:51:00 GMT</pubDate><guid>http://www.blogjava.net/cxccbv/archive/2008/12/09/245218.html</guid><wfw:comment>http://www.blogjava.net/cxccbv/comments/245218.html</wfw:comment><comments>http://www.blogjava.net/cxccbv/archive/2008/12/09/245218.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cxccbv/comments/commentRss/245218.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cxccbv/services/trackbacks/245218.html</trackback:ping><description><![CDATA[<p>解决：<a title="http://www.blogjava.net/Bobbyliao/archive/2008/10/01/232018.html" href="http://www.blogjava.net/Bobbyliao/archive/2008/10/01/232018.html">http://www.blogjava.net/Bobbyliao/archive/2008/10/01/232018.html</a>  <p>&nbsp; 后来发现，原来是UserManagerBean中的@Local,@Remote必须明确写上接口的类型，才可以。修改代码如下：  <p><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">package cn.study.ejb;<br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">import javax.ejb.Local;<br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">import javax.ejb.Remote;<br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">import javax.ejb.Stateless;<br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">@Stateless<br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">@Remote(UserManager.class)<br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top">@Local(UserManager.class)<br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align="top">public class UserManagerBean implements UserManager <img alt="" src="http://www.blogjava.net/Images/dot.gif">{<br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"> public void addUser(User user) <img alt="" src="http://www.blogjava.net/Images/dot.gif">{<br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(user.getUsername() + "已经被成功保存！");<br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; user.setId(13);<br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top">&nbsp;&nbsp;&nbsp; }<br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"><br><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top">}</p><img src ="http://www.blogjava.net/cxccbv/aggbug/245218.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cxccbv/" target="_blank">go4it</a> 2008-12-09 12:51 <a href="http://www.blogjava.net/cxccbv/archive/2008/12/09/245218.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>有状态和无状态EJB的比较</title><link>http://www.blogjava.net/cxccbv/archive/2008/12/09/245217.html</link><dc:creator>go4it</dc:creator><author>go4it</author><pubDate>Tue, 09 Dec 2008 04:50:00 GMT</pubDate><guid>http://www.blogjava.net/cxccbv/archive/2008/12/09/245217.html</guid><wfw:comment>http://www.blogjava.net/cxccbv/comments/245217.html</wfw:comment><comments>http://www.blogjava.net/cxccbv/archive/2008/12/09/245217.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cxccbv/comments/commentRss/245217.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cxccbv/services/trackbacks/245217.html</trackback:ping><description><![CDATA[<p><a href="http://www.blogjava.net/images/blogjava_net/cxccbv/WindowsLiveWriter/EJB_FF91/image_2.png"><img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="152" alt="image" src="http://www.blogjava.net/images/blogjava_net/cxccbv/WindowsLiveWriter/EJB_FF91/image_thumb.png" width="244" border="0"></a></p> <p>有状态和无状态的会话bean都在客户端产生不同的代理实例</p> <p><a href="http://www.blogjava.net/images/blogjava_net/cxccbv/WindowsLiveWriter/EJB_FF91/image_4.png"><img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="155" alt="image" src="http://www.blogjava.net/images/blogjava_net/cxccbv/WindowsLiveWriter/EJB_FF91/image_thumb_1.png" width="244" border="0"></a> </p> <p>不同的是在服务器端，有状态的每次lookup都是新的独立的bean，而无状态的是单例bean。</p><pre><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> StatelessEjbClient {

	<span style="color: #008000">/**
	 * @param args
	 * @throws NamingException 
	 */</span>
	<span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span> main(String[] args) <span style="color: #0000ff">throws</span> NamingException {
		  Hashtable env=<span style="color: #0000ff">new</span> Hashtable();   
		  env.put(Context.INITIAL_CONTEXT_FACTORY,"<span style="color: #8b0000">org.jnp.interfaces.NamingContextFactory</span>");   
		  env.put(Context.PROVIDER_URL,"<span style="color: #8b0000">localhost</span>");   
		  env.put("<span style="color: #8b0000">java.naming.factory.url.pkgs</span>","<span style="color: #8b0000">org.jboss.naming:org.jnp.interfaces</span>");   
		  InitialContext cxt=<span style="color: #0000ff">new</span> InitialContext(env);

		  <span style="color: #008000">//第一次会话</span>
		  StatelessEjb se1=(StatelessEjb)cxt.lookup("<span style="color: #8b0000">StatelessEjbBean/remote</span>");
		  System.out.println("<span style="color: #8b0000">刚开始</span>"+se1.getCount());
		  se1.compute(1);
		  System.out.println(se1.getCount());
		  se1.compute(1);
		  System.out.println(se1.getCount());
		  se1.compute(1);
		 System.out.println(se1.getCount());
		  se1.compute(1);
		  System.out.println(se1.getCount());
		 
		  <span style="color: #008000">//第二次会话</span>
		  StatelessEjb se2=(StatelessEjb)cxt.lookup("<span style="color: #8b0000">StatelessEjbBean/remote</span>");
		  System.out.println("<span style="color: #8b0000">刚开始</span>"+se2.getCount());
		  se2.compute(1);
		  System.out.println(se2.getCount());
		  se2.compute(1);
		  System.out.println(se2.getCount());
		  se2.compute(1);
		 System.out.println(se2.getCount());
		  se2.compute(1);
		  System.out.println(se2.getCount());
		  se2.compute(1);
		  System.out.println(se2.getCount());
		  
		  System.out.println("<span style="color: #8b0000">ejb1==ejb2</span>"+(se1==se2));
		 
	}

}</pre>
<p></p>
<p>第一次运行结果</p>
<p>刚开始0<br>1<br>2<br>3<br>4<br>刚开始4<br>5<br>6<br>7<br>8<br>9<br>ejb1==ejb2false 
<p></p>
<p>而第二次却不是递增了：</p>
<p>刚开始9<br>10<br>11<br>12<br>13<br>刚开始13<br>14<br>14<br>14<br>14<br>14<br>ejb1==ejb2false 
<p></p>什么问题？？？ 
<img src ="http://www.blogjava.net/cxccbv/aggbug/245217.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cxccbv/" target="_blank">go4it</a> 2008-12-09 12:50 <a href="http://www.blogjava.net/cxccbv/archive/2008/12/09/245217.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Myeclipse 6 EJB开发</title><link>http://www.blogjava.net/cxccbv/archive/2008/12/09/245216.html</link><dc:creator>go4it</dc:creator><author>go4it</author><pubDate>Tue, 09 Dec 2008 04:49:00 GMT</pubDate><guid>http://www.blogjava.net/cxccbv/archive/2008/12/09/245216.html</guid><wfw:comment>http://www.blogjava.net/cxccbv/comments/245216.html</wfw:comment><comments>http://www.blogjava.net/cxccbv/archive/2008/12/09/245216.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cxccbv/comments/commentRss/245216.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cxccbv/services/trackbacks/245216.html</trackback:ping><description><![CDATA[<p>1.配置ＪＢＯＳＳ服务器</p> <p>2.new EJB project创建项目</p> <p>3.创建EJB—》new interface，然后new class实现类，xxxBean命名。</p> <p>4.注解配置EJB：xxxBean类型：@stateful或@stateless和@remote或@local</p> <p>5.部署EJB。查看JBOSS\SERVER\DEFAULT\DEPLOY里面部署的EJB.</p> <p>6.开发EJB客户端：</p> <p>&nbsp; （1）new java project</p> <p>&nbsp;&nbsp; （2）通过接口调用，将接口--》导出jar包到客户端目录下（jar包名随便起，然后添加为项目liberies时点add jar。使用该接口时再导入该包)。</p> <p>&nbsp;&nbsp; （3）将接口jar包添加到项目的类路径下。将JBOSS\client下的jar包也添加到客户端项目里面。（可以先在myeclipse里定义一个库—&gt;java—&gt;build path—&gt;user libery）。</p> <p>&nbsp;&nbsp; （4）new class--》初始化上下文(JNDI里面的initial context)—》context.lookup(“EJB名称/remote”)--》调用方法。</p> <p>&nbsp;&nbsp; （5）在客户端配置JNDI，告诉context:EJB在哪里。在类路径下面（src）目录下添加jndi.properties。</p> <p>&nbsp; <p>java.naming.factory.initial = org.jnp.interfaces.NamingContextFactory  <p>java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces  <p>java.naming.provider.url = localhost  <p>&nbsp; <p>&nbsp;&nbsp; （6）运行客户端。</p> <p>&nbsp;</p> <p>我实际运行时用jndi.properties文件不能运行成功，提示Cannot instantiate class: org.jnp.interfaces.NamingContextFactory，网上的解决方法是添加jbossall-client.jar但是我添了没效果。于是换成在java文件里面设置，成功。怀疑是我的jndi.properties文件写法有问题，有待验证。</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Hashtable env=new Hashtable();&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; env.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; env.put(Context.PROVIDER_URL,"localhost:1099");&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; env.put("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InitialContext cxt=new InitialContext(env);  <img src ="http://www.blogjava.net/cxccbv/aggbug/245216.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cxccbv/" target="_blank">go4it</a> 2008-12-09 12:49 <a href="http://www.blogjava.net/cxccbv/archive/2008/12/09/245216.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EJB的基本分类</title><link>http://www.blogjava.net/cxccbv/archive/2008/12/09/245215.html</link><dc:creator>go4it</dc:creator><author>go4it</author><pubDate>Tue, 09 Dec 2008 04:48:00 GMT</pubDate><guid>http://www.blogjava.net/cxccbv/archive/2008/12/09/245215.html</guid><wfw:comment>http://www.blogjava.net/cxccbv/comments/245215.html</wfw:comment><comments>http://www.blogjava.net/cxccbv/archive/2008/12/09/245215.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cxccbv/comments/commentRss/245215.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cxccbv/services/trackbacks/245215.html</trackback:ping><description><![CDATA[<p>1.企业bean</p> <p>&nbsp;&nbsp; （1）session bean（stateless和stateful session bean）</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 会话bean：从客户端获得EJB对象开始，然后调用EJB方法，直到客户端释放EJB对象为止。客户端通过JNDI查找EJB对象。若每次会话查找同一对象时，则返回不同对象。</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对象的状态由它的实例变量的值决定的。</p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 有状态session bean：可以区分不同的客户端，并保持他们的信息。主要是根据jsessionid来辨认不同的<strong><font color="#ff0000">客户端</font></strong>并维护他们的状态。</p> <p>&nbsp;&nbsp; stateful session bean 远程调用的时候，客户端得到的是一个客户端代理对象，不同的客户端获得不同的实例（同时分配一个令牌）。通过令牌来区分不同的客户端。每次查找服务器新创建一个给客户端。</p> <p>&nbsp;&nbsp; stateless session bean 不对其状态做管理。不管是哪个客户端，得到的对象可能都是同一个实例（单例方式管理）。不能区分是哪个客户端。性能比stateful好。每次查找，服务器都返回同一个实例。</p> <p>&nbsp;&nbsp; （2）message driven bean 基于JMS</p> <p>2.实体bean</p> <p>&nbsp; entity bean。EJB2的时候分为BMP(bean管理持久化实体bean---自己管理CRUD操作）和CMP（容器管理持久化实体bean--由容器管理CRUD操作）。</p> <p>在EJB3中都是CMP。</p><img src ="http://www.blogjava.net/cxccbv/aggbug/245215.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cxccbv/" target="_blank">go4it</a> 2008-12-09 12:48 <a href="http://www.blogjava.net/cxccbv/archive/2008/12/09/245215.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ejb客户端</title><link>http://www.blogjava.net/cxccbv/archive/2008/12/09/245214.html</link><dc:creator>go4it</dc:creator><author>go4it</author><pubDate>Tue, 09 Dec 2008 04:47:00 GMT</pubDate><guid>http://www.blogjava.net/cxccbv/archive/2008/12/09/245214.html</guid><wfw:comment>http://www.blogjava.net/cxccbv/comments/245214.html</wfw:comment><comments>http://www.blogjava.net/cxccbv/archive/2008/12/09/245214.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cxccbv/comments/commentRss/245214.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cxccbv/services/trackbacks/245214.html</trackback:ping><description><![CDATA[<p>1.远程客户端：客户端和它调用的EJB对象不在同一个JVM进程当中。</p> <p>2.本地客户端：客户端和它调用的EJB对象在同一个（JBOSS）JVM进程当中。两个ＥＪＢ相互调用。</p> <p>3.webservice客户端</p> <p>&nbsp;</p> <p>同一台机器上一个JVM和JBOSS</p> <p>运行JBOSS需要一个JVM进程，运行一个java类需要JVM进程。</p> <p>&nbsp;</p> <p>远程访问：传值方式：</p> <p><a href="http://www.blogjava.net/images/blogjava_net/cxccbv/WindowsLiveWriter/ejb_FA26/image_2.png"><img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="186" alt="image" src="http://www.blogjava.net/images/blogjava_net/cxccbv/WindowsLiveWriter/ejb_FA26/image_thumb.png" width="244" border="0"></a> </p> <p>&nbsp;</p> <p>本地访问方式：传地址方式，无需序列化。（类似SSH方式）</p> <p><a href="http://www.blogjava.net/images/blogjava_net/cxccbv/WindowsLiveWriter/ejb_FA26/image_4.png"><img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="185" alt="image" src="http://www.blogjava.net/images/blogjava_net/cxccbv/WindowsLiveWriter/ejb_FA26/image_thumb_1.png" width="244" border="0"></a> </p> <p><a href="http://www.blogjava.net/images/blogjava_net/cxccbv/WindowsLiveWriter/ejb_FA26/image_6.png"><img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="186" alt="image" src="http://www.blogjava.net/images/blogjava_net/cxccbv/WindowsLiveWriter/ejb_FA26/image_thumb_2.png" width="244" border="0"></a> </p> <p>&nbsp;</p> <p>ｗｅｂｓｅｒｖｉｃｅ只能访问无状态会话ｂｅａｎ的接口。</p> <p>&nbsp;</p> <p>远程调用，客户端的ｂｅａｎ参数实际上是一个参数值的拷贝，对他修改不会影响到ｂｅａｎ。但本地调用来说，对ｂｅａｎ的参数是个引用，修改将影响ｂｅａｎ。</p> <p></p> <p></p> <p>&nbsp;</p> <p>粗粒度的数据访问：</p> <p>远程调用速度比较慢，尽量减少方法的调用，尽可能在一个方法完成所以数据的传输。</p><img src ="http://www.blogjava.net/cxccbv/aggbug/245214.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cxccbv/" target="_blank">go4it</a> 2008-12-09 12:47 <a href="http://www.blogjava.net/cxccbv/archive/2008/12/09/245214.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EJB的基本分类</title><link>http://www.blogjava.net/cxccbv/archive/2008/12/09/245213.html</link><dc:creator>go4it</dc:creator><author>go4it</author><pubDate>Tue, 09 Dec 2008 04:46:00 GMT</pubDate><guid>http://www.blogjava.net/cxccbv/archive/2008/12/09/245213.html</guid><wfw:comment>http://www.blogjava.net/cxccbv/comments/245213.html</wfw:comment><comments>http://www.blogjava.net/cxccbv/archive/2008/12/09/245213.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cxccbv/comments/commentRss/245213.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cxccbv/services/trackbacks/245213.html</trackback:ping><description><![CDATA[<p>1.企业bean</p> <p>&nbsp;&nbsp; （1）session bean（stateless和stateful session bean）</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 会话bean：从客户端获得EJB对象开始，然后调用EJB方法，直到客户端释放EJB对象为止。客户端通过JNDI查找EJB对象。若每次会话查找同一对象时，则返回不同对象。</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对象的状态由它的实例变量的值决定的。</p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 有状态session bean：可以区分不同的客户端，并保持他们的信息。主要是根据jsessionid来辨认不同的<strong><font color="#ff0000">客户端</font></strong>并维护他们的状态。</p> <p>&nbsp;&nbsp; stateful session bean 远程调用的时候，客户端得到的是一个客户端代理对象，不同的客户端获得不同的实例（同时分配一个令牌）。通过令牌来区分不同的客户端。每次查找服务器新创建一个给客户端。</p> <p>&nbsp;&nbsp; stateless session bean 不对其状态做管理。不管是哪个客户端，得到的对象可能都是同一个实例（单例方式管理）。不能区分是哪个客户端。性能比stateful好。每次查找，服务器都返回同一个实例。</p> <p>&nbsp;&nbsp; （2）message driven bean 基于JMS</p> <p>2.实体bean</p> <p>&nbsp; entity bean。EJB2的时候分为BMP(bean管理持久化实体bean---自己管理CRUD操作）和CMP（容器管理持久化实体bean--由容器管理CRUD操作）。</p> <p>在EJB3中都是CMP。</p><img src ="http://www.blogjava.net/cxccbv/aggbug/245213.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cxccbv/" target="_blank">go4it</a> 2008-12-09 12:46 <a href="http://www.blogjava.net/cxccbv/archive/2008/12/09/245213.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>myeclipse6-ejb3入门</title><link>http://www.blogjava.net/cxccbv/archive/2008/12/09/245210.html</link><dc:creator>go4it</dc:creator><author>go4it</author><pubDate>Tue, 09 Dec 2008 04:46:00 GMT</pubDate><guid>http://www.blogjava.net/cxccbv/archive/2008/12/09/245210.html</guid><wfw:comment>http://www.blogjava.net/cxccbv/comments/245210.html</wfw:comment><comments>http://www.blogjava.net/cxccbv/archive/2008/12/09/245210.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cxccbv/comments/commentRss/245210.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cxccbv/services/trackbacks/245210.html</trackback:ping><description><![CDATA[<p><font face="微软雅黑">今天终于做了一个ｅｊｂ实例。</font></p> <p><font face="微软雅黑">工具：ｍｙｅｃｌｉｐｓｅ６，ｊｂｏｓｓ服务器。</font></p> <p>&nbsp;</p> <p><a href="http://www.blogjava.net/images/blogjava_net/cxccbv/WindowsLiveWriter/c04e230519a6_1003B/image_2.png"><img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="154" alt="image" src="http://www.blogjava.net/images/blogjava_net/cxccbv/WindowsLiveWriter/c04e230519a6_1003B/image_thumb.png" width="244" border="0"></a></p> <p>1.new--(myeclipse-j2EE projects)—EJB Project</p> <p>2.new—ejb3 session bean</p> <p>3.配置persistence.xml的持久化单元。</p> <p>（1）&nbsp; 配置数据源</p> <p>&nbsp;&nbsp;&nbsp; 拷D:\DevelopTool\jboss-4.2.2.GA\docs\examples\jca里面的mysql-ds.xml到D:\DevelopTool\jboss-4.2.2.GA\server\default\deploy里面，做修改。</p> <p>（2）拷数据库jar包到D:\DevelopTool\jboss-4.2.2.GA\server\default\lib里面</p> <p>（3）在项目属性里面添加额外的jar包：数据库驱动和D:\DevelopTool\jboss-4.2.2.GA\client\jbossall-client.jar包</p><img src ="http://www.blogjava.net/cxccbv/aggbug/245210.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cxccbv/" target="_blank">go4it</a> 2008-12-09 12:46 <a href="http://www.blogjava.net/cxccbv/archive/2008/12/09/245210.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>