Oracle开发人员JAVA存储过程(二)

日期: 2008-06-19 作者:Kuassi Mensah 来源:TechTarget中国

   定义Call Spec
 
  create OR REPLACE PROCEDURE insertAccount(owner IN varchar, bal IN number, newid OUT number) AS LANGUAGE JAVA NAME ’GenPK.insertAccount( java.lang.String [])’; /
 
  在ejbcreate()内调用存储过程
  
 Public AccountPK ejbcreate(String ownerName, int balance) throws createException { try { CallableStatement call = conn.prepareCall{ “{call insertAccount(?, ?, ?)}”}; return new AccountPK(accountID); } }


  为CMP实体Bean定制主关键字查找器


  查找器方法(Finder methods)用于检索已存在的EJB实体bean实例。主关键字查找器使你能够检索惟一标识的EJB实例。对于CMP实体bean,EJB容器根据声明描述,自动生成主关键字查找器findByPrimaryKey()方法。但是,在某些情况下,可能需要更多的控制,例如可能需要专门的查找器,如findByStoredProcKey()。在这些情况下,你可以结合使用Java存储过程和对象关系框架(如Oracle9i应用服务器[Oracle9iAS] TopLink)来实现定制的主关键字查找器方法。在将EJB查找器定义为REDIRECT或NAMED查找器后,TopLink将生成一个SQL查询用于检索bean实例。


  数据驱动的EJB调用


  在数据驱动体系结构中,商务逻辑调用可以作为数据库操作(如插入、更新或删除)的结果来触发。实现该数据逻辑的Java存储过程可以被声明为数据库触发器,用以调用运行于中间层J2EE应用服务器的EJB。EJB的调用既可以采用J2EE1.3兼容的服务器通过Interoperable Inter-ORB Protocol(IIOP)标准远程方法调用(remote method invocation,RMI)实现,也可以通过销售商特定的传输协议(如Oracle9iAS/Oc4J的ORMI,或者通过BEA WebLogic的T3)用RMI来实现。每个应用服务器提供商在提供基于IIOP的RMI,以提供互操作性的同时,都有其自己优化的协议。Oracle9iAS同时支持基于IIOP的RMI调用和基于ORMI协议的RMI调用。


  数据驱动的消息传送


  Oracle9i数据库嵌入了Advanced Queuing(AQ,高级排队),它是一种集成的、稳定、可靠、安全、可扩展和事务处理式的消息排队框架。Oracle通过标准的Java消息传送系统(Java Messaging System,JMS)API为Java开发人员提供AQ功能。Java存储过程可以通过JMS接口调用AQ操作,从而能够实现快速、在会话期内、可扩展的、数据驱动的消息传送。


  Java存储过程可以利用JMS调用AQ操作。可以用以下4个步骤实现这一模式:
  
  创建并启动JMS Queue(为此,可以将以下一些操作嵌入SQL脚本内):
  
  &#101xecute dbms_aqadm.create_queue_table(queue_table => ’queue1’, queue_payload_type => ’SYS.AQ$_JMS_TEXT_MESSAGE’, comment => ’a test queue’, multiple_consumers => false, compatible => ’8.1.0’); &#101xecute dbms_aqadm.create_queue( queue_name => ’queue1’, queue_table => ’queue1’ ); &#101xecute dbms_aqadm.start_queue(queue_name => ’queue1’);
  
  创建Java存储过程(代码摘录如下):
  
  public static void runTest(String msgBody) { try { // get database connection ora_drv = new OracleDriver(); db_conn = ora_drv.defaultConnection(); // setup sender (cf online code sample) .. // create message s_msg = s_session.createTextMessage(msgBody); // send message sender.send(s_msg); s_session.commit(); // receive message r_msg = (TextMessage) receiver.receive(); r_session.commit(); // output message text String body = r_msg.getText(); System.out.println(“message was ’”+body+”’”); ..} }
  
  创建Call Spec:
 
  create or replace procedure jmsproc (t1 IN VARchar) as language java name ’jmsSample.main (java.lang.String[])’; /
 
  调用存储过程:
 
  call jmsproc(’hello’);
  数据库辅助的Web发布(缓冲失效)


  各应用程序结构必须面对的一个共同问题是如果可靠地将数据库信息进行缓存,以提高整个系统的性能。JCACHE是一种即将公布的标准规范(JSR 107),它可以解决这一问题。它说明了一种对Java对象临时在内存中进行缓存的方法,包括对象的创建、共享访问、假脱机(spooling)、失效、各JVM的一致性等。它可被用于缓存JSP内最经常读取的数据,如产品目录和价格列表。利用JCACHE,多数查询的反应时间会因为有缓存的数据而加快(内部测试表明反应时间大约快15倍)。


  为了跟踪原始数据的所有变化,并刷新已缓存的数据,Java存储过程会作为一个触发器被附加在一个表上。这个表的任何变化都会自动调用该存储过程,后者再调出一个已定义的JSP使JCACHE对象失效,该对象将其状态映射到该数据库表。在失效时,紧跟其后的查询将强制缓存器根据数据库的数据进行更新。 下面的步骤
  阅读关于Java存储过程的更多信息
  本文摘自白皮书”释放Java存储过程的能量(Unleash the Power of Java Stored Procedures)”,可以在以下位置找到该白皮书:
  otn.oracle.com/tech/java/java_db/pdf/
  OW_30820_JAVA_STORED_PROC_paper.PDF


  Oracle9i数据库第2版中的新PL/SQL特性
  otn.oracle.com/tech/pl_sql/pdf/
  Paper_30720_Doc.pdf


  Resolver Spec
  otn.oracle.com/docs/products/oracle9i/
  doc_library/release2/java.920/a96659.pdf


  OracleJVM and Java 2 Security
  otn.oracle.com/docs/products/oracle9i/
  doc_library/release2/java.920/a96656.pdf


  下载代码
  练习本文中的代码示例:
  otn.oracle.com/sample_code/tech/
  java/jsp/Oracle9iJSPSamples.html


  了解作为Web服务的存储过程
  otn.oracle.com/tech/webservices


  扩展数据库的功能


  在数据库中直接运行Java代码的一个妙处就在于要实现新的功能,只需要简单地加载代码或库,并利用Call Spec制作可用于SQL、PL/SQL、Java、J2EE和非Java API的进入点(公共静态方法)。Oracle9i数据库用户可以很容易地扩展数据库功能。Oracle自己利用这种能力来获得新的应用程序和工具包,如XML Developer Kits(XDKs)。


  沟通SQL、PL/SQL、Java、J2EE、.NET和XML


  Oracle XDK是用Java编写的,并将其公共方法可用作Java存储过程,从而扩展了数据库的XML可编程能力。SQL、PL/SQL、Java、J2EE和非Java(.NET)商务逻辑都能够访问XML分析器、XSLT处理器、XPath引擎和XML SQL Utility(XSU)。


  XML分析器可以通过xmlparser和xmldom包进行访问。XSU是一种Java实用程序,它可以由SQL查询结果或JDBC ResultSet生成XML文档,并将XML文档中的数据写入数据库表或视图中。利用XSU,XML输出可以输出为文本、Dom树或DTS。通过dbms_xmlquery和dbms_xmlsave包,XSU即可用于PL/SQL。


  结论


  Oracle数据库与Java VM的集成可以创建可移植、功能强大和与数据库无关的数据逻辑和持续性逻辑(persistence logic)。运行于中间层的商务逻辑和运行于数据库层的数据逻辑之间的分离提高了应用程序的可扩展性、灵活性和可维护性。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

相关推荐