This Domain(Admin5.com) is for Sale:

Oracle开发人员 JAVA数据库存储过程

时间:2007-12-23  来源:不详  作者:迈克DB

创建一个Java存储过程,在公共GenPk类中定义一个公共静态Java方法insertAccount()。此方法将插入数据、计算惟一的要害字(通过发出一个序列号),并返回计算出的要害字作为主要害字。
定义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个步骤实现这一模式:
wangzhan.dngz.net

创建并启动JMS Queue(为此,可以将以下一些操作嵌入SQL脚本内):
execute 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'); execute dbms_aqadm.create_queue( queue_name => 'queue1', queue_table => 'queue1' ); execute 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 "'"); ..} }

看完这篇,您有何感觉呢?

文章评论

共有0位Admini5网友发表了评论 查看完整内容