﻿<?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-狼爱上狸-随笔分类-J2EE</title><link>http://www.blogjava.net/waterjava/category/11991.html</link><description>闻道有先后  术业有专攻</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 11:58:59 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 11:58:59 GMT</pubDate><ttl>60</ttl><item><title>第一个EJB3.0范例</title><link>http://www.blogjava.net/waterjava/archive/2006/06/15/52884.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Wed, 14 Jun 2006 22:12:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2006/06/15/52884.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/52884.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2006/06/15/52884.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/52884.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/52884.html</trackback:ping><description><![CDATA[
		<table class="buttomBorder" cellspacing="3" cellpadding="3" width="100%" border="0">
				<tbody>
						<tr>
								<td class="contentTitle" align="middle">第一个EJB3.0范例 
<hr width="70%" /></td>
						</tr>
						<tr>
								<td align="middle">2005-07-19   来源:zdnet  作者:zdnet</td>
						</tr>
						<tr>
								<td class="content" valign="top" align="left">
										<span id="post1" style="FONT-SIZE: 12px; COLOR: #000000">2004年7月，EJB专家委员会公布了新的EJB3.0规范草本。2004年10月7号，JBoss发布了支持EJB3.0的第一个预览版本jboss-EJB-3.0_Preview_1。2004年11月5号，JBoss发布了支持EJB3.0的第二个预览版本jboss-EJB-3.0_Preview_2。<br /><br />我们来完成第一个EJB3.0程序。<br /><br />搭配环境<br /><br />实现EJB3.0的环境要求使用JBoss的jboss-4.0.1RC1（已经有了RC2）和JDK1.5及更高版本。jboss-4.0.1RC1可以在www.jboss.org上下载，JDK1.5可以在java.sun.com得到。我们在windows环境下使用，所以下载相应windows版本。<br /><br />首先安装JDK。下载jdk-1_5_0_01-windows-i586-p.exe，安装至相应目录，我安装至D:\Program Files\Java\jdk1.5.0_01。然后配置环境。在我的电脑-&gt;属性-&gt;高级-&gt;环境变量-&gt;系统变量中，设置JAVA_HOME＝D:\Program Files\Java\jdk1.5.0_01，Path中将D:\Program Files\Java\jdk1.5.0_01\bin;写在最前。<br /><br />下载jboss-4.0.1RC1.zip，直接解压缩到D:\jboss4下。相同方法设置JBOSS_HOME＝D:\jboss4。<br /><br />由于用到ant，所以还需要取得Apache Ant相关执行程序。在Apache服务器,Weblogic或Jbuilder等安装目录下可以找到，最好版本较高。我使用JBuilder2005下的，路径为D:\Borland\JBuilder2005\thirdparty\ant\bin;仍然设置在系统变量的Path中，写在JDK路径之后。（注意：如果ant版本较低将编译时报错，我的为Apache Ant version 1.6.2 compiled on July 16 2004）。<br /><br />      还要用到jboss-EJB-3.0_Preview_2包，可以在www.jboss.org得到。解压后包括docs，lib两个文件夹和RELEASE_NOTES.txt和INSTALL.html两个说明文件。Docs文件夹中有主页文件index.html,包括了EJB3.0的规范草本ejb-3_0-edr-spec.pdf，指南文件夹tutorial（包括范例说明文件和源文件），配置说明文件夹reference和Hibernate3的文件夹。Lib文件夹是部署EJB3.0环境所需要的ejb3-interceptors-aop.xml和ejb3.deployer。<br /><br />      运行简单的EJB3.0范例，我们只需要将ejb3-interceptors-aop.xml和ejb3.deployer文件夹拷贝到D:\jboss4\server\all\deploy下即可。<br /><br />   我们将范例部署在all下，所以运行JBoss时我们使用<br /><br />   Run –c all<br /><br />   启动JBoss后我们就完成了环境的配置。<br /><br />编写程序<br /><br />   Docs文件夹下提供了许多EJB3.0各个方面的范例。我们以无状态bean为例运行范例。<br /><br />   无状态bean范例在stateless文件夹下。包括了存放源文件的src和运行配置文件build.xml，JNDI配置文件jndi.properties和说明文件stateless.html。<br /><br />   源文件包括Calculator.java ，CalculatorBean.java ，CalculatorLocal.java， CalculatorRemote.java 和Client.java。<br /><br />   在EJB3.0环境下编写无状态bean时很容易的。所有的bean类型就是homeless所以只需要创建一个bean类和实现至少一个接口。<br /><br />在CalculatorBean.java我们声明一个无状态bean只需要声明为 @Stateless，EJB容器就会部署这个类为无状态bean。<br /><br />import javax.ejb.Stateless;<br /><br />@Stateless<br /><br />public class CalculatorBean implements CalculatorRemote, CalculatorLocal<br /><br />{<br /><br />  public int add(int x, int y)<br /><br />  {<br /><br />     return x + y;<br /><br />  }<br /><br />  public int subtract(int x, int y)<br /><br />  {<br /><br />     return x - y;<br /><br />  }<br /><br />}<br /><br />这个CalculatorBean实现了两个接口。一个是remote，一个是local。现在在EJB3.0中你可以仅仅实现一个remote，一个local或两个都实现。<br /><br /><br /><br />在CalculatorRemote.java定义Calculator bean 的remote接口你仅仅需要标识其为@Remote。<br /><br />import javax.ejb.Remote;<br /><br /><br /><br />@Remote<br /><br />public interface CalculatorRemote extends Calculator<br /><br />{<br /><br />}<br /><br />同样在CalculatorLocal.java你也仅仅需要标识一个@Local就可以定义Calculator bean 的local接口 <br /><br />import javax.ejb.Local;<br /><br /><br /><br />@Local<br /><br />public interface CalculatorLocal extends Calculator<br /><br />{<br /><br />}<br /><br />Calculator bean需要两个JNDI的绑定分别对应@Remote 和@Local接口。默认的，JBoss使用接口的全名作为JNDI的名字。这使得你可以容易的调用CalculatorRemote.class.getName()来查找一个JNDI名字对应的引用。<br /><br />在Client.java中你可以发现是使用remote接口的全名来查找无状态bean，也可以注意到并不存在HOME接口。<br /><br />import org.jboss.tutorial.stateless.bean.Calculator;<br /><br />import org.jboss.tutorial.stateless.bean.CalculatorRemote;<br /><br />import javax.naming.InitialContext;<br /><br /><br /><br />public class Client<br /><br />{<br /><br />  public static void main(String[] args) throws Exception<br /><br />  {<br /><br />     InitialContext ctx = new InitialContext();<br /><br />     Calculator calculator = (Calculator) ctx.lookup(CalculatorRemote.class.getName());<br /><br /><br /><br />     System.out.println("1 + 1 = " + calculator.add(1, 1));<br /><br />     System.out.println("1 - 1 = " + calculator.subtract(1, 1));<br /><br />  }<br /><br />}<br /><br />现在你可以直接执行这个无状态bean了。<br /><br />运行结果<br /><br />  这个实例使用ant机制运行，所以需要配置build.xml。不同的build.xml中需要设置不同的run参数中的classname：<br /><br />  &lt;target name="run" depends="ejbjar"&gt;<br /><br />     &lt;java classname="org.jboss.tutorial.stateless.client.Client" fork="yes" dir="."&gt;<br /><br />        &lt;classpath refid="classpath"/&gt;<br /><br />     &lt;/java&gt;<br /><br />  &lt;/target&gt;<br /><br />JNDI的配置相同jndi.properties：<br /><br />java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory<br /><br />java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces<br /><br />java.naming.provider.url=localhost<br /><br /><br /><br />   打开命令运行窗口，到范例目录下，如<br /><br />D:\jboss-EJB-3.0_Preview_2\docs\tutorial\stateless，键入命令ant编译文件。编译成功会显示：BUILD SUCCESSFUL。<br /><br />成功编译后会目录下会多一个build目录，为编译后的class文件和tutorial.ejb3的文件。<br /><br />然后运行 ant run，执行程序，我们可以看到：<br /><br />Buildfile: build.xml<br /><br />prepare:<br /><br />compile:<br /><br />ejbjar:<br /><br />run:<br /><br />    [java] 2005-01-12 15:07:25,296 INFO org.jboss.remoting.InvokerRegistry[main<br /><br />] - Failed to load soap remoting transport: org/apache/axis/AxisFault<br /><br />    [java] 1 + 1 = 2<br /><br />    [java] 1 - 1 = 0<br /><br />BUILD SUCCESSFUL<br /><br />Total time: 3 seconds<br /><br /><br /><br />其中的信息<br /><br />[java] 2005-01-12 15:07:25,296 INFO org.jboss.remoting.InvokerRegistry[main<br /><br />] - Failed to load soap remoting transport: org/apache/axis/AxisFault<br /><br />是JBoss的一个bug，我们可以不去关心。他们会在下一版本改进。<br /><br /><br /><br />至此，我完成了一个EJB3.0的范例。我们可以发现EJB3.0带给我们的惊喜。我们不必再去配置大量繁琐的部署描述和复杂的接口。相信更多的EJB3.0的惊喜在等待着我们去发掘。</span>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/waterjava/aggbug/52884.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2006-06-15 06:12 <a href="http://www.blogjava.net/waterjava/archive/2006/06/15/52884.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>写ejb心得(02)</title><link>http://www.blogjava.net/waterjava/archive/2006/06/07/51157.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Wed, 07 Jun 2006 08:40:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2006/06/07/51157.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/51157.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2006/06/07/51157.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/51157.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/51157.html</trackback:ping><description><![CDATA[
		<p>我的电脑用jbuilder2006+weblogic8.1+mssqlserver2000,<br /><br />用Database Pilot连接数据库时，竟然出现invalid index错误，原来了classpath中多了其他的jar。</p>
<img src ="http://www.blogjava.net/waterjava/aggbug/51157.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2006-06-07 16:40 <a href="http://www.blogjava.net/waterjava/archive/2006/06/07/51157.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>写ejb心得(01)</title><link>http://www.blogjava.net/waterjava/archive/2006/06/07/51155.html</link><dc:creator>狼爱上狸</dc:creator><author>狼爱上狸</author><pubDate>Wed, 07 Jun 2006 08:34:00 GMT</pubDate><guid>http://www.blogjava.net/waterjava/archive/2006/06/07/51155.html</guid><wfw:comment>http://www.blogjava.net/waterjava/comments/51155.html</wfw:comment><comments>http://www.blogjava.net/waterjava/archive/2006/06/07/51155.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/waterjava/comments/commentRss/51155.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/waterjava/services/trackbacks/51155.html</trackback:ping><description><![CDATA["wuliu.jar": [EJB:011082]Error while reading 'META-INF/ejb-jar.xml' or 'META-INF/weblogic-cmp-rdbms-jar.xml'. The error was:<br />"wuliu.jar": Query:<br />"wuliu.jar":  EJB Name:        Student<br />"wuliu.jar":  Method Name:     findAll<br />"wuliu.jar":  Parameter Types: ()<br />"wuliu.jar":  <br />"wuliu.jar":     select a from   =&gt;&gt; student &lt;&lt;=  as a <br /><br /><br />出现以上错误时，把student改为Student就通过了，奇怪，我的表是student.<img src ="http://www.blogjava.net/waterjava/aggbug/51155.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/waterjava/" target="_blank">狼爱上狸</a> 2006-06-07 16:34 <a href="http://www.blogjava.net/waterjava/archive/2006/06/07/51155.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>