仓酷云

标题: JAVA教程之在Java EE情况下利用Kodo EJB [打印本页]

作者: 变相怪杰    时间: 2015-1-18 11:14
标题: JAVA教程之在Java EE情况下利用Kodo EJB
最初被命名为Oak,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机、电话、闹钟、烤面包机等家用电器的控制和通讯问题。  KodoEJB是一个撑持对象/干系映照的框架,依据EJB3标准的请求,KodoEJB除撑持在一般Java使用中供应轻量级的耐久层框架以外,也撑持在JAVAEE容器中利用满意分量级企业使用的需求,充实使用JAVAEE容器中供应的优胜特征如容器办理事件、远程(Remote)会见。

  基于KodoEJB开辟的使用撑持利用EJB大概JCA尺度接进到JAVAEE情况中:


  本文中我们将以经由过程一个复杂的例子,复杂的解说和演示怎样在Weblogic9上经由过程JNDI体例来会见KodoEJB使用。
  情况筹办

  因为Kodo是基于正文机制的框架,我们必需利用JDK5.0完成开辟事情。以是下载、安装Kodo之前,请确保您已下载和安装了JDK5.0。

  为了演示的必要,我们选择MySQL数据库作为耐久化的方针数据库,请人人本人到www.mysql.com下载最新的MySQL数据库后安装。

  安装Kodo

  Kodo的最新版本是Kodo4.0.0EarlyAccess4,今朝人人能够到http://www.solarmetric.com/往下载试用版本,下载时必要注册,你会失掉30天的License。

  将下载的紧缩文件解压到c:/kodo4目次下(前面将利用%KODO_HOME%来援用这个目次),翻开%KODO_HOME%/bin/kodocmd.cmd文件,将个中的KODODIR设置为您的Kodo的安装目次,将JDKHOME设置为Java的安装目次。

  安装Weblogic9

  KodoEJB在JAVAEE情况下运转时必要EJB容器撑持EJB3尺度,BEA最新公布的Weblogic9服务器就撑持EJB3尺度,因而我们选择Weblogic9作为演示时利用的方针服务器。人人能够到http://www.bea.com下载Weblogic9,然后将Weblogic9安装到本人的呆板上。

  [注]本文中的实例是完成可远程会见的EJB实例,因而你能够将Weblogic9安装到其他呆板上,不外客户端挪用的时分必要增添一些情况变量,请参考前面的申明。
开辟KodoEJB使用

  因为篇幅的干系,我们间接利用KodoEJB:切合EJB3标准的耐久层框架一文中已创立好的例子,包含情况筹办、耐久化类创立、数据库创立等事情,上面的章节中将只管不再反复KodoEJB:切合EJB3标准的耐久层框架一文中已提到的步骤,而是重点形貌必要分外完成的事情。

  在EJB开辟中,我们一般都接纳SessionFa?ade计划形式,因而上面的例子也利用了这类计划形式来封装KodoEJB使用。

  我们利用一个无形态的SessionBean来封装对Book类的一切操纵,因为KodoEJB使用中必要开辟者完成kodo.persistence.EntityManagerFactoryImpl的实例到JNDI的绑定,我们把这部合作作访在SessionBean中完成,上面是SessionBean的接口和完成的全体代码,请注重代码中增添的正文,他们有助于您懂得KodoEJB怎样事情的。

  BookBean类

  上面是BookBean类的源代码,请人人出格注重BookBean类中的setSessionContext办法,个中的代码将
kodo.persistence.EntityManagerFactoryImpl的实例绑定到JNDI上。
  1. packageorg.vivianj.kodo.examples.ejb.stateless;importjava.rmi.RemoteException;importjava.util.Collection;importjavax.ejb.EJBException;importjavax.ejb.SessionBean;importjavax.ejb.SessionContext;importjavax.naming.InitialContext;importjavax.naming.NamingException;importjavax.persistence.EntityManager;importjavax.persistence.EntityManagerFactory;importjavax.persistence.PersistenceContextType;importjavax.persistence.Query;importkodo.persistence.KodoPersistence;importorg.vivianj.kodo.examples.beans.Book;/***BookBean供应SessionBean的完成类*/publicclassBookBeanimplementsSessionBean{protectedSessionContextctx;privateEntityManagerFactoryemf;/***getBookById依据Book对象的id属性查找、前往切合前提的Book对象**@paramid*Book对象的编号*@return编号为id的Book对象*@throwsRemoteException*/publicBookgetBookById(intid)throwsRemoteException{/*取得EJB的实体办理器*/EntityManagerem=emf.createEntityManager(PersistenceContextType.EXTENDED);try{/*入手下手事件*/em.getTransaction().begin();/*处置营业*/Bookbook=em.find(Book.class,id);/*停止事件*/em.getTransaction().commit();returnbook;}finally{/*封闭EJB实体办理器*/em.close();}}/***updateBook更新Book对象的信息**@parambook*必要更新的Book对象*@throwsRemoteException*/publicvoidupdateBook(Bookbook)throwsRemoteException{/*取得EJB的实体办理器*/EntityManagerem=emf.getEntityManager();try{/*入手下手事件*/em.getTransaction().begin();/*处置营业*/em.merge(book);/*停止事件*/em.getTransaction().commit();}finally{/*封闭EJB实体办理器*/em.close();}}/***createBook办法用于耐久化新的Book对象**@parambook*被耐久化的Book对象*@throwsRemoteException*/publicvoidcreateBook(Bookbook)throwsRemoteException{/*取得EJB的实体办理器*/EntityManagerem=emf.getEntityManager();try{/*入手下手事件*/em.getTransaction().begin();/*处置营业*/em.persist(book);/*停止事件*/em.getTransaction().commit();}finally{/*封闭EJB实体办理器*/em.close();}}publicvoiddeleteBook(Bookbook)throwsRemoteException{/*取得EJB的实体办理器*/EntityManagerem=emf.getEntityManager();try{/*入手下手事件*/em.getTransaction().begin();/*处置营业*/Queryq=em.createQuery("deletefromBookcwherec.id=:id");q.setParameter("id",book.id);q.executeUpdate();/*停止事件*/em.getTransaction().commit();}finally{/*封闭EJB实体办理器*/em.close();}}publicCollectiongetBooks(StringqueryString)throwsRemoteException{/*取得EJB的实体办理器*/EntityManagerem=emf.getEntityManager();try{/*入手下手事件*/em.getTransaction().begin();/*处置营业*/ListallBooks=em.createQuery(queryString).getResultList();/*停止事件*/em.getTransaction().commit();returnallBooks;}finally{/*封闭EJB实体办理器*/em.close();}}publicvoidsetSessionContext(SessionContextctx){this.ctx=ctx;try{/*猎取JAVAEE容器高低文情况*/ContextejbContext=newInitialContext();Objecto=null;try{/*依据JNDI查找kodo.persistence.EntityManagerFactoryImpl的实例*/o=ejbContext.lookup("ejb/kodo/emf");}catch(Exceptione){/*假如没有找到,实验将kodo.persistence.EntityManagerFactoryImpl的实例绑定到JNDI上*/EntityManagerFactoryemfForEjb=Persistence.createEntityManagerFactory(null);ejbContext.bind("ejb/kodo/emf",emfForEjb);}if(o==null){/*假如没有找到,实验再次查找*/emf=(EntityManagerFactory)ejbContext.lookup("ejb/kodo/emf");}else{emf=(EntityManagerFactory)o;}}catch(NamingExceptione){thrownewRuntimeException(e);}}publicvoidejbCreate()throwsRemoteException{}publicvoidejbActivate()throwsEJBException,RemoteException{}publicvoidejbPassivate()throwsEJBException,RemoteException{}publicvoidejbRemove()throwsEJBException,RemoteException{}publicvoidunsetSessionContext(){ctx=null;}}
复制代码
BookHome接口
  1. packageorg.vivianj.kodo.examples.ejb.stateless;importjava.rmi.RemoteException;importjavax.ejb.CreateException;importjavax.ejb.EJBHome;/***BookHome类供应SessionBean的home接口*/publicinterfaceBookHomeextendsEJBHome{publicBookRemotecreate()throwsCreateException,RemoteException;}
复制代码
BookRemote接口
  1. packageorg.vivianj.kodo.examples.ejb.stateless;importjava.rmi.RemoteException;importjava.util.Collection;importjavax.ejb.EJBObject;importorg.vivianj.kodo.examples.beans.Book;/***BookRemote类供应SessionBean的remote接口*/publicinterfaceBookRemoteextendsEJBObject{publicBookgetBookById(intid)throwsRemoteException;publicvoidupdateBook(Bookbook)throwsRemoteException;publicvoidcreateBook(Bookbook)throwsRemoteException;publicvoiddeleteBook(Bookbook)throwsRemoteException;publicCollectiongetBooks(StringqueryString)throwsRemoteException;}
复制代码
  编写EJB形貌符文件

  为了将该SessionBean公布到Weblogic9中,我们还必要供应两个设置文件:ejb-jar.xml和weblogic-ejb-jar.xml,作者供应的演示实例中,这两个文件的内容以下,开辟者能够依据本人的实践情况举行调剂。

  ejb-jar.xml
  1. <?xmlversion="1.0"encoding="UTF-8"?><ejb-jarxmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
  2. http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd"version="2.1"><display-name>SampleKodoEJB</display-name><enterprise-beans><session><ejb-name>BookEJB</ejb-name><home>org.vivianj.kodo.examples.ejb.stateless.BookHome</home><remote>org.vivianj.kodo.examples.ejb.stateless.BookRemote</remote><ejb-class>org.vivianj.kodo.examples.ejb.stateless.BookBean</ejb-class><session-type>Stateless</session-type><transaction-type>Container</transaction-type></session></enterprise-beans><assembly-descriptor><container-transaction><method><ejb-name>BookEJB</ejb-name><method-name>*</method-name></method><trans-attribute>Required</trans-attribute></container-transaction></assembly-descriptor></ejb-jar>
复制代码
weblogic-ejb-jar.xml
  1. <?xmlversion="1.0"?><weblogic-ejb-jarxmlns="http://www.bea.com/ns/weblogic/90"xmlns:j2ee="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.bea.com/ns/weblogic/90http://www.bea.com/ns/weblogic/90/weblogic-ejb-jar.xsd"><weblogic-enterprise-bean><ejb-name>BookEJB</ejb-name><jndi-name>ejb/kodo/book</jndi-name></weblogic-enterprise-bean></weblogic-ejb-jar>
复制代码
  打包部署

  基于KodoEJB开辟的EJB打包和一般的EJB打包没有甚么出格,部署历程也没有甚么出格,对照复杂的体例是利用设置工具创立新的域后,将打包好的EJBjar文件间接拷贝到域目次下的autodeploy目次下。

  完全地打包部署历程这里不再赘述,假如人人还不是非常熟习,请人人参考WeblogicServer的在线匡助文档http://edocs.bea.com/wls/docs91/index.html

  在这里要给人人先容的是创立Weblogic9域后怎样设置Kodo的两部份内容:

  测试

  如今,启动服务器,编写段复杂的测试代码,看看EJB是不是可以一般入手下手事情,上面这段代码能够用于测试从EJB中查找切合请求的Book对象并打印它的name属性。
  1. /*供应Weblogic服务器的信息*/Hashtable<String,String>h=newHashtable<String,String>();h.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");h.put(Context.PROVIDER_URL,"t3://localhost:7001");/*猎取指定服务器的高低文路径*/Contextctx=newInitialContext(h);/*从JNDI中猎取SessionBean的home接口*/Objecto=ctx.lookup("ejb/kodo/book");BookHomehome=(BookHome)PortableRemoteObject.narrow(o,BookHome.class);/*取得SessionBean的remote接口*/BookRemoteremote=home.create();/*挪用营业办法*/System.out.println(remote.getBookById(1).name);
复制代码
  实行客户真个时分,请将%KODO_HOME%/lib目次下的jar文件和Weblogic服务器安装目次下的server/lib/weblogic.jar文件都放在CLASSPATH中。

  总结

  在EJB3的尺度中,EJB3使用既能够用于JavaSE情况中,同时还能够用于JavaEE情况下利用。KodoEJB中供应了两种分歧的体例撑持在JavaEE情况下利用:JCA和JNDI,个中JCA体例对照复杂,而JNDI体例则可以供应更好的天真性。

  在本文中,作者以一个复杂的例子申明了在Weblogic9中怎样将KodoEJB中kodo.persistence.EntityManagerFactoryImpl的实例绑定到JNDI上,经由过程JNDI会见KodoEJB使用中的耐久化类。

  参考资本:

  EJB3标准:http://jcp.org/aboutJava/communityprocess/pfd/jsr220/index.html
  JDO2标准:http://jcp.org/aboutJava/communityprocess/pfd/jsr243/index.html
  Kodo在线文档:http://solarmetric.com/kodo/Documentation/4.0.0EA4/docs/full/html/index.html
  Weblogic9在线文档:http://edocs.bea.com/wls/docs91/index.html

  下载资本kodoejb-JavaEE.jar

主要缺点就是:速度比较慢,没有C和C++快
作者: 老尸    时间: 2015-1-20 18:25
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
作者: 只想知道    时间: 2015-1-27 23:20
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
作者: 海妖    时间: 2015-2-5 11:07
是一种突破用户端机器环境和CPU
作者: 小魔女    时间: 2015-2-8 07:49
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
作者: 分手快乐    时间: 2015-2-25 01:20
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
作者: 爱飞    时间: 2015-3-7 14:53
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
作者: 蒙在股里    时间: 2015-3-15 07:40
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
作者: 金色的骷髅    时间: 2015-3-21 20:55
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2