2010-09-30 21 views
3

Je rencontre un problème lors de l'obtention d'une connexion JDBC dans un EJB SessionBean. L'erreur est:Erreur lors de l'obtention de la connexion JDBC: Impossible d'inscrire dans la transaction lors de l'entrée de l'objet méta-conscient

org.jboss.util.NestedSQLException: Impossible d'inscrire dans la transaction lors de l'entrée de l'objet méta-conscient !; - imbriqué Throwable:. (Javax.transaction.SystemException: java.lang.Throwable: faire appel ressources désactivé, voir les avertissements précédents

Je pensais que cela arrive, parce que je l'ai déjà une connexion ouverte à partir d'une autre source de données, donc je configuré un XA source de données pour éviter les problèmes de transaction, mais il ne fonctionne pas du tout, donc je ne sais pas si je fais quelque chose de mal dans mon code voici:.

try 
    { 
     Properties p = new Properties(); 
     p.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory"); 
     p.put(Context.PROVIDER_URL,"jnp://localhost:11099"); 
     p.put("java.naming.factory.url.pkgs", "org.jboss.naming"); 

     InitialContext ic = new InitialContext(p); 

     DataSource dataSource = (DataSource)ic.lookup("java:/jdbc/etlreportservices"); 

     return dataSource.getConnection(); 
    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 

Le une exception est levée lors de l'appel au dataSource.getConnection()

+0

Votre EJB est-il associé à une transaction Anotation? –

+0

La transaction est gérée par le conteneur – rfders

+0

Merci tomás vous m'avez donné une idée, j'ai changé mon gestionnaire de transactions pour qu'il soit géré par bean et cela fonctionne parfaitement – rfders

Répondre

-3

J'ai changé mon gestionnaire de transactions pour être géré par le bean et cela fonctionne parfaitement.

+0

Ouais, mais comment?Cela ne m'a pas beaucoup aidé. Probablement la bonne réponse mais pas assez approfondie. –

1

Je l'ai remarqué dans les cas où le tx expire. FWIW.

0

En utilisant JBoss 6.0.0, le message d'erreur est légèrement différente:

Causée par: org.jboss.resource.JBossResourceException: N'a pas pu enrôler dans la transaction en entrant dans l'objet méta-aware!


Quant à la raison: Une citation de here

Dans le même processus, deux appels ont été faits à différentes sources de données non-XA. Ceci n'est pas supporté par défaut sur JBoss.

Le même site montre une solution qui n'était pas applicable à JBoss 6.0.0.


La solution générale est de changer toutes les sources de données impliquées dans la même transaction dans sources de données XA. Ensuite, il fonctionne à la fois avec bean géré et transactions gérées par conteneur. Par exemple, cette solution est proposée dans un CodeRanch et dans un JBoss forum également.

5

peut essayer, pour vieux Jboss-es: /server/all/conf/jbossjta-properties.xml

<properties depends="arjuna" name="jta"> 
    <property name="com.arjuna.ats.jta.allowMultipleLastResources" value="true"/> 
</properties> 

pour la nouvelle: autonome \ configuration \ standalone.xml (ou tout autre ce que vous utiliser)

<system-properties> 
    <property name="com.arjuna.ats.arjuna.allowMultipleLastResources" value="true"/> 
</system-properties>