Motor H2 Database é uma fonte aberta, multiplataforma e software gráfico livre implementado em Java e projetado para fornecer aos usuários uma API JDBC muito rápido que tem um console baseado em browser e deixa uma pegada muito pequena (cerca de 1 MB).
O aplicativo vem com um modo incorporado (bancos de dados em memória), que é mais rápido do que o modo cliente-servidor. Ele também possui suporte para bancos de dados criptografados, um ODBC (Open Database Connectivity) motorista, pesquisa de texto completo, assim como a versão multi concurrency.Features em uma características glanceKey incluem um motor de banco de dados muito rápido, suporte para SQL padrão e API JDBC, clustering suporte, opções de segurança poderosos, o suporte para o driver ODBC PostgreSQL, tabelas na memória, bancos de dados em memória, bancos de dados baseados em disco, tabelas baseadas em disco, tabelas temporárias, suporte para bancos de dados somente leitura, suporte a transações e nível de tabela de bloqueio.
Além disso, o software apresenta 2-phase commit apoio, otimizador baseado em custo, suporte para múltiplas conexões, suporte para conjuntos de resultados que são atualizáveis e rolagem, apoio para o resultado externo triagem, suporte para grandes conjuntos de resultados, o apoio à AES (Advanced Encryption Standard) bancos de dados criptografados, SSL (Secure Socket Layer) de apoio, bem como suporte para SHA-256 senhas criptografadas.
Entre outras características que merecem ser mencionados, podemos facilmente citar suporte para esquema de informações e vários esquemas, suporte agrupamento, suporte para funções e usuários, compressão de dados sem perdas, exterior e interior se junta, visões de inline, somente leitura vistas, subqueries, integridade referencial, cheque restrições, colunas de incremento automático, colunas computadas e banco de dados columns.Supported sequência serversCurrently, H2 Database Engine é compatível com o conhecido MySQL, PostgreSQL, IBM DB2, Apache Derby, Microsoft SQL Server, Oracle e HSQLDB servidores de banco / engines.Under o capô e apoiado operando systemsBeing escrito na linguagem de programação Java, o projeto H2 Database Engine é independente de plataforma e suporta qualquer sistema operacional onde o Java Runtime Environment (JRE) está disponível, incluindo GNU / Linux, Microsoft Windows, Mac OS X, Solaris e BSD
O que é novo nesta versão:.
- EXPLICAR estava incorreto para consultas com & quot; QUALQUER & quot; ou & quot; ALGUNS & quot; condições.
- CallableStatement com & quot; a & quot; parâmetros:. executando a mesma declaração duas vezes pode resultar em uma exceção (& quot; parâmetro não definido & quot;)
- As consultas união:. Linhas duplicadas poderia ser devolvido se as sub-consultas contidas & quot; por fim & quot;
- O tipo de dados GEOMETRIA agora trabalha para funções definidas pelo usuário, que retorna um conjunto de resultados.
- compatibilidade PostgreSQL:. A pgserver não estava funcionando corretamente quando o database_to_upper configuração foi definida como false
- JdbcDataSource: o setURL métodos e getUrl onde adicionado como apelidos para setURL e getURL. Isto deve resolver problemas com o (pool de conexão Hikari) HikariCP.
- Edição 537: H2 Console: ao carregar o esquema, incorreta chamadas JDBC onde emitido, o que causou a exceção & quot; precisão da coluna não encontrado & quot; .
- Melhoria processamento Geometry (edição 535).
- O agrupamento agora pode ser definida na URL do banco de dados, mesmo se não houver tabelas de dados, se a coleção é o mesmo que o agrupamento atual.
- Melhor compatibilidade Oracle para CASE WHEN e decodificar.
- A declaração de & quot; cair todos os objetos & quot; não funcionou se uma tabela depende de uma vista através de uma restrição.
- Subqueries ou exibições com & quot; de ordem por & quot; uma expressão alias não pôde ser executada devido a uma regressão introduzida na versão 1.3.174.
- Issue 73: compatibilidade MySQL:. Apoio REPLACE, remendo por Cemo Koc
- O índice espacial agora funciona em modo MVCC ao usar o armazenamento MVStore.
- MVStore: problemas de concorrência foram corrigidos. A API foi simplificada.
- Melhorar a mensagem de erro ao deixar cair um índice que pertence a uma restrição, especificar restrição na mensagem de erro.
- Edição 518: java.sql.Connection.commit () congela após a modificação LOB com conexão EXCLUSIVO
- Edição 517: criar ou substituir declaração vista não tem efeito sobre os outros já existentes conexão JDBC
- Suporte 123L sintaxe como em Java; exemplo:. SELECT (2000000000L * 2)
- Edição 520:. Adicionar suporte para o valor máximo seqüência, valor min e ciclo, penso por Daniel Gredler
- Edição 521: ScriptReader deve implementar closeable
- Edição 524:. RunScript.execute não fechar sua declaração, remendo da Gália
- Adicionar suporte para DB2 & quot; COM UR & quot; cláusula, patch da litailang
- Adicionado suporte para ON DUPLICATE KEY UPDATE como MySQL com os valores () função para atualizar com o valor que era para ser inserido. Remendo de Jean-Francois Noel.
- Edição 522:. Trate cadeias vazias como NULL no modo de compatibilidade Oracle, remendo por Daniel Gredler
- Edição 527: modo de compatibilidade Oracle:. Comportamento escala incorreta, remendo por Daniel Gredler
- Slightly reduzir o custo de memória de vista de metadados.
- Estender apoio de & quot; GRANT ALTER qualquer esquema para & quot; para permitir a capacidade de manipular donatário tabelas
- Edição 532: Javadoc para ErrorCode.ROLES_AND_RIGHT_CANNOT_BE_MIXED parece errado
- Edição 528: Adicionar função TO_CHAR Oracle compatível, remendo por Daniel Gredler .
- Edição 534: CREATE ALIAS NOCACHE, Patch por Nicolas Fortin
- Corrigir um problema com o armazenamento de pares substituto Unicode em colunas CLOB.
- consola H2: adicionar SHIFT + ENTER & quot; executar selecionado & quot; funcionalidade
- bug Fix na sintaxe & quot DB2; SELECT * FROM teste com ur & quot ;, patch da litailang
- Fix bug na queda de todos os objetos quando se lida com dependências inter-esquema.
O que é novo na versão 1.3.174:
- LIRs cache: bugfix para caches que contêm apenas não entradas -resident.
- Para in-memory, consultas com um & quot; grupo por & quot; coluna que também é um índice hash jogou uma RuntimeException.
- Melhoria da mensagem de erro para alguns erros de sintaxe.
- arquivo: se utilizado diretamente, alguns sistemas de arquivos não funciona correctamente com buffers de bytes emendado (o motor de banco de dados não usa aqueles) .
- Para usar o mecanismo de armazenamento MVStore (que ainda é um trabalho em andamento), acrescentar & quot ;; mv_store = true & quot; para o URL do banco. Usando o MVTableEngine ao criar a tabela não é mais recomendado.
- Para compilar funções definidas pelo usuário, o javax.tools.JavaCompiler agora é usado se estiver disponível, e não arquivos temporários são criados. Isto deve resolver problemas quando múltiplos bancos de dados H2 simultaneamente compilar as mesmas funções definidas pelo usuário. Para desativar, sistema a propriedade do sistema & quot; h2.javaSystemCompiler & quot; como falsa.
- Ao mesmo tempo criar aliases de funções em diferentes bancos de dados pode resultar em exceção & quot; javac:. Arquivo não encontrado & quot;
- A função & quot; regexp_replace & quot; jogou o tipo errado de exceção se o texto de substituição era inválido.
- Um ponto de verificação é feito agora cada MAX_LOG_SIZE / 2 em vez de cada MAX_LOG_SIZE, para que o log de transações não crescer tão grande.
- MVStore motor tabela: nova configuração & quot; retention_time & quot; para configurar o tempo de retenção de dados antigos. O padrão é 45 segundos.
- O método TableEngine.createTable () agora retorna um objeto Table.
- Para bancos de dados somente leitura, para o nível de rastreio & quot;. Debug & quot ;, a informação de rastreio será gravado no diretório Temp
- Fechando o bloqueio de arquivo agora vai esperar até a discussão de fundo está parado.
- Na versão 1.3.172, uma regressão desempenho foi introduzida aquando da fixação da questão 389 (quando não há uma chave primária multi-coluna, H2 não parecem escolher sempre o índice à direita). Esta foi relacionado para impulsionar um índice que combina com o & quot; por fim & quot; lista de colunas (o índice errado foi usada em alguns casos).
- índice espacial melhorado e tipo de dados.
- Edição 467:. OSGi Classe Loader (capacidade de criar referência à classe em outro carregador de classes, por exemplo, em um outro pacote OSGi)
- Consultas & quot; grupo de & quot; que contêm uma subconsulta com uma função de agregação devolveu o resultado errado em alguns casos.
- Fix bug em índices exclusivos e não exclusivos de hash que se manifestaram como resultados incorretos quando a chave de pesquisa foi um tipo cardeal diferente da chave índice da tabela. por exemplo onde um era INT eo outro era LONGO
- Bug:. As alterações na estrutura do banco de dados não resultou em cache de consultas Session sendo invalidados
- Novo recurso de Davide Cavestro -. Permitir o uso de motores de costume objeto Java serialização em uma base per-DB
- Ao executar a ferramenta Recuperar na muito grandes; bancos de dados (& gt 6G), algumas estatísticas foram relatados com números negativos .
- Adicione uma coluna CONTAINS_UNCOMMITTED à mesa de SESSIONS metadados, para permitir detectar quando as sessões desonestos estão criando grandes transações.
- Algumas pequenas correções para o suporte GEOMETRIA, manchas por Nicolas Fortin.
- A ferramenta BNF eo recurso de preenchimento automático são exportados em OSGi, o que torna possível para os editores inteligentes para fazer autocomplete. Remendo de Nicolas Fortin.
- Fix GOTA todos os objetos e DROP SCHEMA na presença de tabelas com as dependências de coluna computados.
- Session-temporária de LOB do poderiam às vezes se acumulam, aumentando o tamanho do arquivo DB até o desligamento. Agora, eles são vendidos a cada commit.
- Houve um erro em que um índice hash com mais de uma coluna seria silenciosamente convertido para um índice regular. Ele agora vai lançar uma exceção.
- Consulta Estatísticas: novo recurso que armazena os mais novos 100 consultas SQL executadas e seus dados de desempenho. Útil para rastrear mal executar consultas.
- Corrigir um impasse LOB entre leitura e atualização colunas LOB.
- Apoiar os JDBC DatabaseMetaData # getClientInfoProperties () método, no sentido de devolver um resultado vazio, a fim de fazer WebSphere feliz.
- Faça Servidor # openBrowser respeitar a variável de ambiente $ BROWSER. Adicionar & quot; cromo & quot; à lista de navegadores tentado. Patch da Felix Kaiser.
- Corrigir a org.h2.util.ScriptReader ao manipular blocos de comentários não fechadas.
- Faça org.h2.util.ScriptReader lançar uma exceção melhor ao manusear os scripts quebrados que geram declarações extremamente grandes.
- Fix bug com ALLOW_LITERALS = NONE, onde a analisar tabela periódica em insert iria lançar uma exceção. Um problema semelhante foi fixado na ferramenta Console.
- Edição 510: Tornar públicas org.h2.bnf para consumo por projetos externos, remendo por Nicolas Fortin
- Edição 509: correção Importante sobre ValueGeometry, remendo por Nicolas Fortin (com alguns ajustes) Faça ValueGeometry # getDimensionCount mais confiável. Adicionar teste de unidade para verificar se há comparação ilegal ValueGeometry Adicionar teste de unidade para a conversão de Geometry objeto em objeto Adicionar exportação opcional para manifest.mf para classes JTS Geometria validar que os valores de geometria pode ser representado em WKB.
- Edição 506: RFE: Incluir Thread.getName () no caso de um impasse
- Adicionar suporte para & quot; GRANT ALTER qualquer esquema para & quot ;, remendo por John Yates
Bancos de dados
Abstração do sistema
O que é novo na versão 1.3.173:
- Esta versão melhora o MySQL e PostgreSQL compatibilidade, melhora a mecanismo de armazenamento MVStore, e adiciona o novo tipo de dados & quot; geometria & quot; para dados espaciais.
O que é novo na versão 1.3.171:
- Segurança: o servidor TCP não restringiram o acesso corretamente direitos dos clientes em alguns casos. Este foi especialmente um problema ao usar a bandeira & quot; tcpAllowOthers & quot;.
- H2 Console:. O tempo limite da sessão pode agora ser configurado usando a propriedade do sistema & quot; h2.consoleTimeout & quot;
- Edição 431: Melhor compatibilidade com MySQL: suporte para o & quot; ENGINE = InnoDB charset = UTF8 & quot; ao criar uma tabela.
- Edição 249: melhor compatibilidade com MySQL no modo MySQL:. Agora, os métodos DatabaseMetaData métodos lojas * * Caso Identificadores retornar o mesmo como MySQL ao usar o modo MySQL
- Edição 434:. H2 Console não funciona no navegador Chrome devido a um argumento viewport errado
- Não havia a possibilidade de que o arquivo .lock.db não foi excluída quando o banco de dados foi fechada, o que poderia retardar a abertura do banco de dados.
- O script SQL gerado pelo & quot; roteiro & quot; comando contido novas linhas inconsistentes no Windows.
- Ao usar o nível de rastreio 4 (SLF4J) no modo de servidor, um diretório & quot; trace.db & quot; e um arquivo vazio foi criado no lado do cliente. Isto já não é feita.
- Optimize IN (...) consultas: havia um bug na versão 1.3.170 se o tipo do lado esquerdo não corresponder ao tipo do lado direito. Fixa.
- Optimize IN (...) consultas: havia um bug na versão 1.3.170 para comparação do tipo & quot; X IN (NULL, NULL) & quot ;. Fixa.
- Timestamps com fuso horário que foram passados como uma string nem sempre foram convertidos corretamente. Por exemplo & quot; 2012-11-06T23: 00: 00.000Z & quot; foi convertido para & quot; 2012/11/06 & quot; em vez de para & quot; 2012/11/07 & quot; no fuso horário CET. Muito obrigado a Steve Hruda para relatar o problema!
- Novo motor tabela & quot; org.h2.mvstore.db.MVTableEngine & quot; que utiliza internamente o MVStore para manter os dados. Para testá-lo, anexar & quot ;; DEFAULT_TABLE_ENGINE = org.h2.mvstore.db.MVTableEngine & quot; para o URL do banco. Isto ainda é muito experimental, e muitos recursos ainda não são suportados. Os dados são armazenados em um arquivo com o sufixo & quot; .mv.db & quot;.
- Nova definição de ligação & quot; DEFAULT_TABLE_ENGINE & quot; usar um motor de tabela específica, se nenhum é definido explicitamente. Este é simplificar ensaio, o motor tabela MVStore.
- MVStore: criptografado lojas são agora suportados. Somente algoritmos padronizados são utilizados:. PBKDF2, SHA-256, XTS-AES, AES-128
- MVStore:. API melhorada graças a Simo Tripodi
- MVStore:. Mapas agora podem ser renomeados
- MVStore:. Armazenar o ficheiro de cabeçalho também no fim de cada bloco, o que resulta num número mais reduzido de operações de escrita li>
- MVStore:. A implementação mapa que suporta operações simultâneas
- MVStore: manipulação de exceção unificado; a versão está incluída nas mensagens.
- MVStore:. De dados antigo agora são retidos por 45 segundos por padrão
- MVStore:. Compressa agora está desativado por padrão e pode ser ativado a pedido
- Suporte ALTER TABLE ADD ... depois. Patch da Andrew Gaul (argaul at gmail.com). Correções questão 401.
- Melhor suporte OSGi. H2 agora se registra como um serviço DataSourceFactory. Correções questão 365.
- Adicionar uma função do sistema DISK_SPACE_USED. Correções questão 270.
- Corrigir uma ambiguidade em tempo de compilação ao compilar com JDK7, graças a um patch da Lukas Eder.
- Apoio soltando um índice para Lucene índices de texto completo.
- O desempenho optimizado para SELECT ... ORDER BY X LIMIT deslocamento em Y Z consultas para bancos de dados em memória, usando tipo parcial (por Sergi Vladykin).
- Experimental motor off-heap de armazenamento de memória & quot; nioMemFS: & quot; e & quot; nioMemLZF:. & quot ;, sugestão de Mark Addleman
- Edição 438: JdbcDatabaseMetaData.getSchemas () não é mais suportado a partir de 1.3.169 .
- MySQL compatibilidade: suporte para ALTER TABLE tableName MODIFY [COLUMN] columnName columnDef. Patch da Ville Koskela.
- Edição 404:. MOSTRAR COLUNAS DE tableName não funciona com ALLOW_LITERALS = NÚMEROS
- lançar um erro explícita de deixar claro que não suportam a combinação TRIGGER de SELECT e para cada linha.
- Edição 439:. Utils.sortTopN se não lidar com matrizes de um único elemento
O que é novo na versão 1.3.170:
- Edição 407: O TriggerAdapter não trabalhar com CLOB e BLOB colunas.
- compatibilidade PostgreSQL:. Suporte para tipos de dados BIGSERIAL e SERIAL como um alias para AUTO_INCREMENT
- Edição 417: H2 Console: o tempo limite da sessão web não funcionou, resultando em um vazamento de memória. Este foi apenas um problema se o Console H2 foi executado por um longo tempo e muitas sessões foram abertas.
- Edição 412: A execução da ferramenta Server com apenas a opção & quot; -browser & quot; irá agora ligar um aviso.
- Edição 411:. Registro CloseWatcher não era simultaneidade-safe
- compatibilidade MySQL: suporte para CONCAT_WS. Thanks a lot para litailang para o patch!
- compatibilidade PostgreSQL: suporte para EXTRACT (SEMANA DE dateColumn). Graças a Prashant Bhat para o patch!
- Fix para um bug em que, às vezes, usar a restrição exclusiva errado para validar restrições de chave estrangeira.
- BOM Apoio no início de arquivos para o comando RUNSCRIPT
- Fix em chamar SETX = IDENTIDADE (), onde ele iria retornar NULL incorretamente
- Corrigir ABBA impasse entre adicionar uma restrição ea linha H2-Log-Writer.
- Optimize IN (...) consulta onde os valores são constantes e do mesmo tipo.
- ferramenta de restauração: o parâmetro & quot; tranquila & quot; não foi utilizado e agora é removido.
- Fix ConcurrentModificationException ao criar tabelas e executando SHOW TABLES em paralelo. Relatado por Viktor Voytovych.
- A serialização é agora pluggable usando a propriedade do sistema & quot; h2.javaObjectSerializer & quot ;. Graças a Sergi Vladykin para o patch!
O que é novo na versão 1.3.169:
- O arquivo jar padrão agora é compilado para Java 6 .
- O novo arquivo jar provavelmente não acabar no repositório central Maven nas próximas semanas porque Sonatype desabilitou a sincronização automática do SourceForge (que eles chamam de "sync legacy 'agora). Ainda vai levar algum tempo até que isso seja resolvido. Os arquivos jar H2 são implantados para http://h2database.com/m2-repo/com/h2database/h2/maven-metadata.xml e http://hsql.sourceforge.net/m2-repo/com/h2database/h2 /maven-metadata.xml como de costume.
- A parte da documentação e do Console H2 foi alterado para suportar a exibição retina Apple.
- A ferramenta CreateCluster não poderia ser usado se o banco de dados de fonte continha um CLOB ou BLOB. A causa principal foi a de que o servidor TCP não sincronizar sobre a sessão, o que causou um problema ao usar o modo exclusivo.
- Statement.getQueryTimeout (): somente a primeira chamada para este método irá consultar o banco de dados. Se o tempo limite consulta foi alterado em uma outra maneira de chamar setQueryTimeout, este método sempre retorna o último valor. Isto foi mudado porque Hibernate chama getQueryTimeout () muito.
- Edição 416: PreparedStatement.setNString lança AbstractMethodError. Todos implementadas JDBC 4 métodos que não quebram a compatibilidade com Java 5 estão agora incluídas no arquivo jar padrão.
- Edição 414: para algumas funções, os parâmetros foram avaliados duas vezes (por exemplo, & quot; char (nextval (..)) & quot; correu & quot; nextval (..) & quot; duas vezes) .
- Os métodos ResultSetMetaData getSchemaName e GetTableName poderia retornar nulo em vez de & quot; & quot; (Uma string vazia), conforme especificado na API JDBC.
- compatibilidade adicionada para & quot; SET NOMES & quot; consulta no modo de compatibilidade MySQL.
O que é novo na versão 1.3.168:
- A mensagem & quot; log de transações não poderia ser truncado & quot ; foi escrito às vezes para o arquivo .trace.db mesmo que não havia nenhum problema truncar o log de transações.
- New propriedade do sistema & quot; h2.serializeJavaObject & quot; (Default: true). Que permite desabilitar a serialização objetos Java, de modo que os objetos compareTo e métodos toString pode ser usado
- Dylan tem traduzido a ferramenta H2 Console para Coreano. Thanks a lot!
- Executar a instrução CREATE INDEX SE JÁ EXISTE se o índice já existe não falha mais para um banco de dados somente leitura.
- MVCC: simultaneamente atualizar uma linha poderia resultar na linha apareça eliminado na segunda conexão, se houver vários índices exclusivos (ou uma chave primária e pelo menos um índice exclusivo). Thanks a lot para Teruo para o patch!
- pesquisa de texto completo:. In-memory índices Lucene são agora suportadas
- pesquisa de texto completo: chaves primárias UUID agora são suportados .
- Apache Tomcat 7.x agora já não irá registrar um aviso ao descarregar a aplicação web, se estiver usando um pool de conexão.
- H2 Console: apoiar o navegador Midori (para Debian / Raspberry Pi)
- Ao abrir uma sessão remota, não abra um arquivo temporário, se o nível de rastreio é definido como zero
- Use HMAC para autenticar remoto ID do LOB, eliminando a necessidade de manter um cache, e removendo o limite no número de LOBs por conjunto de resultados.
- H2 Console: HTML e documentos XML podem agora ser editado em um conjunto de resultados atualizável. Há (limitado) o apoio à edição de documentos multi-linha.
O que é novo na versão 1.3.164:
- Atualização de um conjunto de resultados em um gatilho é agora suportado .
O que é novo na versão 11.3.162:
- As seguintes propriedades do sistema não são mais suportados: h2 .allowBigDecimalExtensions, h2.emptyPassword, h2.minColumnNameMap, h2.returnLobObjects, h2.webMaxValueLength.
- Ao usar uma VPN, a partir de um servidor H2 não funcionou (por algum software VPN).
- A Oracle compatibilidade:. Suporte para descodificar (...)
- Lucene pesquisa de texto: criação de um índice é agora mais rápido se a tabela já contém dados. Muito obrigado a Angel Leon da equipa FrostWire para o patch!
- declarações UPDATE com uma lista de colunas em suportes não funciona se a lista contém apenas uma coluna. Exemplo:. Conjunto teste de atualização (id) = (id)
- Leia bancos de dados somente em um arquivo zip não funciona quando se utiliza a opção -baseDir.
- Edição 334:. SimpleResultSet.getString agora também funciona para colunas Clob
- Subqueries com um agregado nem sempre funciona. Exemplo: select (select count (*) from teste onde a = ta e b = 0) do grupo de teste t por um
- Servidor:., Em alguns casos (teórico), as exceções ao fechar a conexão foram ignorados
- Server.createTcpServer, createPgServer, createWebServer:. Argumentos inválidos são agora detectados
- A seletividade de colunas LOB não é mais calculada, pois índices em colunas LOB não são suportadas (no entanto, este deve ter pouco efeito sobre o desempenho, como a seletividade é calculado a partir do código de hash e não os dados).
- New propriedade experimental sistema & quot; & quot ;: h2.modifyOnWrite quando ativada, o arquivo de banco de dados só é modificado quando se escreve para o banco de dados. Quando ativado, o bloqueio de arquivo serializado é muito mais rápido para operações somente leitura.
- A NullPointerException poderia ocorrer em TableView.isDeterministic para vistas inválidos.
- Edição 180: quando deserializing objetos, o carregador de classe de contexto é usado em vez do carregador de classes padrão, se a propriedade do sistema & quot; h2.useThreadContextClassLoader & quot; é definido. Muito obrigado a Noé Fontes para o patch!
- Ao usar o modo exclusivo, operações LOB pode causar o segmento para bloquear. Isso também afetou a ferramenta CreateCluster (quando utilizar BLOB ou dados CLOB).
- A otimização para & quot; grupo por & quot; não estava funcionando corretamente, se o grupo pela coluna foi alias na lista de seleção.
- Edição 326: suporte melhorado para maiúsculas e minúsculas (case misto) identificadores sem aspas quando se utiliza DATABASE_TO_UPPER = false .
Requisitos :
- Java 2 Standard Edition Runtime Environment
Comentários não encontrado