2009-01-23 8 views
1

Lors de la tentative de connexion à une base de données définie en lecture seule, la connexion ne peut pas être établie. Je reçois l'erreur suivante:Connexion à une base de données en lecture seule

Cannot create PoolableConnectionFactory (Io exception: The Network Adapter could not 
establish the connection) 

L'application doit fonctionner en mode lecture-écriture et gérer automatiquement le commutateur en lecture seule en contrôlant uniquement la propriété isReadOnly de l'objet de connexion. L'application s'exécute correctement lors de la connexion à une base de données en lecture-écriture, mais échoue lorsque je passe à la chaîne de connexion ci-dessous (avec les informations de sécurité supprimées). J'ai vérifié que la chaîne de connexion est correcte, donc le problème ne réside pas là. J'ai des difficultés à essayer de comprendre par où commencer à chercher.

ca.businesssolutions.nbs.jdbc.connect=jdbc:oracle:thin:unicorn_read_only/[email protected](DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=hostname)(PORT=9999)))(CONNECT_DATA=(SID=SBSBTST)(SERVER=DEDICATED))) 

J'ai hérité de l'application et je ne suis pas sûr que ce soit une limitation du cadre de printemps ou un autre paramètre qui me manque.

La configuration de ressort pour la source de données est:

<bean id="dataSource" class="ca.businesssolutions.nbs.server.base.datasource.MyBasicDataSource" 
     destroy-method="close"> 
    <!--url and driver class name are set through Configuratoin object.--> 
    <property name="initialSize" value="10"/> 
    <property name="maxActive" value="-1"/> 
    <property name="validationQuery" value="SELECT 1 FROM DUAL"/> 
    <property name="accessToUnderlyingConnectionAllowed" value="true"/> 
</bean> 

Le constructeur Source de données:

public MyBasicDataSource() { 
    super(); 
    setUrl(Configuration.get(Configuration.CONNECT)); 
    setDriverClassName(Configuration.get(Configuration.DRIVER_NAME)); 
    //The initial number of connections that are created when the pool is started. 
    int numConnections = 10; 
    try { 
     numConnections = Integer.parseInt(Configuration.get(Configuration.NUMBER_OF_CONNECTIONS)); 
    } catch (Exception exception) { 
     // Do nothing. 
    } 
    setInitialSize(numConnections); 
    //The maximum number of active connections that can be allocated from this pool at the same time, or non-positive for no limit. 
    setMaxActive(-1); 
    setValidationQuery("SELECT 1 FROM DUAL"); 
    setAccessToUnderlyingConnectionAllowed(true); 
    DataAccessObject.setDataSource(this); 
} 

Quoi d'autre aide?

Répondre

1

Quelle est la différence entre une chaîne de lecture/écriture et une chaîne de connexion en lecture seule? Y at-il une chance pour une faute de frappe? Avez-vous essayé cette chaîne de connexion d'un autre outil (mais du même hôte)? Essayez d'utiliser un outil graphique Java sur le même ordinateur que vous avez des difficultés à vous connecter. Utilisez Copier/Coller avec votre chaîne de connexion exacte.

Si cela ne fonctionne pas non plus, vous pouvez avoir un nom d'hôte non résoluble, des problèmes de pare-feu ou autre chose. Si cela fonctionne à partir du même ordinateur laisser un commentaire.

+0

Merci. J'ai trouvé la faute de frappe. C'était un nom d'hôte impossible à résoudre. – jgreep

Questions connexes