IgonoreRecordsetName in JMS possible?
Hi All,
Reopening the below thread
How to ignore Recordset name in XML(Sender JMS Adapter)?
I am having complex header and item structure in source and using the paramater xml.conversionType = StrcutPlain2XML
Hi Biplab,
It is not possible to ignore recordsetname using any standard module.
only FCC in file adapter supports this.
if can remove the recordset by using a simple XSLT mapping.Please give me your source file sample , i will give you the XSLT code.
===============================================
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!--
This XSLT Mapping will delete the RecordSet node from input xml Payload
Author: Debashish Roy -->
<xsl:template match="Recordset">
<xsl:apply-templates select="YourNode"/>
</xsl:template>
<xsl:template match="*">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
=======================================
Add this XSLT mapping in Operation mapping before your actual graphical mapping.
Edited by: Debashish on Jun 29, 2011 1:36 PM
Similar Messages
-
JMS - PI - IDoc scenario: possible to disable check for duplicate JMS message ID?
Dear all,
we have a scenario JMS - PI - IDoc. We are on 7.4 SP 7 AEX.
Once and again we get this error in PI Logs
com.sap.aii.adapter.jms.core.channel.filter.InboundDuplicateCheckFilter.filter(MessageFilterContext filterCtx)
Duplicated and already processed JMS message with JMSMessageID ID:414d512053415050523120202020202053f0f4852000fb39 and XI message id b0beffdbcee64c2605779eaacf27b335 detected.
We are currently investigating the error and it seems that the duplicate message IDs already exist on the JMS (MQ) side. The messages with the same ID reside in the same queue but have different payloads, so really are different messages
While it's certainly true that we need to get rid of those duplicate IDs in the long run, I'd like to ask if it is possible to tackle the problem from both sides.
My sender JMS Adapter looks like this:
Transactional JMS Session = Checked
Set PI Message ID (MessageID) to = GUID
Set PI conversation ID (ConversationID) to = No Value
Enable Duplicate Handling = Unchecked
Prefix Channel ID = Unchecked
--> Is there any way to tell PI to just ignore the duplicate JMS ID and continue processing?
Many thanks
Kind regards
JensHi Jens - Please have a look at the below note if it helps.
If you want the duplicate messages received from different channels (that is JMS Messages with the same Message ID) to be processed as a distinct JMS messages and not as duplicate messages, select Prefix Channel ID to JMS Message ID
Reference :
Configuring the Sender JMS Adapter - Advanced Adapter Engine - SAP Library -
Always selecting the local JMS in a cluster, is it possible? (in 6.1)
Hi,
A 6.1 cluster has a JMS server running on each node. The JMS client
code has a component to do the fail over "manually": it tries one
node, if that doesn't work it tries the next and so on. The
destination names are different (and replicated in the JNDI tree).
If everything is ok, all requests go the first server (meaning network
traffic). Is there an elegant way to always try with the local JMS
server before the remote ones, without minimum configuration
dependency (i.e. no system properties passed at start-up telling what
JMS servers to use and so on)
Perhaps something using JMSDestinationRuntimeMBean and
JMSServerRuntimeMBean?
Oh, just noticed JMSRuntimeMBean.html.getJMSServers(), this might do
it. I'll post it nonetheless in case other people have better ideas.
Thanks.
Thanks again.
In fact, if I use the server/queue syntax, I can use the queue name
(the Name attrribute) not the JNDI name. This in case these names can
be the same in a cluster deployment (with replicated JNDI names
different). I'll check soon.
Regarding the connection factory, I wonder whether WL doesn't do its
otherwise typical performance improvements and return a local
connection if there is one (as it already does with remote
interfaces). I couldn't find a reference to such an optimization in
the JMS documentation, though.
On Wed, 17 Apr 2002 09:37:59 -0400, Tom Barnes
<[email protected]> wrote:
>email wrote:
>
>> Thank you. The second option looks better than the first because it
>> allows using destinations on other JMS servers (by interrogating an
>> MBean to get the JMS servers in the cluster).
>
>The second option only works if the connection is already connected
>to the correct server. If you use mbeans, you can glean the URL
>of the correct server by obtaining the IP and address of the remote
>server from the ServerMBean - the "target" of the JMSServerMBean.
>
>An issue with this feature is the connection factory - which round-robins the
>location of connection in certain cases. Currently the only way to ensure the
>connection
>factory does not do this is to target it at a single server. I suppose one
>could duplicate the connection factory and target each duplicate at
>a different server, but that requires giving each one a different name.
>This may not be an issue with server-side contexts, I will investigate.
>
>
>> It's useful to know
>> about JNDINameReplicated, but that way accessing a remote destination
>> will not be possible at all.
>>
>
>I think you could write a small a startup class to look up the queue in the
>local context and register the queue in a
>replicated context with a different JNDI name. This way the destination
>is advertised both ways. Fairly sure this would work.
>
>>
>> BTW, a related question on reliability: accessing a remote destination
>> if the local is down means there is a local problem with the JMS
>> server or the queue, but the container is fine. Now, how likely is
>> this in practice? Having the container up but the JMS subsystem down.
>>
>
>Parts (or all) of JMS can fail due to configuration
>errors -- commonly JNDI name collisions of destinations and/or factories,
>failure to set the target, or using the same server name or jms server name
>on two different servers.
>
>If you are using a file-store, boot failures occur with things
>like file-store not found, or relatively catastrophic failures like
>out-of-memory.
>
>If you are using a JDBC store, there is a dependency on the database being up.
>
>
>>
>> Indeed, 7.0 would solve it but that's several months ahead if I
>> understand correctly:)
>>
>
>Not months. Weeks. A very few weeks. I'm not sure what is officially
>announced
>so I can't get more specific.
>
>>
>> Thanks again.
>>
>> On Tue, 16 Apr 2002 14:48:02 -0400, Tom Barnes
>> <[email protected]> wrote:
>>
>> >Consider the new "JNDINameReplicated" configuration parm on the
>> >destination. Ensure each server running 6.0SP2 with patch CR061106, or
>> >6.1SP3 (not out yet) and later, or 7.0. Configure each queue to have the
>> >same JNDI name, and also take care to set the destination’s new
>> >“JNDINameReplicated” parameter to false. This turns off name
>> >replications, so the JNDI name of the dest is only visible on the server
>> >local to the context.
>> >
>> >Consider naming all destinations the same and looking them up the dest via
>> >session.createQueue("./queuename"), this is a new syntax that restricts
>> >the lookup to the same server as the one the JMS connection is talking
>> >to. The normal syntax is "servername/queuename". This feature is
>> >slated for 6.1SP3, no guarantees, (or try ask customer support to get this
>> >feature in early as a patch, no guarantees there either), or 7.0.
>> >
>> >Consider not rolling your own and using 7.0, which has a rich distributed
>> >destination feature built in.
>> >
>> >Tom
>> >
>> >email wrote:
>> >
>> >> Hi,
>> >>
>> >> A 6.1 cluster has a JMS server running on each node. The JMS client
>> >> code has a component to do the fail over "manually": it tries one
>> >> node, if that doesn't work it tries the next and so on. The
>> >> destination names are different (and replicated in the JNDI tree).
>> >>
>> >> If everything is ok, all requests go the first server (meaning network
>> >> traffic). Is there an elegant way to always try with the local JMS
>> >> server before the remote ones, without minimum configuration
>> >> dependency (i.e. no system properties passed at start-up telling what
>> >> JMS servers to use and so on)
>> >>
>> >> Perhaps something using JMSDestinationRuntimeMBean and
>> >> JMSServerRuntimeMBean?
>> >>
>> >> Oh, just noticed JMSRuntimeMBean.html.getJMSServers(), this might do
>> >> it. I'll post it nonetheless in case other people have better ideas.
>> >>
>> >> Thanks.
>> >
>
-
Is synchronous scenario possible with JDBC & JMS adapter?
Suppose,JDBC adapter is updating a table or deleting some entry from a table.Can we have an acknowledgement back that the work has been done successfully??
same qstn for JMS adapter also..
Suppose JMS adptr is communicating with any messaging system,can we have acknowledgement back?Jms Adapter supports Asynchronous scenarios only but If u want to use Synchronous then possible with Standard module beans :
For ex: JMS to Rfc synchronous scenario:
In id:
Sender jms adapter supports Asynchronous scenarios so we have to use standard module beans in Module tab.
Like :
AF_Modules/RequestResponseBean -> 0
CallSapAdapter
AF_Modules/ResponseOnewayBean -> 1
And Provide values in configuration:
0 -> passThrough -> true
1 -> receiverChannel ->provide RECEIVER JMS adapter name ( have to create one more JMS receiver communication channel for responce )
1 -> receiverService ->provide receiver adapter service name (that is provide sender business component because need response for sender )
jdbc adapter :
http://www.****************/Tutorials/XI/SOAP2JDBC/Page1.htm -
JMS: is it possible to monitor the length of the queues?
Hi,
is it possible to monitor in realtime how many messages are in a JMS queue waiting for being processed?
I'm using the standalone OC4J.
Matteo CandatenHi Matteo Candaten,
I have a problem in JMS.
I had created the tables related to queues in DB. i had also bound the queues with the JNDI names in jms.xml
Still i am unable to use the queues.
I am getting an error saying,
javax.jms.JMSException: Unable to connect to JMSServer (127.0.0.1/127.0.0.1:9127)
at com.evermind.server.jms.EvermindQueueConnection.connect(EvermindQueueConnection.java:144)
at com.evermind.server.jms.EvermindQueueConnection.send(EvermindQueueConnection.java:94)
at com.evermind.server.jms.EvermindQueueSession.send(EvermindQueueSession.java:117)
at com.evermind.server.jms.EvermindQueueSender.send(EvermindQueueSender.java:75)
at com.evermind.server.jms.EvermindQueueSender.send(EvermindQueueSender.java:36)
at com.evermind.server.jms.EvermindQueueSender.send(EvermindQueueSender.java:31)
at OracleJmsSender.sendXmlMessage(OracleJmsSender.java:115)
at OracleJmsSender.<init>(OracleJmsSender.java:57)
at OracleJmsSender.main(OracleJmsSender.java:138)
Can you please give me some idea, how to configure and use JMS in oracle 9ias and
the properties i had set are,
static String JNDI_FACTORY = "com.evermind.server.rmi.RMIInitialContextFactory";
static String SERVER_URL = "ormi://dsrso2:23791/";
static String USER_NAME = "admin";
static String PASSWORD = "kumardsr";
static String FACTORY_NAME = "jms/TTQueueConnectionFactory";
static String QUEUE_NAME = "jms/demoQueue";
are these correct or do i need to change these ??
I just dont have a clue where i am worng.
it would be of great help if u could help me in this..
thanks a lot..
Kalpana -
Is Message debatching in OSB using JMS transport possible
hi
I have message on JMS queue with multiple message(s) in it.
Now my requirement is to read this JMS message as multiple internal message(s) from queue using OSB JMS transport.
Is this possible from OSB JMS transport?
Thanks in advance.
-Ramakrishna GillaNo.. JMS transport wont automatically do it for you .. You will have to write a jms proxy service and have your logic to do the debatching.. alternatively you can use jms proxy as a pass thru service writing to the file system and then have the JCA file adapter to do the debatching..
-
Trying to integrate with User Messaging Service adapter in SOA suite. Can it be possible through an JMS interface.
I have an JMS backend integrated to Oracle B2B. Is it possible to send an email protocol message using JMS interface to B2B where User messaging Service has been implemented. The adapters required for UMS have been deployed and the sdpmessaging jar files also have been added to the classpath. The only problem i face is i dont have an BPEL system to integrate where as in the forums it has been mentioned how to post a message using BPEL.
Please let me know if there is a way to integrate the adapter with JMS interface.
Thanks in advance
DeepakIf I remember correct, to use JCA adapter with SOA stack requires that adapter implement some Oracle API.
The Adapter SDK is a light-weight tool kit that enables rapid implementation and deployment --- http://www.oracle.com/technology/products/integration/adapters/pdf/DS_OracleASAdapter.pdf
http://download.oracle.com/docs/cd/B16981_04/current/acrobat/cct115dg.pdf
Mostly you will have to wrap your jca adapter to make it available in SOA suite/stack.
Other option is that you adapter provider would have given CCI interface or some custom interface which can be used for invoking adapter end-points.
Manoj -
Dynamic Queues using JMS Adapter - Possible?
Can anyone advise if its possible to dynamically set the JMS Queue DestinationName at runtime when using the JMS Adapter?
My guess is not, but I thought I'd ask anyway...
DennisHi Dennis,
Did u get a solution for this.
Even i have a same scenario where i have to select the destination queue dynamically.
Any help in this regards...
Regards
Ashwini -
Possibility of dynamic MQ queue selection in one receiver JMS channel
Hi all,
I just want to ask whether it's possible in PI7.0 or PI7.1 to send a message dynamically to MQ queues based on payload information using a single JMS receiver channel.
Example:
1)
If the XML looks like this:
<element>param_1</element>
Then JMS receiver channel "RCV_JMS_1" should send the message to MQ queue "MQ_param_1".
2)
If the XML looks like this:
<element>param_2</element>
Then JMS receiver channel "RCV_JMS_1" should send the message to MQ queue "MQ_param_2".
Is that doable? If yes how (by using some module in the channel)?
Thanks in advance for your help!
Regards,
KaiYeah... cause such a scenario is not so hard to image. Just the possibility to giva a placeholder as value for MQ queue name in the channel would be sufficient and to assign a value at runtime to it.
At the moment the implementation is like this:
PI => static MQ wueue => own Java developed small adapter (JBoss) => dynamical MQ queue addressing
But a change here would be nice to have it all in PI.
Only option I see at the moment is to integrate the Java development into PI based on PCK. Or is there any alternative?
Edited by: Kai Lerch-Baier on Mar 25, 2009 11:02 AM -
Correlation for JMS Messages possible? JMSCorrID in JMSHeader not accepted
Is Correlation for communication over JMS messages possible?
If I define the JMSHeader field "JMSCorrelationID" in a correlation set ("as usual") then I get
compiler errors:
Error ORABPEL-10036: invalid correlation set
BPEL seems not to accept JMSHeader fields for correlation but only fields from the actual payload msg.
Is this true?
Is there soemwhere a guide on how to correlate JMS messages?
Thank you
Michaelyou can use the "Message Selector" on the JMS adapter to filter to achieve that;
here is extract from oracle help document
Message Selector
Specify filtering logic that enables you to receive messages that match a certain criteria. Enter an expression between 1 and 255 characters in length. Use SQL92 syntax in this field. The JMS server uses this criteria to filter messages received by this consumer. The message selector works with variables defined in standard JMS headers and user-defined properties. You cannot use variables or elements that are in the payload of the message.
For example, you can enter logic such as: JMSPriority > 3. Based on this, messages with a priority greater than 3 are consumed; all other messages are rejected. JMSType = 'car' AND color = 'blue' AND weight > 2500 Country in ('UK', 'US', 'France')
it's got some limitations but works fine for our requirements so far... -
Send file at JMS without PI, is it possible ?
Hi expert,
in my system there's not PI, is it possible to send file on JMS ? How can I do it ?
tks a lotIt is better write in the system from where you want to send the file.
>Can I solve this problem if I store the file in the sap directories, and JMS come inside sap directory to read the file ?
Do you mean JMS server has to read the file data. No, that is not possible.
JMS server concept is, we have to push/pull data using some JMS client.
Thanks,
- Gujjeti.
Edited by: Praveen Gujjeti on Mar 19, 2009 3:44 PM -
JMS MDB manual rollback possible ?
Hi,
I want to know if it's possible to manually roll back a message if something goes wrong ?
I have a Message Driven Bean that receives a message and sends it over http to another component. Now I want to make sure that my message isn't lost. So in case of an http timeout I want the message to be put back on the queue in front of following messages.
As I read before, a message is removed from its JMS Queue in case the onMessage method of the bean completes, so in my code
public void onMessage(Message message){
try{
//send message over http
}catch(Exception e){
//this is where I want the message to be roll-backed
As it is now, if there is an http timeout, an axception will be catched, but the onmessage method will still be executed successfully, and the message will be removed from the queue, result, a loss of the message.
is this possible with standard jms ?
kind regards
BertIt is certainly possible, but it depends on how your application is working.
if you are working with beans: No problem, just set the MessageDrivenContext.SetRollBackOnly() -> rolls back the transaction! (in case of Container managed transaction), if you are using your own transactions, simply roll them back your self.
If you are not using beans, you simply do not acknowledge your message, for JMS a message needs to be acknowledged before it assumes that it is delivered. So set your ACK_MODE to CLIENT_ACKNOWLEDGE and in case of an exception do not acknowledge it, otherwise, do acknowledge it.
Since you are using a MDB the first solution should be used in your case. -
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.2900.2627" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT face=Arial size=2>I am getting these error after changing table space
size for my database ...</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>I made changes in Database side for table space and
restart server.. </FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face="Courier New" size=2><Jun 7, 2005 3:44:44 PM EDT>
<Info> <JMS> <BEA-040321> <JMSServer "ss1 JMS Server" is
resuming.><BR><Jun 7, 2005 3:44:45 PM EDT> <Alert> <JMS>
<BEA-040052> <JMSServer "ss1 JMS Server" store failed to open
java.io.StreamCorrup<BR>tedException: Unsupported class version 2.
Expected a value between 1 and 1 inclusive. Possible attempt to access
newer JMS<BR> version then current
version..<BR>java.io.StreamCorruptedException: Unsupported class version
2. Expected a value between 1 and 1 inclusive. Possible
attempt<BR> to access newer JMS version then current
version.<BR> at
weblogic.jms.common.JMSUtilities.versionIOException(JMSUtilities.java:111)<BR>
at
weblogic.jms.store.JDBCIOStream.open(JDBCIOStream.java:438)<BR>
at
weblogic.jms.store.JMSStore.open(JMSStore.java:224)<BR>
at
weblogic.jms.backend.BEStore.open(BEStore.java:262)<BR>
at
weblogic.jms.backend.BEStore.start(BEStore.java:151)<BR>
at
weblogic.jms.backend.BackEnd.openStores(BackEnd.java:1171)<BR>
at
weblogic.jms.backend.BackEnd.resume(BackEnd.java:1290)<BR>
at
weblogic.jms.JMSService.addJMSServer(JMSService.java:2241)<BR>
at
weblogic.jms.JMSService.addDeployment(JMSService.java:2012)<BR>
at
weblogic.management.mbeans.custom.DeploymentTarget.addDeployment(DeploymentTarget.java:330)<BR>
at
weblogic.management.mbeans.custom.DeploymentTarget.addDeployments(DeploymentTarget.java:590)<BR>
at
weblogic.management.mbeans.custom.DeploymentTarget.updateServerDeployments(DeploymentTarget.java:568)<BR>
at
weblogic.management.mbeans.custom.DeploymentTarget.updateDeployments(DeploymentTarget.java:240)<BR>
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)<BR> at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<BR>
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<BR>
at
java.lang.reflect.Method.invoke(Method.java:324)<BR>
at
weblogic.management.internal.DynamicMBeanImpl.invokeLocally(DynamicMBeanImpl.java:711)<BR>
at
weblogic.management.internal.DynamicMBeanImpl.invoke(DynamicMBeanImpl.java:690)<BR>
at
weblogic.management.internal.ConfigurationMBeanImpl.invoke(ConfigurationMBeanImpl.java:476)<BR>
at
com.sun.management.jmx.MBeanServerImpl.invoke(MBeanServerImpl.java:1557)<BR>
at
com.sun.management.jmx.MBeanServerImpl.invoke(MBeanServerImpl.java:1525)<BR>
at
weblogic.management.internal.RemoteMBeanServerImpl.private_invoke(RemoteMBeanServerImpl.java:947)<BR>
at
weblogic.management.internal.RemoteMBeanServerImpl.invoke(RemoteMBeanServerImpl.java:908)<BR>
at weblogic.management.internal.MBeanProxy.invoke</FONT></DIV></BODY></HTML>Hi
I am also getting the similar error when I restart the server and my JMSSTORE table has some records, Here is the exception I am getting
java.io.StreamCorruptedException: Unknown object stream version. 5505025
at weblogic.jms.store.BufferDataInputStream.readObject(BufferDataInputStream.java:167)
at weblogic.jms.store.JDBCIOStream.doRecoverBodies(JDBCIOStream.java:979)
at weblogic.jms.store.JDBCIOStream.doRecover(JDBCIOStream.java:871)
at weblogic.jms.store.JDBCIOStream.recover(JDBCIOStream.java:1090)
at weblogic.jms.store.JMSStore.recover(JMSStore.java:315)
at weblogic.jms.backend.BEStore.open(BEStore.java:264)
at weblogic.jms.backend.BEStore.start(BEStore.java:151)
at weblogic.jms.backend.BackEnd.openStores(BackEnd.java:1171)
at weblogic.jms.backend.BackEnd.resume(BackEnd.java:1290)
at weblogic.jms.JMSService.addJMSServer(JMSService.java:2241)
at weblogic.jms.JMSService.addDeployment(JMSService.java:2012)
at weblogic.management.mbeans.custom.DeploymentTarget.addDeployment(DeploymentTarget.java:331)
at weblogic.management.mbeans.custom.DeploymentTarget.addDeployments(DeploymentTarget.java:591)
at weblogic.management.mbeans.custom.DeploymentTarget.updateServerDeployments(DeploymentTarget.java:569)
at weblogic.management.mbeans.custom.DeploymentTarget.updateDeployments(DeploymentTarget.java:241)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at weblogic.management.internal.DynamicMBeanImpl.invokeLocally(DynamicMBeanImpl.java:731)
at weblogic.management.internal.DynamicMBeanImpl.invoke(DynamicMBeanImpl.java:710)
at weblogic.management.internal.ConfigurationMBeanImpl.invoke(ConfigurationMBeanImpl.java:484)
at com.sun.management.jmx.MBeanServerImpl.invoke(MBeanServerImpl.java:1557)
at com.sun.management.jmx.MBeanServerImpl.invoke(MBeanServerImpl.java:1525)
at weblogic.management.internal.RemoteMBeanServerImpl.private_invoke(RemoteMBeanServerImpl.java:985)
at weblogic.management.internal.RemoteMBeanServerImpl.invoke(RemoteMBeanServerImpl.java:943)
at weblogic.management.internal.MBeanProxy.invoke(MBeanProxy.java:946)
at weblogic.management.internal.MBeanProxy.invokeForCachingStub(MBeanProxy.java:481)
at weblogic.management.configuration.ServerMBean_Stub.updateDeployments(ServerMBean_Stub.java:7351)
at weblogic.management.deploy.slave.SlaveDeployer.updateServerDeployments(SlaveDeployer.java:1304)
at weblogic.management.deploy.slave.SlaveDeployer.resume(SlaveDeployer.java:347)
at weblogic.management.deploy.DeploymentManagerServerLifeCycleImpl.resume(DeploymentManagerServerLifeCycleImpl.java:229)
at weblogic.t3.srvr.SubsystemManager.resume(SubsystemManager.java:131)
at weblogic.t3.srvr.T3Srvr.resume(T3Srvr.java:966)
at weblogic.t3.srvr.T3Srvr.run(T3Srvr.java:361)
at weblogic.Server.main(Server.java:32) -
Tuxedo--Elink---mqseries----Jms---Wls : Is it possible???
Hi all,
I have to post again a question about Tuxedo-WLS communication. Unfortunately
the architecture we use is AIX so Weblogic Tuxedo Connector cannot be used. I
thought about another possible solution: that is, contacting the AIX machine using
MQSeries (via Bea eLinkAdapter for MQSeries) and in turn invoking WLS via JMS.
Yes it's a bit troublesome but I'd like to know if this could be an alternative......what
do you think?
Thanks
FrancescoFransesco,
WTC is an integral part of WLS 6.1 and higher, and is thereore (as far as I am
aware) supported on all the platforms that WLS 6.1 is, so it should run just
fine on AIX.
Regards,
Peter.
Got a Question? Ask BEA at http://askbea.bea.com
The views expressed in this posting are solely those of the author, and BEA
Systems, Inc. does not endorse any of these views.
BEA Systems, Inc. is not responsible for the accuracy or completeness of the
information provided
and assumes no duty to correct, expand upon, delete or update any of the
information contained in this posting.
Francesco wrote:
Hi all,
I have to post again a question about Tuxedo-WLS communication. Unfortunately
the architecture we use is AIX so Weblogic Tuxedo Connector cannot be used. I
thought about another possible solution: that is, contacting the AIX machine using
MQSeries (via Bea eLinkAdapter for MQSeries) and in turn invoking WLS via JMS.
Yes it's a bit troublesome but I'd like to know if this could be an alternative......what
do you think?
Thanks
Francesco -
JDBC, JMS and EJB transactions - possible problem?
Hello,
I am using Oracle 9, Weblogic 8.1 SP 4, MyEclipse and
XDoclet.
In my current project I have the following piece of code
in one of my message driven beans (code cited as pseudocode
without unnecessary details):
* @ejb.bean name="MyMessageProcessor"
* display-name="Display name for a MyMessageProcessor"
* jndi-name="ejb/MyMessageProcessor"
* description="Bean MyMessageProcessor"
* destination-type="javax.jms.Queue"
* transaction-type="Container"
* acknowledge-mode="Auto-acknowledge"
* subscription-durability="Durable"
* generate="false"
* @ejb.transaction type="Required"
public class MyMessageProcessor implements MessageDrivenBean, MessageListener {
public void onMessage(Message msg) {
try {
//obtaining connections to two different databases via JNDi
java.sql.Connection connOne =
((DataSource)ctx.lookup("DataSourceOne")).getConnection();
java.sql.Connection connTwo =
((DataSource)ctx.lookup("DataSourceTwo")).getConnection();
// performing some UPDATEs and INSERTs on connOne and connTwo
// calling some other methods of this bean
//creating the reply JMS message and sending it to another JMS queue
Message msgTwo = this.createReplyMessage(msg)
this.queueSender.send(msgTwo);
//commiting everything
this.queueSession.commit();
} catch (Exception ex) {
try {
if (this.queueSession!=null) this.queueSession.rollback();
} catch (JMSException JMSEx) {};
this.context.setRollbackOnly();
Some days ago (before the final remarks from my client) there used to be only one DataSource configurated on the basis of the
connection pool with non-XA jdbc driver. Everything worked fine
including the transactions (if anything wrong happend not only wasn't the replymessage sent, but also no changes were written
to database and the incomming message was thrown back to the my bean's
queue).
When I deployed the second DataSource I was informed by an error message, that only one non-transactional resource may
participate in a global transaction. When I changed both datasources
to depend on underlying datasources with transatcional (XA) jdbc drivers, everything stopped working. Even if
EJB transaction was theoretically successfully rolledbacked, the changed were written to the database
and the JMS message wasn't resent to the JMS queue.
So here are my questions:
1. How to configure connection pools to work in such situations? What JDBC drivers should I choose?
Are there any global server configurations, which may influence this situation?
2. Which jdbc drivers should I choose so that the container was able to rollback the database transactions
(of course, if necessary)?
3. Are there any JMS Queue settings, which would disable the container to send message back to the
queue in case of setRollbackOnly()? How should be the Queue configurated?
As I am new to the topic and the deadline for the project seems to be too close I would be grateful
for any help.
This message was sent to EJB list and JDBC list.
Sincerely yours,
Marcin ZakidalskiHi,
I found these information extremely useful and helpful.
The seperate transaction for sending messages was, of course, unintentional. Thanks a lot.
Anyway, I still have some problems. I have made some changes to the
code cited in my previous mail. These changes included changing QueueSessions
to non-transactional. I also set the "Honorate global transactions" to true.
I am using XA JDBC driver. After setting "Enable local transactions" to false
(I did it, because I assume that JDBC transactions should be part on the global
EJB transaction) I got the following error:
java.sql.SQLException: SQL operations are not allowed with no global transaction by default for XA drivers. If the XA
driver supports performing SQL operations with no global transaction, explicitly allow it by setting
"SupportsLocalTransaction" JDBC connection pool property to true. In this case, also remember to complete the local
transaction before using the connection again for global transaction, else a XAER_OUTSIDE XAException may result. To
complete a local transaction, you can either set auto commit to true or call Connection.commit() or Connection.rollback().
I have also inspected the calls of methods of bean inside of onMessage() method just to check, whether
the transactions are correctly initialized (using the weblogic.transaction.Transaction class).
My questions are as follows:
1. Any suggestions how to solve it? I have gone through the google answers on that problem and only
thing I managed to realize that JDBC must start its own transaction. Is there any way to prohibit it
from doing that? Can using setAutocommit(true/false) change the situation for better?
2. How to encourage the JDBC driver to be a part of EJB transaction?
3. As I have noticed each of ejb method has its own transactions (transactions have different
Xid). Each method of the bean has "required" transaction attribute. Shouldn't it work in such
way that if already started transaction exists it is used by the called method?
4. The DataSources are obtained in my application via JNDI and in the destination environment I will have slight
impact on the configuration of WebLogic. What is least problematic and most common WebLogic configuration which would
enable JDBC driver to participate in the EJB transaction? Is it the WebLogic configuration problem or can it be
solved programmically?
Currently my module works quite fine when "enable local transactions" for DataSources is set to true, but this way
I am loosing the ability to perform all actions in one transaction.
Any suggestions / hints are more than welcomed. This message was posted to jdbc list and ejb list.
Marcin
Maybe you are looking for
-
Photoshop cc print dialog box image dark
I'm on a MacBook Pro running Mt. Lion with PS CC, an Eizo monitor, printing with an Epson 3880, calibrated and profiled with a ColorMunki. When I preview an image to print, the image is darker in preview, and the color is much different than the actu
-
I am receiving the following error messages when I attempt to access a form that invokes the Client_host and Client_text_io commands: Downloading http:/uranus:7778/forms90/webutil/webutil.jar to JAR cache Downloading http:/uranus:7778/forms90/webutil
-
Can someone help me with screen locks?
i put a screen lock on my ipod and i forgot the password. i tried charging it on my computer but it does nothing. someone plz help!!! Windows XP Windows XP Windows XP
-
If I've created a fillable form pdf, what is the best way to publish the form online? I'm using Adobe Acrobat 7.0 Professional and am wondering if I need a different program, such as LiveCycle to get the form online. I see how you can distribute the
-
Username: tulip_tears Subscription: China 400mins Should be renewed on 2nd of Dcember 2011 Today's date: 3rd of December 2011 Not working so far. Email address: [email protected] Thanks