Desenvolvimento de Aplicativos: Aplicativos Clientes de Programação

Palavra-chave de Configuração CLI/ODBC OleDbReportIsLongForLongTypes

Descrição da Palavra-chave
Torna o sinalizador OLE DB LONGOS tipos de dados com DBCOLUMNFLAGS_ISLONG.
Sintaxe da Palavra-chave db2cli.ini:
OleDbReportIsLongForLongTypes = 0 | 1
Atributo de Instrução Equivalente:
SQL_ATTR_REPORT_ISLONG_FOR_LONGTYPES_OLEDB
Definição Padrão:
Tipos LONG (LONG VARCHAR, LONG VARCHAR FOR BIT DATA, LONG VARGRAPHIC e LONG VARGRAPHIC FOR BIT DATA) não têm o conjunto de sinalizadores DBCOLUMNFLAGS_ISLONG, que pode fazer com que as colunas sejam utilizadas na cláusula WHERE.
Notas de Uso:
 

O mecanismo do cursor de cliente do OLE DB e o CommandBuilder do OLE DB .NET Data Provider geram instruções de atualização e exclusão com base nas informações da coluna fornecidas pelo IBM DB2 OLE DB Provider. Se a instrução gerada contiver um tipo LONG na cláusula WHERE, a instrução irá falhar porque os tipos LONG não podem ser utilizados em uma pesquisa com um operador de igualdade. Definir a palavra-chave OleDbReportIsLongForLongTypes para 1 fará com que o IBM DB2 OLE DB Provider relate tipos LONG (LONG VARCHAR, LONG VARCHAR FOR BIT DATA, LONG VARGRAPHIC e LONG VARGRAPHIC FOR BIT DATA) com o conjunto de sinalizadores DBCOLUMNFLAGS_ISLONG. Isso impedirá que as colunas longas sejam utilizadas na cláusula WHERE.

Palavra-chave de Configuração CLI/ODBC OleDbSQLColumnsSortByOrdinal

Descrição da Palavra-chave
Faz o IDBSchemaRowset::GetRowset(DBSCHEMA_COLUMNS) do OLE DB retornar um conjunto de linhas classificadas pela coluna ORDINAL_POSITION.
Sintaxe da Palavra-chave db2cli.ini:
OleDbSQLColumnsSortByOrdinal = 0 | 1
Atributo de Instrução Equivalente:
SQL_ATTR_SQLCOLUMNS_SORT_BY_ORDINAL_OLEDB
Definição Padrão:
IDBSchemaRowset::GetRowset(DBSCHEMA_COLUMNS) retorna o conjunto de linhas classificado pelas colunas TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME.
Notas de Uso:
 

A especificação OLE DB da Microsoft requer que IDBSchemaRowset::GetRowset(DBSCHEMA_COLUMNS) retorne o conjunto de linhas classificado pelas colunas TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME. O IBM DB2 OLE DB Provider está de acordo com a especificação. Porém, os aplicativos que utilizam o provedor Microsoft ODBC Bridge (MSDASQL) foram tipicamente codificados para obter o conjunto de linhas classificado pelo ORDINAL_POSITION. Definir a palavra-chave OleDbSQLColumnsSortByOrdinal para 1 fará com que o provedor retorne um conjunto de linhas classificado pelo ORDINAL_POSITION.

Grupo de Propriedades do DB2 Data Source para o IBM DB2 OLE DB Provider

O IBM DB2 OLE DB Provider incluiu um novo grupo de propriedade: DB2 Data Source. O conjunto de propriedades para DB2 Data Source é DBPROPSET_DB2DATASOURCE.

O GUID para o conjunto de propriedades é {0x8a80412a,0x7d94,0x4fec,{0x87,0x3e,0x6c,0xd1,0xcd,0x42,0x0d,0xcd}}

DBPROPSET_DB2DATASOURCE tem três propriedades:

DB2PROP_REPORTISLONGFORLONGTYPES

#define DB2PROP_REPORTISLONGFORLONGTYPES 4
Grupo de propriedades: DB2 Data Source
Conjunto de propriedades: DB2PROPSET_DATASOURCE
Tipo: VT_BOOL
R/W típico: R/W
Descrição: Relata IsLong para Tipos Longos

O mecanismo do cursor de cliente do OLE DB e o CommandBuilder do OLE DB .NET Data Provider geram instruções de atualização e exclusão com base nas informações da coluna fornecidas pelo IBM DB2 OLE DB Provider. Se a instrução gerada contiver um tipo LONG na cláusula WHERE, a instrução irá falhar porque os tipos LONG não podem ser utilizados em uma pesquisa com um operador de igualdade.

Tabela 17. Valores DB2PROP_REPORTISLONGFORLONGTYPES
Valores Significado
VARIANT_TRUE Fará com que o IBM DB2 OLE DB Provider relate tipos LONG (LONG VARCHAR, LONG VARCHAR FOR BIT DATA, LONG VARGRAPHIC e LONG VARGRAPHIC FOR BIT DATA) com o conjunto de sinalizadores DBCOLUMNFLAGS_ISLONG. Isso impedirá que as colunas longas sejam utilizadas na cláusula WHERE.
VARIANT_FALSE DBCOLUMNFLAGS_ISLONG não é definido para LONG VARCHAR, LONG VARCHAR FOR BIT DATA, LONG VARGRAPHIC e LONG VARGRAPHIC FOR BIT DATA. Este é o padrão.
DB2PROP_RETURNCHARASWCHAR

#define DB2PROP_RETURNCHARASWCHAR 2
Grupo de propriedades: DB2 Data Source
Conjunto de propriedades: DB2PROPSET_DATASOURCE
Tipo: VT_BOOL
R/W típico: R/W
Descrição: Retornar Char como WChar

Tabela 18. Valores DB2PROP_RETURNCHARASWCHAR
Valores Significado
VARIANT_TRUE OLE DB descreve colunas do tipo CHAR, VARCHAR, LONG VARCHAR ou CLOB como DBTYPE_WSTR. A página de códigos de dados implicada em ISequentialStream será UCS-2. Este é o padrão.
VARIANT_FALSE OLE DB descreve colunas do tipo CHAR, VARCHAR, LONG VARCHAR ou CLOB como DBTYPE_STR. A página de códigos de dados implicada em ISequentialStream será a página de códigos local do cliente.
DB2PROP_SORTBYORDINAL

#define DB2PROP_SORTBYORDINAL 3
Grupo de propriedades: DB2 Data Source
Conjunto de propriedades: DB2PROPSET_DATASOURCE
Tipo: VT_BOOL
R/W típico: R/W
Descrição: Classificar Por Ordinal

A especificação OLE DB da Microsoft requer que IDBSchemaRowset::GetRowset(DBSCHEMA_COLUMNS) retorne o conjunto de linhas classificado pelas colunas TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME. O IBM DB2 OLE DB Provider está de acordo com a especificação. Porém, os aplicativos que utilizam o provedor Microsoft ODBC Bridge (MSDASQL) foram tipicamente codificados para obter o conjunto de linhas classificado pelo ORDINAL_POSITION.

Tabela 19. Valores DB2PROP_SORTBYORDINAL
Valores Significado
VARIANT_TRUE Fará com que o provedor retorne um conjunto de linhas classificado pelo ORDINAL_POSITION.
VARIANT_FALSE Fará com que o provedor retorne um conjunto de linhas classificado pelo TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME. Este é o padrão.

Sintaxe de URL Incorreto no Diagrama de Sintaxe DB2Binder

No tópico "Instalando o Driver JDBC do DB2 Universal", o diagrama de sintaxe DB2Binder define incorretamente a sintaxe de URL para o Driver JDBC do DB2 Universal. A representação correta da sintaxe de URL para DB2Binder é mostrada no diagrama a seguir:

Sintaxe DB2Binder
Ler diagrama de sintaxeManter visual do diagrama de sintaxe>>-java--com.ibm.db2.jcc.DB2Binder------------------------------>

>---url jdbc:db2://server-+----------+-/database---------------->
                          '-:--ports-'

>---user user-ID---password password--+---------------+--------->
                                      '--size integer-'

>--+-----------------------------+------------------------------>
   '--collection collection-name-'

>--+-------------------------------+--+-------+----------------><
   |              .-,------------. |  '--help-'
   |              V              | |
   '--tracelevel ---trace-option-+-'

Reencaminhando Clientes do Driver JDBC do DB2 Universal

O recurso de reencaminhamento de cliente automático no DB2 UDB (Universal Database) para Linux, UNIX, e Windows permite que os aplicativos clientes se recuperem de uma perda de comunicação com o servidor para que eles possam continuar a funcionar com interrupção mínima.

Sempre que um servidor trava, cada cliente conectado a ele recebe um erro de comunicação, que encerra a conexão e resulta em um erro de aplicativo. Quando a disponibilidade é importante, você deve ter uma configuração redundante e suporte a failover. (Failover é a capacidade de um servidor de tomar o controle de operações quando outro servidor falha). Em qualquer caso, o cliente do driver JDBC do DB2 Universal tenta restabelecer a conexão com um novo servidor ou com o servidor original, que pode estar em execução em um nó de failover. Quando a conexão é restabelecida, o aplicativo recebe uma SQLException que o informa sobre o defeito da transação, mas o aplicativo pode continuar com a próxima transação.

Restrições

Procedimento

Depois que o administrador de banco de dados especifica a localização do servidor alternativo em um banco de dados particular na instância do servidor, as localizações do servidor principal e do alternativo serão retornadas ao cliente no momento da conexão. O driver JDBC do DB2 Universal cria uma instância do objeto Referenciável DB2ClientRerouteServerList e armazena essa instância em sua memória temporária. Se a comunicação for perdida, o driver JDBC do DB2 Universal tentará restabelecer a conexão utilizando as informações do servidor retornadas do servidor.

A propriedade clientRerouteServerListJNDIName DataSource fornece suporte adicional de reencaminhamento de cliente no cliente; clientRerouteServerListJNDIName tem duas funções:

O clientRerouteServerListJNDIName identifica uma referência JNDI a uma instância DB2ClientRerouteServerList em um repositório JNDI para informações do servidor alternativo. Depois de uma conexão bem-sucedida com o servidor principal, as informações do servidor alternativo que são fornecidas pelo clientRerouteServerListJNDIName são sobrescritas pelas informações do servidor. O driver JDBC do DB2 Universal tentará propagar as informações atualizadas para o armazenamento de JNDI depois de um failover se a propriedade clientRerouteServerListJNDIName for definida. Se clientRerouteServerListJNDIName for especificada, as informações do servidor principal especificadas no DB2ClientRerouteServerList serão utilizadas para conexão. Se o servidor principal não for especificado, as informações serverName especificadas sobre a origem de dados serão utilizadas.

DB2ClientRerouteServerList é um bean Java serializável com quatro propriedades:

São fornecidos os métodos getter e setter para acessar essas propriedades. A definição da classe DB2ClientRerouteServerList é a seguinte:

package com.ibm.db2.jcc;
public class DB2ClientRerouteServerList
  implements java.io.Serializable,
  javax.naming.Referenceable
{
  public String[] alternateServerName;
  public synchronized void
    setAlternateServerName(String[] alternateServer);
  public String[] getAlternateServerName();
  public int[] alternatePortNumber;
  public synchronized void
    setAlternatePortNumber(int[] alternatePortNumberList);
  public int[] getAlternatePortNumber();
  
  public synchronized void
    setPrimaryServerName (String primaryServerName);
  public String getPrimaryServerName ();
  public synchronized void setPrimaryPortNumber (int primaryPortNumber)
  public int getPrimaryPortNumber ();
}

Uma conexão de failover estabelecida recentemente é configurada com as propriedades da origem de dados originais, exceto para o nome do servidor e o número da porta. Além disso, quaisquer registros especiais do DB2 UDB modificados durante a conexão original são restabelecidos na conexão de failover pelo driver JDBC do DB2 Universal Driver.

Quando ocorre um defeito de comunicação, o driver JDBC do DB2 Universal primeiro tenta a recuperação para o servidor principal. Se isso falhar, o driver tentará se conectar à localização alternativa (failover). Depois que uma conexão é restabelecida, o driver lança uma java.sql.SQLException para o aplicativo com SQLCODE -4498, para indicar ao aplicativo que a conexão com o servidor alternativo foi automaticamente restabelecida. O aplicativo pode então tentar novamente sua transação.

Procedimento para Tornar o DB2ClientRerouteServerList Persistente

Para configurar o armazenamento para tornar o DB2ClientRerouteServerList persistente, siga essas etapas:

  1. Crie uma instância de DB2ClientRerouteServerList e ligue essa instância ao registro JNDI. Por exemplo:
    // Criar um contexto inicial para operações de nomenclatura
    InitialContext registry = new InitialContext();
    // Criar um objeto DB2ClientRerouteServerList
    DB2ClientRerouteServerList address=new DB2ClientRerouteServerList();
    
    // Definir o número da porta e o nome do servidor para o servidor principal
    address.setPrimaryPortNumber(50000);
    address.setPrimaryServerName("mvs1.sj.ibm.com");
    
    // Definir o número da porta e o nome do servidor para o servidor alternativo
    int[] port = {50002};
    String[] server = {"mvs3.sj.ibm.com"};
    address.setAlternatePortNumber(port);
    address.setAlternateServerName(server);
        
    registry.rebind("serverList", address);
    
  2. Designe o nome JNDI do objeto DB2ClientRerouteServerList para a propriedade de DataSource clientRerouteServerListJNDIName. Por exemplo:
    datasource.setClientRerouteServerListJNDIName("serverList");

Personalizando as Propriedades de Configuração do Driver JDBC do DB2 Universal

As propriedades de configuração do driver JDBC do DB2 Universal permitem definir valores de propriedades que têm escopo em todo o driver. Estas definições se aplicam a aplicativos e instâncias DataSource. Você pode alterar as definições sem precisar alterar o código fonte do aplicativo ou as características do DataSource.

Cada definição de propriedade de configuração do driver JDBC do DB2 Universal possui o seguinte formato:

property=value

Se a propriedade de configuração começar com db2.jcc.override, ela será aplicável a todas as conexões e substituirá qualquer propriedade Connection ou DataSource pelo mesmo nome de propriedade. Se a propriedade de configuração começar com db2.jcc ou com db2.jcc.default, o valor dela será um padrão. As definições da propriedade Connection ou DataSource substituem esse valor.

Procedimento

Para definir propriedades de configuração:

É possível definir as seguintes propriedades de configuração do driver JDBC do DB2 Universal. Todas as propriedades são opcionais.

db2.jcc.override.traceFile
Ativa o rastreio do driver JDBC do DB2 Universal para o código do driver Java e especifica o nome no qual os nomes de arquivos de rastreio são baseados.

Especifique um nome completo de arquivo para o valor da propriedade db2.jcc.override.traceFile.

A propriedade db2.jcc.override.traceFile substitui a propriedade traceFile para um objeto Connection ou DataSource.

Por exemplo, a especificação da seguinte definição para db2.jcc.override.traceFile ativa o rastreio do código Java do Driver JDBC do DB2 Universal para um arquivo denominado /SYSTEM/tmp/jdbctrace:

db2.jcc.override.traceFile=/SYSTEM/tmp/jdbctrace

É necessário definir as propriedades de rastreio de acordo com as instruções do Suporte ao Software IBM.

db2.jcc.sqljUncustomizedWarningOrException
Especifica a ação que o driver JDBC do DB2 Universal toma quando um aplicativo SQLJ não personalizado é executado. db2.jcc.sqljUncustomizedWarningOrException pode ter os seguintes valores:
0
O driver JDBC do DB2 Universal não gera um Aviso ou uma Exceção quando um aplicativo SQLJ não personalizado é executado. Este é o padrão.
1
O driver JDBC do DB2 Universal gera um Aviso quando um aplicativo SQLJ não personalizado é executado.
2
O driver JDBC do DB2 Universal gera uma Exceção quando um aplicativo SQLJ não personalizado é executado.

Função db2secFreeToken Removida

A função db2secFreeToken (Memória livre mantida retida por token) não faz mais parte da API do plug-in de autenticação do usuário db2secGssapiServerAuthFunctions_1.

Implementar Plug-ins de Segurança Personalizados Cuidadosamente

A integridade da instalação do DB2 UDB (Universal Database) poderá ser comprometida se a implementação dos plug-ins de segurança não for adequadamente codificada, revisada e testada. O DB2 UDB toma precauções contra muitos tipos comuns de defeitos, mas não pode garantir a integridade completa quando plug-ins de segurança gravados pelo usuário são implementados.

Plug-ins de Segurança

Se estiver utilizando seu próprio plug-in de segurança personalizado, você poderá utilizar um ID do usuário com até 255 caracteres em uma instrução connect emitida através do CLP ou uma instrução SQL dinâmica.

APIs de Plug-ins de Segurança

Para as APIs db2secGetGroupsForUser, db2secValidatePassword e db2secGetAuthIDs, o parâmetro de entrada, dbname, pode ser nulo e seu parâmetro de entrada de comprimento correspondente, dbnamelen, será definido como 0.

Convenções de Nomenclatura de Plug-in de Segurança (Linux e UNIX)

.so é, agora, aceito como uma extensão de nome de arquivo para bibliotecas de plug-in de segurança gravadas pelo usuário em todas as plataformas Linux e UNIX.

No AIX, as bibliotecas do plug-in de segurança podem ter uma extensão de .a ou .so. Se existirem as duas versões da biblioteca de plug-ins, será utilizada a versão .a.

Para HP-UX no PA-RISC, as bibliotecas de plug-ins de segurança podem ter uma extensão .sl ou .so. Se existirem as duas versões da biblioteca de plug-ins. será utilizada a versão .sl.

Em todas as outras plataformas Linux e UNIX, .so é a única extensão de nome de arquivo suportada para bibliotecas do plug-in de segurança.

Restrições para Bibliotecas de Plug-ins de Segurança

No AIX, as bibliotecas do plug-in de segurança podem ter uma extensão de nome de arquivo de .a ou .so. O mecanismo utilizado para carregar a biblioteca de plug-ins depende da extensão utilizada:

Bibliotecas de Plug-ins com uma Extensão de Nome de Arquivo .a
As bibliotecas de plug-ins com extensões de nomes de arquivos .a são considerada archives contendo membros de objetos compartilhados. Estes membros devem ser denominados shr.o (32 bits) ou shr64.o (64 bits). Um único archive pode conter os membros de 32 bits e de 64 bits, permitindo sua implementação nos dois tipos de plataformas.

Por exemplo, para construir uma biblioteca de plug-ins de estilo de archive de 32 bits:

  xlc_r -qmkshrobj -o shr.o MyPlugin.c -bE:MyPlugin.exp
  ar rv MyPlugin.a shr.o
Bibliotecas de plug-ins com uma extensão de nome de arquivo .so
As bibliotecas de plug-ins com extensões de nomes de arquivos .so são consideradas objetos compartilhados dinamicamente carregáveis. Tal objeto possui 32 ou 64 bits, dependendo das opções de compilador e de linker utilizadas durante sua construção. Por exemplo, para construir uma biblioteca de plug-ins de 32 bits:
  xlc_r -qmkshrobj -o MyPlugin.so MyPlugin.c -bE:MyPlugin.exp

Em todas as plataformas diferentes de AIX, as bibliotecas do plug-in de segurança são sempre consideradas objetos compartilhados dinamicamente carregáveis.

Os Plug-ins de Segurança GSS-API Não Suportam Autenticação de Vários Fluxos

A autenticação GSS-API é limitada a enviar fluxo de um token do cliente para o servidor e um token do servidor para o cliente. Esses tokens são obtidos de gss_init_sec_context() no cliente e de gss_accept_sec_context() no servidor. Os plug-ins GSS-API que estão tentando fluxos adicionais irão gerar um erro inesperado de plug-in de segurança, fazendo com que a conexão falhe.

Os Plug-ins de Segurança GSS-API Não Suportam Criptografia e Assinatura de Mensagens

A criptografia e a assinatura de mensagens não estão disponíveis em plug-ins de segurança GSS-API.

Encerramento Implícito de Transações em Aplicativos Independentes

Os encerramentos de aplicativos (normais e anormais) revertem implicitamente unidades de trabalho pendentes, independentemente do sistema operacional.

Suporte a Transações Distribuídas

Na documentação das novidades para o DB2 UDB (Universal Database) Versão 8.2, as informações de suporte à transação distribuídas para a seção de aprimoramentos do driver JDBC do DB2 Universal possuem informações incorretas. A última frase dessa seção está incorreta. As informações corretas são:

A partir da Versão 8.2, o DB2 UDB fornece suporte ao processamento de transações distribuídas que está de acordo com a especificação XA. Este suporte implementa as especificações do J2EE (Java 2 Platform, Enterprise Edition) JTS (Java Transaction Service) e JTA (Java Transaction API).

[ Início da Página |Página Anterior | Próxima Página | Índice ]