2017-09-13 4 views
1

Est-il possible de modifier le schéma par défaut d'une source de données WebSphere lors de l'exécution?Modification du schéma WebSphere dataSource au moment de l'exécution

Par exemple, je les jndi suivantes configuré comme:

<jee:jndi-lookup id="dataSource" jndi-name="jdbc/test" lookup-on-startup="true" resource-ref="true" /> 

Dans mon ibm-web-bnd.xml:

<resource-ref name="jdbc/test" binding-name="jdbc/test" id="TEST_db"/> 

Dans mon ibm-web-ext.xml:

<resource-ref name="jdbc/test" connection-management-policy="DEFAULT" isolation-level="TRANSACTION_READ_COMMITTED" id="TEST_db"/> 

I créé une enveloppe pour la source de données, le haricot défini comme suit:

<bean id="schemaAwareDataSource" class="com.util.SchemaAwareDataSource" > 
    <property name="dataSource" ref="dataSource" /> 
    <property name="schemaValue" value="${modifiableSchema}" /> 
</bean> 

Et la classe ressemble à:

public class SchemaAwareDataSource implements DataSource { 

    private DataSource dataSource; 
    private String schemaValue; 

    @Override 
    public Connection getConnection() throws SQLException { 

     if(dataSource.getConnection().getSchema().equals(schemaValue)) { 
      return dataSource.getConnection(); 
     } 

     dataSource.getConnection().setSchema(schemaValue); 
     return dataSource.getConnection();  
    } 

    //other implemented methods not shown 
} 

Toutefois, ce jette un java.sql.SQLFeatureNotSupportedException erreur lorsque l'application démarre et appelle dataSource.getConnection().getSchema() dans le getConnection() inmy classe wrapper.

Lorsque déboguer la méthode getConnection(), dataSource est un com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource objet.

Y at-il de toute façon que je puisse accomplir ce que j'essaye de faire ici? Je veux être en mesure de modifier la valeur du schéma lors de l'appel à getConnection()

Répondre

1

SQLFeatureNotSupportedException est déclenché lorsque le pilote JDBC ou le niveau WebSphere Application Server (ou les deux) ne prennent pas en charge JDBC 4.1. Si vous utilisez WebSphere Application Server Liberty, vous devez activer la fonctionnalité jdbc-4.1 ou jdbc-4.2 au lieu de jdbc-4.0. Si vous utilisez WebSphere Application Server traditionnel, vous devez vous assurer que vous disposez d'une version suffisamment récente pour le support JDBC 4.1 (ou supérieur). Dans les deux cas, vérifiez que votre pilote JDBC est compatible JDBC 4.1 ou supérieur (en dehors du serveur d'applications) en invoquant connection.getMetaData(). GetJDBCMajorVersion et connection.getMetaData(). GetJDBCMinorVersion.

+1

En ajoutant, la seule version de WebSphere Application Server Traditional prenant en charge JDBC 4.1 est la version 9. –

+0

Ugh. Nous sommes seulement sur 8.5.5. Je suppose que ça ne marchera pas. –

+1

Non, vous ne pourrez pas le faire en utilisant les méthodes de schéma JDBC 4.1 get/set sur 8.5.5. Toutefois, selon la base de données que vous utilisez, vous pouvez utiliser une requête SQL pour obtenir et définir le schéma, ce qui vous permettrait de faire essentiellement la même chose. –