Using ORACLE JMS
I am trying to send a message that includes XML in the TextMessage body using JMS class.
My question is how do I trasform XMLDocument into the String so I can use it in the TextMessage body. Later I would like to retrieve that string as XMLDocument.
If somebody has a sample or suggestion how to do that I would really appreciate it.
null
HI Vladimir,
Converting XMLDocument to String
==================================
I am assuming the XMLDocument you wish to convert to String is in variable d
java.io.StringWriter sw = new StringWriter();
d.print(new PrintWriter(sw));
String returnString = sw.getBuffer().toString();
Converting String to XMLDocument
===================================
Again the String you wish to convert is asusmed to be in variable xmlString.
StringReader sr = new StringReader(xmlString);
DOMParser parser = new DOMParser();
parser.parse(sr);
XMLDocument xd = (XMLDocument)parser.getDocument();
Hope this helps in your work.
regards
hemant
null
Similar Messages
-
hi , we have developed an application where we have a queue in websphere MQ and the application server used is oracle 10g . Now instead of using the websphereMQ or any other third party software , can we create a a queue and queue manager(MQ terminology ) in the oracle application server. We have created the queue destination and the connection factory in the oarcle , but how actully we have to create a queue and queue manger or is it not necessary to make one or is there any other way around, and we are trying for OEMS JMS In-Memory and File-Based Persistence , and hopefully the xml files are in right place i was refering to http://download-east.oracle.com/docs/cd/B25221_04/web.1013/b14427/jms.htm#sthref141
for the developmentThat's the right doc, you should create your destination and connection factory in jms.xml which is in j2ee/home/config directory.
Here contains howto for using OracleAS JMS in 10.1.3:
http://www.oracle.com/technology/tech/java/oc4j/1013/how_to/index.html#JMS
http://www.oracle.com/technology/tech/java/oc4j/1013/how_to/how-to-connect-to-oemsjmsmf/doc/how-to-connect-to-oemsjmsmf.html
-Frances -
JMS Enqueue/Dequeue without using oracle.jms package
Hi,
Is it possible to successfully enqueue/dequeue messages from Oracle AQ using JMS which only uses the classes under javax.jms package, not the classes under oracle.jms package. If possible, can anybody please provide some step by step example.
ThanksYou can get the connection factory and the queue from an application server's jndi. Create a resource provider reference in oc4j and get them from there. Read the oc4j services guide, oems (jms) chapter for how to do that.
I think if you are not using an application server you can also get the connection factory and queue from an ldap directory. check out Aq user guide for that. -
Using Oracle Java JMS to write CLOB into an AQ payload
Does anyone have an example of code in JAVA using Oracle JMS
enqueues a CLOB object into AQ ?i am not sure how this is done for javascript, but for PHP, the code looks like this:
var ldr:URLLoader = new URLLoader();
var req:URLRequest = new URLRequest("http://example.com/example.php");
req.method = URLRequestMethod.POST //or GET, or whatever you want
var tmp_data:URLVariables = new URLVariables();
tmp_data.example_var = "whatever";
req.data=tmp_data;
ldr.load(req);
I suppose it would work kind of the same for JS. -
Create EJB 3.0 Message Driven Bean on a Oracle JMS (AQ)
Hi, I need to develop a EJB 3.0 Message Driven Bean. The MDB has to work on a Oracle AQ using Oracle JMS. Is there any how-to document giving an example about this issue. Can you give an example how to create the JMS destination in OC4J (how to configure the Oracle JMS AQ in OC4j), issue the JMS destination via annotions (resource injection) in the MDB. Please give me a working example of the MDB and a test client to produce a message. Regards, Arjan Jorritsma
Check your ejb-jar.xml and see if it has the version of "2.1" there...
If the application was depending upon EJB 3.0 annotations but it had a ejb-jar.xml that had version set to "2.1" and there was no oracle specific descriptor (orion-ejb-jar.xml) to designate it use the resource adapter; It would expect JMS destination and connection factory that is required for a JMS-MDB set in the ejb-jar.xml. So try to change the ejb-jar.xml to update the version to "3.0", OC4J would have parsed the annotation and combined the metadata with ejb-jar.xml and it would work.
-Frances -
Hi
I am deploying an application with MDB using Oracle JMS( AQ ) and durable subscriptions. Now for configuration of the topics, I have a doubt. In addition to creation of the topics in the db do I have to specify those in jms.xml or it is required only in case of Orion JMS? I am really confused with this, since I am getting a deployment error even though I have configured orion-ejb-jar.xml as per AQ req... Any help pls...
Thanks in Advance...Hi Gilbert,
I have done the same, but while deploying it gives error 'Syntax error in source' with no other error message. And I have one more doubt. Does AQ work with Oracle 8i databse ? -
Putting messages direct to OracleAS JMS
Hi Folks,
I'm developing a .NET Application and I need to send messages to a destination(queue) in the Oracle Application Server using OracleAS JMS.
Does anyone know how to do that?
Thanks in advance,
PatrickI don't think so. The interfaces are different. Java --> C# directly, how?
Here is an example (googled) of using java webservices with .net, even the customer does not want to use web services. maybe others could comment on this.
http://www.codeproject.com/cpnet/C__JavaWebServices_JMS.asp
-Frances -
Oracle JMS using AQ throwing InvalidDestinationException
While creating Queue(AQJMS) using Application-Client.xml as shown below iam getting the below shown error. I have configured the Oracle JMS Provider and datasource on Server . Can you Please suggest me what has to be done. Iam using Oracle 10g AS(10.1.2).
Error
javax.jms.InvalidDestinationException: Destination "JMSUSER.demoQueue" has inval id type "class oracle.jms.AQjmsDestination" and cannot be used with OC4J JMS.
at com.evermind.server.jms.EvermindDestination.checkDestination EvermindDestination.java:262)
at com.evermind.server.jms.EvermindMessageProducer.<init>(EvermindMessageProducer.java:61)
at com.evermind.server.jms.EvermindQueueSender.<init>(EvermindQueueSender.java:50)
at com.evermind.server.jms.EvermindQueueSession.createSender(EvermindQueueSession.java:91)
at mypackage.Test.enqueue(Test.java:107)
at mypackage.Test.<init>(Test.java:37)
at mypackage.Test.main(Test.java:48)
[application-client.xml]
<resource-ref>
<res-ref-name>jms/YourQueueConnectionFactory</res-ref-name>
<res-type>javax.jms.QueueConnectionFactory</res-type>
<res-auth>Application</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
<resource-env-ref>
<resource-env-ref-name>jms/demoQueue</resource-env-ref-name>
<resource-env-ref-type>javax.jms.Queue</resource-env-ref-type>
</resource-env-ref>
[orion-application-client.xml]
<resource-ref-mapping
name="jms/YourQueueConnectionFactory"
location="java:comp/resource/OJMSReference/QueueConnectionFactories/someQcf" />
<resource-env-ref-mapping name="jms/demoQueue" location="java:comp/resource/OJMSReference/Queues/jmsuser.demoQueue"/>
Thanks in Advance for the help.no not required. Foreign JMS for Weblogic is independent of OSB. It will work with out installation of OSB.
Manoj -
Oracle JMS AQ connection using Weblogic 10.3.3
Hi All,
I am a newbie with SOA 11g and I am trying to do a simple test case for a use case of connecting Oracle AQ JMS with Weblogic and using it in my SOA 11g process. I am trying to publish something to my queue that I created but I am getting this error in the weblogic / soa log files pasted below :
The steps I followed exactly are this :
1) Created a Database Queue called DemoInqueue using the following scripts :
exec dbms_aqadm.create_queue_table ( queue_table=> 'DemoInQueue', queue_payload_type=> 'SYS.AQ$_JMS_TEXT_MESSAGE', multiple_consumers=> FALSE, compatible=> '8.1');
COMMIT;
exec dbms_aqadm.create_queue(queue_name=> 'DemoInQueue', queue_table=> 'DemoInQueue');
COMMIT;
exec dbms_aqadm.start_queue('DemoInQueue');
COMMIT;
2) Created a Data Source in weblogic server : Called it using the JNDI name : jdbc/oracle/jms Driver Class Name : oracle.jdbc.xa.client.OracleXADataSource (I tested the connection it works fine)
3) Created a JMS Module (JMSTestModule) and then Created a New Summary of Resource for it ( AQServer) and chose option Foregin Server.
Under General Tab, I gave "oracle.jms.AQjmsInitialContextFactory" as the JNDI Initial Context Factory and Under JNDI Properties I put in "datasource=jdbc/oracle/jms" as I created the above datasource.
Under Connection Factores I created a new "ForeignConnectionFactory-0". Under Configuration I gave Local JNDI name as "jms/DemoCF" and remote JNDI Name as "XAQueueConnectionFactory" (I have also tried with
QAConnectionFactory but no difference )
Under Destinations I created a new "ForeignDestination-0" with local JNDI name as "jms/DemoInQ" and Remote JNDI Name as "Queues/DemoInQueue" (Because my Queue name is that)....
4) I restarted the Weblogic Server then went to SOA suite and tried a very simple process Hello world added a JMS adpater....Inside the adpater I selected OEMS (Advanced Queueing), App server my weblogic server,
operation as ProduceMessage and when I hit Browse I was able to see my AQServer ForeignDestination-0 Queue. I selected it and under destination name it populated "jms/DemoInQ" but under JNDI name it also
populated "eis/aqjms/Queue" I left that as is and deployed my process and tried invoking it. It failed with the error message below.....I also tried modifying the JNDI name to something else...in Jdev..but the results
are the same....
Are these steps correct ? Am I missing something here.?
I followed all the blogs and forums in this site and I think I did all the steps...but if anyone can help me I would really appreciate it...
Here is the error stack below :
<BEA1-57B9592B4D0D4FFD1A5C> <3f3d2d8955322f32:-5d57c961:12ca300b9a3:-7fd3-00000000000002d7> <1291230437281> <BEA-190032> << eis/aqjms/Queue > ResourceAllocationException thrown by resource adapter on call to ManagedConnectionFactory.createManagedConnection(): "BINDING.JCA-12141
ERRJMS_CONN_FAC_NOT_FOUND.
ERRJMS_CONN_FAC_NOT_FOUND.
Unable to instantiate connection factory. JMS adapter was unable to look up the connection factory aqjms/XAQueueConnectionFactory neither through JNDI nor instantiate it as a Java class.
Please examine the log file to determine the problem.
">
####<Dec 1, 2010 2:07:17 PM EST> <Warning> <Connector> <OLRMSPLAP103> <AdminServer> <[ACTIVE] ExecuteThread: '6' for queue: 'weblogic.kernel.Default (self-tuning)'> <<anonymous>> <BEA1-57B9592B4D0D4FFD1A5C> <3f3d2d8955322f32:-5d57c961:12ca300b9a3:-7fd3-00000000000002d7> <1291230437296> <BEA-190032> << eis/aqjms/Queue > ResourceAllocationException thrown by resource adapter on call to ManagedConnectionFactory.createManagedConnection(): "BINDING.JCA-12141
ERRJMS_CONN_FAC_NOT_FOUND.
ERRJMS_CONN_FAC_NOT_FOUND.
Unable to instantiate connection factory. JMS adapter was unable to look up the connection factory aqjms/XAQueueConnectionFactory neither through JNDI nor instantiate it as a Java class.
Please examine the log file to determine the problem.
">
SOA LOG.....
####<Dec 1, 2010 2:07:17 PM EST> <Error> <oracle.soa.adapter> <OLRMSPLAP103> <AdminServer> <[ACTIVE] ExecuteThread: '6' for queue: 'weblogic.kernel.Default (self-tuning)'> <<anonymous>> <BEA1-57B9592B4D0D4FFD1A5C> <3f3d2d8955322f32:-5d57c961:12ca300b9a3:-7fd3-00000000000002d7> <1291230437359> <BEA-000000> <JCABinding=> [default/HelloWorldComposite!1.0*soa_25f514de-3db3-4bed-9144-44d83dacbe10.Publishmessage]:Produce_Message One-way operation Produce_Message() failed>
####<Dec 1, 2010 2:07:17 PM EST> <Error> <oracle.soa.bpel.engine.ws> <OLRMSPLAP103> <AdminServer> <[ACTIVE] ExecuteThread: '6' for queue: 'weblogic.kernel.Default (self-tuning)'> <<anonymous>> <BEA1-57B9592B4D0D4FFD1A5C> <3f3d2d8955322f32:-5d57c961:12ca300b9a3:-7fd3-00000000000002d7> <1291230437359> <BEA-000000> <<WSInvocationManager::invoke> got FabricInvocationException
oracle.fabric.common.FabricInvocationException: BINDING.JCA-12563
Exception occured when binding was invoked.
Exception occured during invocation of JCA binding: "JCA Binding execute of Reference operation 'Produce_Message' failed due to: JCA Binding Component connection issue.
JCA Binding Component is unable to create an outbound JCA (CCI) connection.
HelloWorldComposite:Publishmessage [ Produce_Message_ptt::Produce_Message(body) ] : The JCA Binding Component was unable to establish an outbound JCA CCI connection due to the following issue: BINDING.JCA-12141
ERRJMS_CONN_FAC_NOT_FOUND.
ERRJMS_CONN_FAC_NOT_FOUND.
Unable to instantiate connection factory. JMS adapter was unable to look up the connection factory aqjms/XAQueueConnectionFactory neither through JNDI nor instantiate it as a Java class.
Please examine the log file to determine the problem.I executed your scripts one by one and then tried again. Same Error Message. I think the problem is not in the AQ queue. The issue is with the BPEL / SOA process as the error message below clearly says it's not able to find aqjms/XAQueueConnectionFactory. That's the JNDI name in my Jdeveloper ? Is that JNDI what I should be using or should be match something else ? Please help................
Latest Error LOG...
<<anonymous>> <BEA1-0B06BE09987B4FFD1A5C> <3f3d2d8955322f32:-73cb8b9a:12ca58d835d:-7fd3-0000000000000123> <1291268540004> <BEA-000000> <<CubeEngine::handleWorkItem> This exception occurred because the fault thrown in the BPEL flow was not handled by any fault handlers and reached the top-level scope. Root cause : com.oracle.bpel.client.BPELFault: faultName: {{http://schemas.oracle.com/bpel/extension}bindingFault}
parts: {{
summary=<summary>Exception occured when binding was invoked.
Exception occured during invocation of JCA binding: "JCA Binding execute of Reference operation 'Produce_Message' failed due to: JCA Binding Component connection issue.
JCA Binding Component is unable to create an outbound JCA (CCI) connection.
HelloWorldComposite:Publishmessage [ Produce_Message_ptt::Produce_Message(body) ] : The JCA Binding Component was unable to establish an outbound JCA CCI connection due to the following issue: BINDING.JCA-12141
ERRJMS_CONN_FAC_NOT_FOUND.
ERRJMS_CONN_FAC_NOT_FOUND.
Unable to instantiate connection factory. JMS adapter was unable to look up the connection factory aqjms/XAQueueConnectionFactory neither through JNDI nor instantiate it as a Java class.
Please examine the log file to determine the problem.
The invoked JCA adapter raised a resource exception.
Please examine the above error message carefully to determine a resolution.
</summary>
,detail=<detail>aqjms/XAQueueConnectionFactory</detail>
,code=<code>null</code>}
> -
How to Configure and Use Oracle's JMS Connector with Tibco EMS
Jeff,
I am getting the below exception while try to do the deployment of the sample provided on 'How to Configure and Use Oracle's JMS Connector with Tibco Enterprise for JMS'
While deployment not able to get the 'TibcoJMSReference',
As I understand in the 'orion-application.xml for the below, unable to get the instance. Could you adivce how I can enable the trace more?
<resource-provider class="com.evermind.server.deployment.ContextScanningResourceProvider" name="TibcoJMSReference">
could you help to resolve the issue?
Error
Operation failed with error: No resource named 'TibcoJMSReference/TibcoXACF'foundHi,
I'm also looking for the same 'Configure and Use Oracle's JMS Connector with Tibco JMS to consume message'. If you have already implemented and working fine, please let me know the steps and some documents. -
JDBC connection pool failures when used by JMS stores
We are using WebLogic 6.1 sp2. We defined a separate connection pool for use by
a JMS Store.
<JDBCConnectionPool Name="sybaseJMSPool"
Targets="cluster00"
InitialCapacity="2"
MaxCapacity="10"
DriverName="com.sybase.jdbc2.jdbc.SybDriver"
Properties="[email protected]@;[email protected]@;charset=utf8"
URL="jdbc:sybase:Tds:@jms.db.host@/@jms.db.name@"/>
(note that the @xxx@ string are replaced by actual values).
We are using Sybase Jconnect 5.5 to a Sybase ASE 12.5 database.
We deployed this configuration on a number of environments (testing, staging,
..). The actual hardware and network configuration is different for the different
system, but the WebLogic domain stays the same regarding this issue.
On the test system we frequently get the following exceptions:
<Aug 13, 2002 1:56:04 PM CEST> <Alert> <JMS> <www00-test> <node00>
<ExecuteThread: '6' for queue: 'JMS.TimerClientPool'> <> <> <040048>
<JMSServer "JMSServer00", store failure while writing message for topic
OrderChangeTopic, java.io.IOException: JMS JDBC store, connection pool =
<sybaseJMSPool>, prefix = <JMS00>: write failed
java.sql.SQLException: JZ006: Caught IOException:
com.sybase.jdbc2.jdbc.SybConnectionDeadException: JZ0C0: Connection is already
closed.
at com.sybase.jdbc2.jdbc.ErrorMessage.raiseErrorCheckDead
(ErrorMessage.java:715)
at com.sybase.jdbc2.tds.Tds.handleIOE(Tds.java:3124)
at com.sybase.jdbc2.tds.Tds.cancel(Tds.java:1412)
at com.sybase.jdbc2.tds.Tds.cancel(Tds.java:1341)
at com.sybase.jdbc2.jdbc.SybStatement.doCancel(SybStatement.java:564)
at com.sybase.jdbc2.jdbc.SybStatement.updateLoop(SybStatement.java:1672)
at com.sybase.jdbc2.jdbc.SybStatement.executeUpdate
(SybStatement.java:1625)
at com.sybase.jdbc2.jdbc.SybPreparedStatement.executeUpdate
(SybPreparedStatement.java:91)
at com.p6spy.engine.logging.P6LogPreparedStatement.executeUpdate
(P6LogPreparedStatement.java:179)
at weblogic.jdbc.pool.Statement.executeUpdate(Statement.java:293)
at weblogic.jms.store.JDBCIOStream.write(JDBCIOStream.java:1246)
at weblogic.jms.store.StoreRequest.doTheIO(StoreRequest.java:250)
at weblogic.jms.store.JMSStore.execute(JMSStore.java:182)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:139)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:120)
.>
java.io.IOException: JMS JDBC store, connection pool = <sybaseJMSPool>, prefix
= <JMS00>: write failed
java.sql.SQLException: JZ006: Caught IOException:
com.sybase.jdbc2.jdbc.SybConnectionDeadException: JZ0C0: Connection is already
closed.
at com.sybase.jdbc2.jdbc.ErrorMessage.raiseErrorCheckDead
(ErrorMessage.java:715)
at com.sybase.jdbc2.tds.Tds.handleIOE(Tds.java:3124)
at com.sybase.jdbc2.tds.Tds.cancel(Tds.java:1412)
at com.sybase.jdbc2.tds.Tds.cancel(Tds.java:1341)
at com.sybase.jdbc2.jdbc.SybStatement.doCancel(SybStatement.java:564)
at com.sybase.jdbc2.jdbc.SybStatement.updateLoop(SybStatement.java:1672)
at com.sybase.jdbc2.jdbc.SybStatement.executeUpdate
(SybStatement.java:1625)
at com.sybase.jdbc2.jdbc.SybPreparedStatement.executeUpdate
(SybPreparedStatement.java:91)
at com.p6spy.engine.logging.P6LogPreparedStatement.executeUpdate
(P6LogPreparedStatement.java:179)
at weblogic.jdbc.pool.Statement.executeUpdate(Statement.java:293)
at weblogic.jms.store.JDBCIOStream.write(JDBCIOStream.java:1246)
at weblogic.jms.store.StoreRequest.doTheIO(StoreRequest.java:250)
at weblogic.jms.store.JMSStore.execute(JMSStore.java:182)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:139)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:120)
at weblogic.jms.store.JDBCIOStream.throwIOException
(JDBCIOStream.java:1213)
at weblogic.jms.store.JDBCIOStream.write(JDBCIOStream.java:1256)
at weblogic.jms.store.StoreRequest.doTheIO(StoreRequest.java:250)
at weblogic.jms.store.JMSStore.execute(JMSStore.java:182)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:139)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:120)
Before that this message appeared:
<Aug 13, 2002 11:31:16 AM CEST> <Error> <ConnectionManager> <www00-test>
<node00> <ExecuteThread: '26' for queue: 'default'> <> <> <000000>
<Closing: 'weblogic.rjvm.t3.T3JVMConnection@795af6' because of: 'Server
received a message over an uninitialized connection: 'JVMMessage from: 'null'
to: '-4555218188801970213S:192.168.13.1:[7001,7001,7002,7002,7001,7002,-
1]:ADIS:node00' cmd: 'CMD_REQUEST', QOS: '101', responseId: '1',
invokableId: '287', flags: 'JVMIDs Not Sent, TX Context Not Sent', abbrev
offset: '34'''>
This problem did not occur on another system which was used during a 2 day stress
testing session.
It seems that the problem occurs after a period in which no user request where
made. The user requests trigger EJB's that start sending JMS messages.
When the problem occurs, the JMS messaging systems seems to lock up as no messages
are received anymore by the different listeners (MDBs).
Undeploying and redeploying the JBDC connection pool solves the problem. This
solution is unacceptable in case of a production system.
A similarly defined connection pool, which is used by the EJBs to make database
connection, does not manifest this problem.
<JDBCConnectionPool Name="sybasePool"
Targets="cluster00"
InitialCapacity="10"
CapacityIncrement="5"
MaxCapacity="50"
PreparedStatementCacheSize="150"
DriverName="com.sybase.jdbc2.jdbc.SybDriver"
Properties="[email protected]@;[email protected]@;JCONNECT_VERSION=6;charset=utf8"
URL="jdbc:sybase:Tds:@db.host@/@db.name@"/>
The JDBC connection pool is used as follows by the JDBC store
<JMSJDBCStore ConnectionPool="sybaseJMSPool" Name="JDBCStore00" PrefixName="JMS00"/>
<JMSServer Name="JMSServer00" Store="JDBCStore00" Targets="node00">
<JMSTopic JNDIName="ADIS.JMSError" JNDINameReplicated="false" Name="ErrorTopic"/>
<JMSTopic JNDIName="ADIS.Status"
Name="StatusTopic" RedeliveryDelayOverride="300000"/>
<JMSTopic JNDIName="ADIS.OrderChange" JNDINameReplicated="false"
Name="OrderChangeTopic" RedeliveryLimit="3"/>
</JMSServer>
Turning on the "Test Reserved Connection" with a appropriate test table does not
help.
Some sources on the internet tell us that JZ0C0 errors in the Jconnect driver
can be related to network problems. Nevertheless the connection pool should be
able to cope with this.
Can you provide any solution for this ? Or give us hints what can cause the problem
Zhenhao Qi wrote:
thanks! Joe.
The SQL statement itself can no longer be simplified, the long excuation time is due to the database size and complicated Select criteria. I can easily reproduce the problem by using this SQL. I tried "BEA's Oracle driver (Type 4): Version 8.1.7,9.0.1,9.2.0". the question can be dissect into 2 pieces:
1) why the jdbc connection (using oracle.jdbc.OracleDriver) won't return anything if the SQL execution time > 5min, that is probably the Oracle's problem
2) why the occupied connection pool won't release even I set "Statementtimeout=600", this is Weblogic's problem.
ZhenhaoHi. Yes, (1) is oracle's problem. (2) may also be. The JDBC spec has very few
allowances for one thread to interrupt a second thread's JDBC call. If we
transmit your timeout request by calling setQueryTimeout() on the oracle
statement, and if you have a weblogic-controlled transaction we call
Statement.cancel() on any ongoing statement, we end up relying on whether
the Oracle driver implements and responds to those calls.
Are you doing weblogic-controlled transactions? Are you/can you
call Statement.setQueryTimeout() on your statements, or are these
generated JDBC queries?
If you can duplicate the problem using the weblogic.jdbc.oracle.OracleDriver
we have some other debug avenues. This would be good even if you really
want to use the thin driver, because we will do the same JDBC calls to
either driver, and the debug would prove (if) we set up a query timeout
and if we call cancel(). If we do, then we can know that it is the Oracle
driver failing in these regards.
Joe -
How do I use a JMS MessageSelector with application-specific properties
According to a couple of JMS references (Sun, Oreilly) and the oracle documentation (under the heading "Using Oracle Java Messaging Service (JMS) to Access AQ", page 102 of 1082 , Application Developers Guide - Advanced Queuing, Release 2 (8.1.6))
Standard JMS Features
"Message selection based on message header fields/properties"
Is there a special syntax for using application-specific (user defined) JMS message properties as message selectors in Oracle 8.1.7?
I've tried to create a message selector based on a custom property that I set, i.e. "username != 'William'". (example from O'Reilly JMS book, pg. 44)
I always get a JMS-159: Invalid selector Selector Parse error unless the property is a JMS-Defined property. i.e., " JMSMessageID = 'ID:9789D65E215B3613E034080020B1456E' " works fine.
From the docs and the oter examples, I figure application-specific (user-defined) properties are legal.
Thans for any help in advance.Well I found an article in another forum that states in oracle 8i, message selectors are only supported on JMSCorrelationID and JMSMessageID
(9i will have/has the full JMS spec support for message selectors , or so the response to the message says)
Thanks anyway
(Aricle Is In Products > Database > Oracle Advanced Queueing
Title is JMS AQ: selector in createReceiver does not work) -
Weblogic Server 9.2 Crashes when using the JMS Wrapped Connection Pooling.
===== BEGIN DUMP =============================================================
JRockit dump produced after 0 days, 01:05:05 on Thu Sep 16 18:27:36 2010
Additional information is available in:
E:\obopay\servers\EWP_9.2_Domain\jrockit.4516.dump
E:\obopay\servers\EWP_9.2_Domain\jrockit.4516.mdmp
If you see this dump, please open a support case with BEA and
supply as much information as you can on your system setup and
the program you were running. You can also search for solutions
to your problem at http://forums.bea.com in
the forum jrockit.developer.interest.general.
Error Message: Illegal memory access. [54]
Exception Rec: EXCEPTION_ACCESS_VIOLATION (c0000005) at 0x0095065F - memory at 0x00740060 could not be read.
Minidump : Wrote mdmp. Size is 567MB
SafeDllMode : -1
Version : BEA JRockit(R) R27.2.0-131-78843-1.5.0_10-20070320-1457-windows-ia32
GC Mode : Garbage collection optimized for throughput
GC Strategy : Generational Parallel Mark & Sweep
: Current OC phase is: not running. YC is not running.
: GC strategy for GC 36 was genparpar
: GC strategy for GC 37 was genparpar
: GC strategy for GC 38 was genparpar
: GC strategy for GC 39 was genparpar
: GC strategy for GC 40 was genparpar
: mmHeap->data = 0x00C00000, mmHeap->top = 0x10C00000
: The nurserylist starts at 0x01BE75E8 and ends at 0x0CB52440
: mmStartCompaction = 0x00C00000, mmEndCompaction = 0x01C00000
: References are 32-bit.
CPU : Intel Pentium III/Pentium III Xeon SSE SSE2 SSE3 SSSE3 EM64T
Number CPUs : 2
Tot Phys Mem : 3451408384 (3291 MB)
OS version : Microsoft Windows XP version 5.1 Service Pack 3 (Build 2600) (32-bit)
Thread System: Windows Threads
State : JVM is running
Command Line : -Djava.library.path=E:\bea\jrockit90_150_10\bin;E:\bea\jrockit90_150_10\jre\bin;E:\bea\weblogic92\server\native\win\32;E:\bea\weblogic92\server\bin;E:\bea\weblogic92\server\native\win\32\oci920_8 -Dweblogic.management.discover=false -Dplatform.home=E:\bea\weblogic92 -Dwls.home=E:\bea\weblogic92\server -Dwli.home=E:\bea\weblogic92\integration -Dweblogic.Name=myserver -Dweblogic.management.username=weblogic -Dweblogic.management.password=weblogic -Dweblogic.ext.dirs=E:\bea\patch_weblogic901\profiles\default\sys_manifest_classpath\weblogic_patch.jar Djava.security.auth.login.config=E://workspace/Bhopal/LoginModulesConfig/ewp_loginmodules.config -Djava.naming.factory.initial.ewp.remote=weblogic.jndi.WLInitialContextFactory -Dcom.ewp.proxy.is_remote=false -Djava.naming.provider.url.ewp.remote=t3://localhost:7001 -Dweblogic.webservice.verbose=true -Dweblogic.log.Log4jLoggingEnabled=true -Dweblogic.security.SSL.ignoreHostnameVerification=true Xdebug -Xnoagent -Dcom.sun.management.jmxremote -Xms256m -Xmx1024m -Dsun.java.launcher=SUN_STANDARD weblogic.Server
java.home : E:\bea\jrockit90_150_10\jre
JAVA_HOME : <not set>
JAVAOPTIONS: <not set>
PATH : E:\bea\jrockit90_150_10\jre\bin;E:\oracle\product\10.2.0\client_1\bin;C:\Program Files\PC Connectivity Solution\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Intel\DMIX;C:\Program Files\TortoiseSVN\bin
C Heap : Good; no memory allocations have failed
StackOverFlow: 0 StackOverFlowErrors have occured
OutOfMemory : 0 OutOfMemoryErrors have occured
Registers (from ThreadContext: 0x4B29E378 / OS context: 0x4B29E764):
eax = 00740060 ecx = 00740060 edx = 45a45ba0 ebx = 08c953b8
esp = 4b29ea30 ebp = 00000000 esi = 4b29ea60 edi = 4b29efb4
es = 00000023 cs = 0000001b ss = 00000023 ds = 00000023
fs = 0000003b gs = 00000000
eip = 0095065f eflags = 00010206
Stack:
(* marks the word pointed to by the stack pointer)
4b29ea30: 00981099* 08c953b8 008ab310 4b29eb34 09e5c308 009810ea
4b29ea48: 4b29ead8 0098ecd2 4b29ea60 4b29ea90 48bd8960 48bd8960
4b29ea60: 00000001 45aa0278 45a45ba0 00000007 00000000 08c953b8
4b29ea78: 08512180 4b29ef60 00000000 09d56368 09d563b0 4b29efb4
Code:
(* marks the word pointed to by the instruction pointer)
0095062c: 5e5f0cc4 c35bc033 01b85e5f 5b000000 ccccccc3 0424448b
00950644: a5f06ca3 ccccc300 cccccccc 04244c8b 01a8018b e0830774
0095065c: 8bc88bfe* 40788301 44408b03 af0f0a75 c0830841 f8e08317
00950674: ccccccc3 cccccccc cccccccc 0424448b 00f4888b 158b0000
Loaded modules:
(* denotes the module causing the exception)
00400000-0040ffff E:\bea\jrockit90_150_10\bin\javaw.exe
7c900000-7c9b1fff C:\WINDOWS\system32\ntdll.dll
7c800000-7c8f5fff C:\WINDOWS\system32\kernel32.dll
7e410000-7e4a0fff C:\WINDOWS\system32\USER32.dll
77f10000-77f58fff C:\WINDOWS\system32\GDI32.dll
77dd0000-77e6afff C:\WINDOWS\system32\ADVAPI32.dll
77e70000-77f02fff C:\WINDOWS\system32\RPCRT4.dll
77fe0000-77ff0fff C:\WINDOWS\system32\Secur32.dll
77c10000-77c67fff C:\WINDOWS\system32\MSVCRT.dll
76390000-763acfff C:\WINDOWS\system32\IMM32.DLL
00820000-00a9cfff *E:\bea\jrockit90_150_10\jre\bin\jrockit\jvm.dll
76b40000-76b6cfff C:\WINDOWS\system32\WINMM.dll
71ab0000-71ac6fff C:\WINDOWS\system32\WS2_32.dll
71aa0000-71aa7fff C:\WINDOWS\system32\WS2HELP.dll
7c340000-7c395fff E:\bea\jrockit90_150_10\bin\MSVCR71.dll
5dac0000-5dac7fff C:\WINDOWS\system32\rdpsnd.dll
76360000-7636ffff C:\WINDOWS\system32\WINSTA.dll
5b860000-5b8b4fff C:\WINDOWS\system32\NETAPI32.dll
76bf0000-76bfafff C:\WINDOWS\system32\PSAPI.DLL
6d700000-6d70bfff E:\bea\jrockit90_150_10\jre\bin\verify.dll
6d370000-6d38cfff E:\bea\jrockit90_150_10\jre\bin\java.dll
6d2f0000-6d2f7fff E:\bea\jrockit90_150_10\jre\bin\hpi.dll
6d720000-6d72efff E:\bea\jrockit90_150_10\jre\bin\zip.dll
6d520000-6d527fff E:\bea\jrockit90_150_10\jre\bin\management.dll
6d530000-6d542fff E:\bea\jrockit90_150_10\jre\bin\net.dll
71a50000-71a8efff C:\WINDOWS\system32\mswsock.dll
662b0000-66307fff C:\WINDOWS\system32\hnetcfg.dll
71a90000-71a97fff C:\WINDOWS\System32\wshtcpip.dll
41c00000-41c26fff C:\WINDOWS\system32\DNSAPI.dll
41c30000-41c37fff C:\WINDOWS\System32\winrnr.dll
41c40000-41c6bfff C:\WINDOWS\system32\WLDAP32.dll
41c80000-41c85fff C:\WINDOWS\system32\rasadhlp.dll
68000000-68035fff C:\WINDOWS\system32\rsaenh.dll
769c0000-76a73fff C:\WINDOWS\system32\USERENV.dll
438b0000-438b8fff E:\bea\jrockit90_150_10\jre\bin\nio.dll
41ba0000-41ba9fff E:\bea\jrockit90_150_10\jre\bin\jmapi.dll
41bb0000-41bbdfff E:\bea\weblogic92\server\native\win\32\wlfileio2.dll
43ce0000-43cf8fff C:\WINDOWS\system32\iphlpapi.dll
43d10000-43d27fff C:\WINDOWS\system32\MPRAPI.dll
77cc0000-77cf1fff C:\WINDOWS\system32\ACTIVEDS.dll
43d30000-43d54fff C:\WINDOWS\system32\adsldpc.dll
43d60000-43d70fff C:\WINDOWS\system32\ATL.DLL
43d80000-43ebcfff C:\WINDOWS\system32\ole32.dll
43ec0000-43f4afff C:\WINDOWS\system32\OLEAUT32.dll
43f50000-43f5dfff C:\WINDOWS\system32\rtutils.dll
71bf0000-71c02fff C:\WINDOWS\system32\SAMLIB.dll
43f60000-44052fff C:\WINDOWS\system32\SETUPAPI.dll
44060000-44064fff E:\bea\weblogic92\server\native\win\32\wlntio.dll
44540000-44545fff E:\bea\jrockit90_150_10\jre\bin\rmi.dll
4d010000-4d122fff E:\bea\jrockit90_150_10\jre\bin\dbghelp.dll
"[STANDBY] ExecuteThread: '21' f" id=87 idx=0xf0 tid=4208 lastJavaFrame=0x4B29EB4C
Stack 0: start=0x4B260000, end=0x4B2A0000, guards=0x4B263000 (ok), forbidden=0x4B261000
Thread Stack Trace:
at _mmGetPossibleMovedObjectSize+15()@0x0095065F
at _refIterInit+393()@0x00981099
at _refIterInit+474()@0x009810EA
at _trProcessLocksForThread+66()@0x0098ECD2
at _javalockCouldBeLock+1047()@0x008AB417
at _javalockConvertThinToFat+42()@0x008AC13A
at RJNIjrockit_vm_Locks_convertThinLockedToFatLocked@8+15()@0x00986B1F
-- Java stack --
at jrockit/vm/Locks.convertThinLockedToFatLocked(Ljava/lang/Object;)V(Native Method)
at jrockit/vm/Locks.createMonitorAndConvert(Ljava/lang/Object;Z)Ljrockit/vm/ObjectMonitor;(Unknown Source)
at java/lang/Object.wait(J)V(Native Method)
at java/lang/Object.wait(Object.java:474)
at weblogic/common/CompletionRequest.getResult(CompletionRequest.java:109)
^-- Holding lock: weblogic/common/CompletionRequest@0x09E5C2A8[thin lock]
at weblogic/store/gxa/internal/GXATransactionImpl.commitStoreIO(GXATransactionImpl.java:99)
at weblogic/store/gxa/internal/GXATransactionImpl.doOperationCallbacks(GXATransactionImpl.java:215)
at weblogic/store/gxa/internal/GXAResourceImpl.commit(GXAResourceImpl.java:1448)
at weblogic/transaction/internal/XAServerResourceInfo.commit(XAServerResourceInfo.java:1333)
at weblogic/transaction/internal/XAServerResourceInfo.commit(XAServerResourceInfo.java:577)
at weblogic/transaction/internal/ServerSCInfo.startCommit(ServerSCInfo.java:514)
at weblogic/transaction/internal/ServerTransactionImpl.localCommit(ServerTransactionImpl.java:1993)
at weblogic/transaction/internal/ServerTransactionImpl.globalRetryCommit(ServerTransactionImpl.java:2658)
at weblogic/transaction/internal/ServerTransactionImpl.globalCommit(ServerTransactionImpl.java:2580)
at weblogic/transaction/internal/ServerTransactionImpl.internalCommit(ServerTransactionImpl.java:278)
at weblogic/transaction/internal/ServerTransactionImpl.commit(ServerTransactionImpl.java:227)
at weblogic/deployment/jms/WrappedTransactionalSession.delistFromTransaction(WrappedTransactionalSession.java:258)
^-- Holding lock: weblogic/deployment/jms/PooledSession_weblogic_jms_client_JMSXASession@0x09D56368[thin lock]
at weblogic/deployment/jms/WrappedMessageProducer.send(WrappedMessageProducer.java:149)
at com/obopay/jms/helper/BaseQueueHelper.sendMessage(BaseQueueHelper.java:107)
The above is the jrockit crash dump file..
I am using the JMS Wrapper Connection Poooling provided by Weblogic. When i use Jmeter and do the load testing for around 10 users, the server gets crashed.
I doubt something is going wrong with the Weblogic JMS Connection Pooling, please help me..The problem doesn't look like it has anything to do with wappers per se. The stack indicates that the JVM died when the persistent store tried to invoke a standard Java synchronize operation. JVM crashes need to be analyzed by a JVM expert, so I second the suggestion to solicit help from JVM experts and/or filing a case with customer support. In the mean-time, you can probably work-around the issue by either (A) ensuring you have a recent version of the JVM installed, or (B) temporarily switching to the Sun JVM.
Regards,
tom
Edited by: TomB on Sep 17, 2010 2:33 PM -
How to configure global transaction wthin Oracle AS JMS and Oracle JMS
How to configure global transaction if I take a message from Oracle JMS(AQ) and send it to the Oracle JMS?
Which version of OC4J are you working on?
In OC4J 10.1.3.x, presume your OC4J JMS listens messages via MDB which uses a resource adapter as a message listener. The resouce adaper could be the generic JMS adapter deployed in OC4J as the default.
Resource adapter configuration to support MDBs is included in the standard ra.xml file, which lists the message listener types that the resource adapter supports.
The MDB developer or deployer configures the MDB in the ejb-jar.xml file, through a <message-driven> element.
In addition to above, configuration in the ejb-jar.xml file specifies whether an MDB uses transactions.
1) The <transaction-type> subelement of <message-driven> in ejb-jar.xml has a value of Container, and the <trans-attribute> subelement of <container-transaction> (under the <assembly-descriptor> element) has a value of Required. In this circumstance, if there is an imported transaction, then message delivery and related work are performed within that transaction. If there is no imported transaction, OC4J creates a transaction, and message delivery and related work are performed within that transaction.
2) The <transaction-type> subelement of <message-driven> in ejb-jar.xml has a value of Bean. In this circumstance, the MDB manages the transaction. If a transaction is imported, OC4J will suspend it before the message delivery method call to the MDB, in order to avoid conflict.
Message delivery is not transacted if the <transaction-type> subelement of <message-driven> in ejb-jar.xml has a value of Container, but the <trans-attribute> element has a value of NotSupported. If there is an imported transaction in this circumstance, OC4J will suspend the transaction before the message delivery method call to the MDB.
Details could be found from OC4J Resource Adapter Guide. -
Weblogic Connection with Oracle JMS AQ errors
Hi All,
I am a newbie with SOA 11g and I am trying to do a simple test case for a use case of connecting Oracle AQ JMS with Weblogic and using it in my SOA 11g process. I am trying to publish something to my queue that I created but I am getting this error in the weblogic / soa log files pasted below :
The steps I followed exactly are this :
1) Created a Database Queue called DemoInqueue using the following scripts :
exec dbms_aqadm.create_queue_table ( queue_table=> 'DemoInQueue', queue_payload_type=> 'SYS.AQ$_JMS_TEXT_MESSAGE', multiple_consumers=> FALSE, compatible=> '8.1');
COMMIT;
exec dbms_aqadm.create_queue(queue_name=> 'DemoInQueue', queue_table=> 'DemoInQueue');
COMMIT;
exec dbms_aqadm.start_queue('DemoInQueue');
COMMIT;
2) Created a Data Source in weblogic server : Called it using the JNDI name : jdbc/oracle/jms Driver Class Name : oracle.jdbc.xa.client.OracleXADataSource (I tested the connection it works fine)
3) Created a JMS Module (JMSTestModule) and then Created a New Summary of Resource for it ( AQServer) and chose option Foregin Server.
Under General Tab, I gave "oracle.jms.AQjmsInitialContextFactory" as the JNDI Initial Context Factory and Under JNDI Properties I put in "datasource=jdbc/oracle/jms" as I created the above datasource.
Under Connection Factores I created a new "ForeignConnectionFactory-0". Under Configuration I gave Local JNDI name as "jms/DemoCF" and remote JNDI Name as "XAQueueConnectionFactory" (I have also tried with
QAConnectionFactory but no difference )
Under Destinations I created a new "ForeignDestination-0" with local JNDI name as "jms/DemoInQ" and Remote JNDI Name as "Queues/DemoInQueue" (Because my Queue name is that)....
4) I restarted the Weblogic Server then went to SOA suite and tried a very simple process Hello world added a JMS adpater....Inside the adpater I selected OEMS (Advanced Queueing), App server my weblogic server,
operation as ProduceMessage and when I hit Browse I was able to see my AQServer ForeignDestination-0 Queue. I selected it and under destination name it populated "jms/DemoInQ" but under JNDI name it also
populated "eis/aqjms/Queue" I left that as is and deployed my process and tried invoking it. It failed with the error message below.....I also tried modifying the JNDI name to something else...in Jdev..but the results
are the same....
Are these steps correct ? Am I missing something here.?
I followed all the blogs and forums in this site and I think I did all the steps...but if anyone can help me I would really appreciate it...
Here is the error stack below :
<BEA1-57B9592B4D0D4FFD1A5C> <3f3d2d8955322f32:-5d57c961:12ca300b9a3:-7fd3-00000000000002d7> <1291230437281> <BEA-190032> << eis/aqjms/Queue > ResourceAllocationException thrown by resource adapter on call to ManagedConnectionFactory.createManagedConnection(): "BINDING.JCA-12141
ERRJMS_CONN_FAC_NOT_FOUND.
ERRJMS_CONN_FAC_NOT_FOUND.
Unable to instantiate connection factory. JMS adapter was unable to look up the connection factory aqjms/XAQueueConnectionFactory neither through JNDI nor instantiate it as a Java class.
Please examine the log file to determine the problem.
">
####<Dec 1, 2010 2:07:17 PM EST> <Warning> <Connector> <OLRMSPLAP103> <AdminServer> <[ACTIVE] ExecuteThread: '6' for queue: 'weblogic.kernel.Default (self-tuning)'> <<anonymous>> <BEA1-57B9592B4D0D4FFD1A5C> <3f3d2d8955322f32:-5d57c961:12ca300b9a3:-7fd3-00000000000002d7> <1291230437296> <BEA-190032> << eis/aqjms/Queue > ResourceAllocationException thrown by resource adapter on call to ManagedConnectionFactory.createManagedConnection(): "BINDING.JCA-12141
ERRJMS_CONN_FAC_NOT_FOUND.
ERRJMS_CONN_FAC_NOT_FOUND.
Unable to instantiate connection factory. JMS adapter was unable to look up the connection factory aqjms/XAQueueConnectionFactory neither through JNDI nor instantiate it as a Java class.
Please examine the log file to determine the problem.
">
SOA LOG.....
####<Dec 1, 2010 2:07:17 PM EST> <Error> <oracle.soa.adapter> <OLRMSPLAP103> <AdminServer> <[ACTIVE] ExecuteThread: '6' for queue: 'weblogic.kernel.Default (self-tuning)'> <<anonymous>> <BEA1-57B9592B4D0D4FFD1A5C> <3f3d2d8955322f32:-5d57c961:12ca300b9a3:-7fd3-00000000000002d7> <1291230437359> <BEA-000000> <JCABinding=> [default/HelloWorldComposite!1.0*soa_25f514de-3db3-4bed-9144-44d83dacbe10.Publishmessage]:Produce_Message One-way operation Produce_Message() failed>
####<Dec 1, 2010 2:07:17 PM EST> <Error> <oracle.soa.bpel.engine.ws> <OLRMSPLAP103> <AdminServer> <[ACTIVE] ExecuteThread: '6' for queue: 'weblogic.kernel.Default (self-tuning)'> <<anonymous>> <BEA1-57B9592B4D0D4FFD1A5C> <3f3d2d8955322f32:-5d57c961:12ca300b9a3:-7fd3-00000000000002d7> <1291230437359> <BEA-000000> <<WSInvocationManager::invoke> got FabricInvocationException
oracle.fabric.common.FabricInvocationException: BINDING.JCA-12563
Exception occured when binding was invoked.
Exception occured during invocation of JCA binding: "JCA Binding execute of Reference operation 'Produce_Message' failed due to: JCA Binding Component connection issue.
JCA Binding Component is unable to create an outbound JCA (CCI) connection.
HelloWorldComposite:Publishmessage [ Produce_Message_ptt::Produce_Message(body) ] : The JCA Binding Component was unable to establish an outbound JCA CCI connection due to the following issue: BINDING.JCA-12141
ERRJMS_CONN_FAC_NOT_FOUND.
ERRJMS_CONN_FAC_NOT_FOUND.
Unable to instantiate connection factory. JMS adapter was unable to look up the connection factory aqjms/XAQueueConnectionFactory neither through JNDI nor instantiate it as a Java class.
Please examine the log file to determine the problem.Thanks for passing along the link.
The part about Oracle's documentation not mentioning the JmsAdapter configuration was a real sticking point for me - I was having the same problem as the original poster until I updated that deployment as the link outlined.
Also, towards the end of that link the author mentions running in to problems getting their composite to successfully bind to the queue definitions that were created in WebLogic.
I attempted post my solution to this on the original site, but I'm not sure if it got through - so I'll add the details of what worked for me here:
Connection Factory:
Local JNDI: aqjms/JMSTest_Connection_Factory
Remote JNDI: XAQueueConnectionFactory
Destination:
Local JNDI: aqjms/JMSTest_Queue
Remote JNDI: Queues/JMSTest_Queue
Outbound Connection Pool:
Name: eis/aqjms/JMSTest_Queue
Connection Factory: aqjms/JMSTest_Connection_Factory
JDeveloper Composite:
Destination Name: aqjms/JMSTest_Queue
JNDI Name: eis/aqjms/JMSTest_Queue
Cheers,
- Nathan
Maybe you are looking for
-
How to view pdf files in xperia mini pro
I have downdoaded a Sony ericsson mobile manual in pdf format. I tried to open it in my mobile by using office suit but its not opening. How to solve this problem?
-
Urgent with step by step example
Hi I was trying to create the given example(Step by step example) from the pdf document(OracleBPM-Tutorial_10.3.pdf) on Page 36 step 12 mentioned as below. My question is Do we expand Expense Report Process or Scren Flow when creating Instance report
-
Executing system commands and capturing results
How do I get the result of executing a system command using Runtime? For example, if I execute "cmd /c dir", how do I get to the result of the dir command from the Process that is returned?
-
.exec environment windows xp?
I try to start a process with a specified environment. in Windows 2000, in Linux Suse10.0 it runs, in Windows XP the process don't have the environment? Why??? (jre1.5.0_09) Have anyone problems with this, too???
-
I'm using a Mac Mini as FileServer (and Plex media server). The owner of the Mac Mini is "MacServer'. A second administrator on the Mac Mini is 'William' Furthermore I have an iMac. The owner / administrator is 'William'. Using the iMac to create a n