Hoje passei pelo seguinte erro:
15:44:41,274 ERROR [STDERR] java.util.InvalidPropertiesFormatException: org.xml.sax.SAXParseException: Premature end of file.
15:44:41,275 ERROR [STDERR] at java.util.XMLUtils.load(XMLUtils.java:59)
15:44:41,276 ERROR [STDERR] at java.util.Properties.loadFromXML(Properties.java:852)
Isso aconteceu pois usei o método loadFromXML da classe Properties passando um objeto InputStream como parâmetro, porém eu já tinha lido ele antes
byte [] b = new byte[1024];;
inputStream.read(b);
Comentando a linha "inputStream.read(b);" o problema foi resolvido.
Tentei dar um inputStream.close(), mas aconteceu o seguinte erro:
16:06:56,601 ERROR [STDERR] java.io.IOException: Read error
16:06:56,602 ERROR [STDERR] at java.io.FileInputStream.read(Native Method)
16:06:56,603 ERROR [STDERR] at org.apache.xerces.impl.XMLEntityManager$RewindableInputStream.read(Unknown Source)
Tentei dar um inputStream.reset(), mas aconteceu o seguinte erro:
16:07:37,719 ERROR [STDERR] java.io.IOException: mark/reset not supported
16:07:37,720 ERROR [STDERR] at java.io.InputStream.reset(InputStream.java:334)
Caso você não possa comentar a linha provavelmente terá que instanciar novamente o inputstream.
Abraços!
Adriano Schmidt
quarta-feira, 19 de outubro de 2011
Content is not allowed in prolog
Hoje ao utilizar o método loadFromXML da classe Properties e obtive o seguinte erro:
15:44:59,704 ERROR [STDERR] java.util.InvalidPropertiesFormatException: org.xml.sax.SAXParseException: Content is not allowed in prolog.
15:44:59,706 ERROR [STDERR] at java.util.XMLUtils.load(XMLUtils.java:59)
15:44:59,707 ERROR [STDERR] at java.util.Properties.loadFromXML(Properties.java:852)
Aconteceu isso pois o meu arquivo não era um .xml, eu deveria ter usado o método load também da classe Properties.
Vaaleu!
Adriano Schmidt
15:44:59,704 ERROR [STDERR] java.util.InvalidPropertiesFormatException: org.xml.sax.SAXParseException: Content is not allowed in prolog.
15:44:59,706 ERROR [STDERR] at java.util.XMLUtils.load(XMLUtils.java:59)
15:44:59,707 ERROR [STDERR] at java.util.Properties.loadFromXML(Properties.java:852)
Aconteceu isso pois o meu arquivo não era um .xml, eu deveria ter usado o método load também da classe Properties.
Vaaleu!
Adriano Schmidt
sexta-feira, 19 de agosto de 2011
identifier of an instance of Entity was altered from 1 to null
Olá, hoje aconteceu o erro abaixo para mim:
identifier of an instance of br.com.localhost8080.MyEntity was altered from 1 to null
Sem querer eu estava alterando o id da entidade:
myEntity.setId(1);
isso causou o erro... se o erro está acontecendo pra você verifique no seu código se por algum motivo você não está trocando o id (chave) da entidade.
Vaaaleu!
Adriano Schmidt
identifier of an instance of br.com.localhost8080.MyEntity was altered from 1 to null
Sem querer eu estava alterando o id da entidade:
myEntity.setId(1);
isso causou o erro... se o erro está acontecendo pra você verifique no seu código se por algum motivo você não está trocando o id (chave) da entidade.
Vaaaleu!
Adriano Schmidt
sexta-feira, 15 de julho de 2011
Please specify a context-root compiler argument
Olá, hoje num projeto flex aqui aconteceu o seguinte erro:
The services configuration includes a channel-definition 'my-http' that has an endpoint with a context.root token but a context root has not been defined. Please specify a context-root compiler argument.
Para resolver cliquei com o botão direito no projeto, properties, flex compiler e em "additional compiler arguments" adicionei o seguinte no final da linha:
-context-root nomeDoContexto
Pronto! Problema resolvido!
Abraços,
Adriano Schmidt
The services configuration includes a channel-definition 'my-http' that has an endpoint with a context.root token but a context root has not been defined. Please specify a context-root compiler argument.
Para resolver cliquei com o botão direito no projeto, properties, flex compiler e em "additional compiler arguments" adicionei o seguinte no final da linha:
-context-root nomeDoContexto
Pronto! Problema resolvido!
Abraços,
Adriano Schmidt
configuration variable 'compiler.library-path' value contains unknown token 'M2_REPO'
Olá, ao baixar projetos flex com maven e rodar o mvn flex:eclipse estavam acontecendo esses erros no eclipse:
configuration variable 'compiler.library-path' value contains unknown token 'M2_REPO'
configuration variable 'compiler.external-library-path' value contains unknown token 'M2_REPO'
O problema era que em algum lugar não estava setada a variável M2_REPO. Essa variável aponta para o repositório do maven na sua máquina. Por exemplo C:\Users\adriano.schmidt\.m2\repository
Aqui eu tinha isso nas minhas variáveis de ambiente e também nas minhas classpath variables do eclipse. Ainda não sei onde mais tenho que configurar isso.
Para resolver eu cliquei com o botão direito no projeto, fui em properties, escolhi "Flex Build Path" ou "Flex library Build Path" depende do seu projeto.. e na aba "library path" alterei todas as dependências trocando o ${M2_REPO} por C:/Users/adriano.schmidt/.m2/repository (barras para a direita)
Você também pode fazer search/replace no arquivo .actionScriptProperties.
Aqui isso aconteceu num projeto flex.. caso seja com java que ocorra esse erro para você a solução será semelhante.
Abraaaços!
Adriano Schmidt
configuration variable 'compiler.library-path' value contains unknown token 'M2_REPO'
configuration variable 'compiler.external-library-path' value contains unknown token 'M2_REPO'
O problema era que em algum lugar não estava setada a variável M2_REPO. Essa variável aponta para o repositório do maven na sua máquina. Por exemplo C:\Users\adriano.schmidt\.m2\repository
Aqui eu tinha isso nas minhas variáveis de ambiente e também nas minhas classpath variables do eclipse. Ainda não sei onde mais tenho que configurar isso.
Para resolver eu cliquei com o botão direito no projeto, fui em properties, escolhi "Flex Build Path" ou "Flex library Build Path" depende do seu projeto.. e na aba "library path" alterei todas as dependências trocando o ${M2_REPO} por C:/Users/adriano.schmidt/.m2/repository (barras para a direita)
Você também pode fazer search/replace no arquivo .actionScriptProperties.
Aqui isso aconteceu num projeto flex.. caso seja com java que ocorra esse erro para você a solução será semelhante.
Abraaaços!
Adriano Schmidt
quinta-feira, 7 de julho de 2011
Path must include project and resource name
Olá, ao criar um projeto flex com maven (http://maven.servebox.org/sites/maven-flex-plugin/flex-plugin/) aconteceu o erro abaixo no eclipse após executar o comando mvn flex:eclipse e atualizar o projeto.
An error has occurred. See error log for more details.
Path must include project and resource name: /nome-do-projeto
O problema era que no meu pom.xml eu estava utilizando a tag sourceDirectory da seguinte forma:
<sourceDirectory>.</sourceDirectory>
Coloquei o ponto para definir o diretório atual (raiz) como o diretório onde estavam os fontes, porém, isso causava o erro acima. Para resolver arranquei fora essa tag do meu pom, assim a pasta src/main/flex foi assumida por default como diretório de fontes, a única coisa que tive que fazer foi criar as pastas src/main/flex e migrar meus fontes da raiz para esse diretório.
Vaaaleu
Adriano Schmidt
An error has occurred. See error log for more details.
Path must include project and resource name: /nome-do-projeto
O problema era que no meu pom.xml eu estava utilizando a tag sourceDirectory da seguinte forma:
<sourceDirectory>.</sourceDirectory>
Coloquei o ponto para definir o diretório atual (raiz) como o diretório onde estavam os fontes, porém, isso causava o erro acima. Para resolver arranquei fora essa tag do meu pom, assim a pasta src/main/flex foi assumida por default como diretório de fontes, a única coisa que tive que fazer foi criar as pastas src/main/flex e migrar meus fontes da raiz para esse diretório.
Vaaaleu
Adriano Schmidt
quarta-feira, 29 de junho de 2011
No Dialect mapping for JDBC type: 2004
Olá..
Um cliente aqui usa o banco de dados Informix.. ao testar nosso projeto nesse banco tive o seguinte erro:
13:57:15,040 INFO [DatabaseMetadata] table not found: MY_TABLE
13:57:15,041 ERROR [SchemaUpdate] could not complete schema update: org.hibernate.MappingException: No Dialect mapping for JDBC type: 2004
at org.hibernate.dialect.TypeNames.get(TypeNames.java:79) [:3.5.5-Final]
at org.hibernate.dialect.TypeNames.get(TypeNames.java:104) [:3.5.5-Final]
at org.hibernate.dialect.Dialect.getTypeName(Dialect.java:347) [:3.5.5-Final]
O problema era que temos uma tabela que guarda uma imagem em uma de suas colunas e usamos @Lob no seu mapeamento. O Dialeto do Informix não aceitou o @Lob.
Para resolver extendi o Dialeto do Informix e adicionei as seguinte linhas no construtor:
registerColumnType(Types.BLOB, "blob");
registerColumnType(Types.CLOB, "clob");
Mais detalhes em http://www.snailshell.de/blog/archives/2007/06/entry_108.html
Alterei o persistence.xml para usar o dialeto que criei e o projeto funcionou perfeitamente.
Outras fontes:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-2646
http://opensource.atlassian.com/projects/hibernate/browse/HHH-2523
Vaaleu
Adriano Schmidt
Um cliente aqui usa o banco de dados Informix.. ao testar nosso projeto nesse banco tive o seguinte erro:
13:57:15,040 INFO [DatabaseMetadata] table not found: MY_TABLE
13:57:15,041 ERROR [SchemaUpdate] could not complete schema update: org.hibernate.MappingException: No Dialect mapping for JDBC type: 2004
at org.hibernate.dialect.TypeNames.get(TypeNames.java:79) [:3.5.5-Final]
at org.hibernate.dialect.TypeNames.get(TypeNames.java:104) [:3.5.5-Final]
at org.hibernate.dialect.Dialect.getTypeName(Dialect.java:347) [:3.5.5-Final]
O problema era que temos uma tabela que guarda uma imagem em uma de suas colunas e usamos @Lob no seu mapeamento. O Dialeto do Informix não aceitou o @Lob.
Para resolver extendi o Dialeto do Informix e adicionei as seguinte linhas no construtor:
registerColumnType(Types.BLOB, "blob");
registerColumnType(Types.CLOB, "clob");
Mais detalhes em http://www.snailshell.de/blog/archives/2007/06/entry_108.html
Alterei o persistence.xml para usar o dialeto que criei e o projeto funcionou perfeitamente.
Outras fontes:
http://opensource.atlassian.com/projects/hibernate/browse/HHH-2646
http://opensource.atlassian.com/projects/hibernate/browse/HHH-2523
Vaaleu
Adriano Schmidt
quinta-feira, 16 de junho de 2011
java.lang.String cannot be cast to org.servebox.flex.mojo.FlexLicense
Olá, aconteceu comigo agora o erro:
java.lang.ClassCastException: java.lang.String cannot be cast to org.servebox.flex.mojo.FlexLicense
at org.servebox.flex.mojo.base.AbstractFlexMakeMojo.handleCompilationOptions(AbstractFlexMakeMojo.java:1142)
at org.servebox.flex.mojo.base.AbstractFlexMakeMojo.handleConfiguration(AbstractFlexMakeMojo.java:990)
at org.servebox.flex.mojo.base.AbstractFlexMakeMojo.invokeCompiler(AbstractFlexMakeMojo.java:923)
at org.servebox.flex.mojo.MakeSWFMojo.invokeCompiler(MakeSWFMojo.java:105)
at org.servebox.flex.mojo.base.AbstractFlexMakeMojo.compile(AbstractFlexMakeMojo.java:858)
at org.servebox.flex.mojo.MakeSWFMojo.compile(MakeSWFMojo.java:113)
O erro aconteceu pois eu usei a tag abaixo:
<licenses>
<flexbuilder3>1111-1111-1111-1111-1111-1111</flexbuilder3>
</licenses>
Mas deveria ter usado da seguinte forma:
<flex3LicenceKey>1111-1111-1111-1111-1111-1111</flex3LicenceKey>
Ambas as formas estavam dentro de <plugin> e dentro de <configuration>
Vaaleu!
java.lang.ClassCastException: java.lang.String cannot be cast to org.servebox.flex.mojo.FlexLicense
at org.servebox.flex.mojo.base.AbstractFlexMakeMojo.handleCompilationOptions(AbstractFlexMakeMojo.java:1142)
at org.servebox.flex.mojo.base.AbstractFlexMakeMojo.handleConfiguration(AbstractFlexMakeMojo.java:990)
at org.servebox.flex.mojo.base.AbstractFlexMakeMojo.invokeCompiler(AbstractFlexMakeMojo.java:923)
at org.servebox.flex.mojo.MakeSWFMojo.invokeCompiler(MakeSWFMojo.java:105)
at org.servebox.flex.mojo.base.AbstractFlexMakeMojo.compile(AbstractFlexMakeMojo.java:858)
at org.servebox.flex.mojo.MakeSWFMojo.compile(MakeSWFMojo.java:113)
O erro aconteceu pois eu usei a tag abaixo:
<licenses>
<flexbuilder3>1111-1111-1111-1111-1111-1111</flexbuilder3>
</licenses>
Mas deveria ter usado da seguinte forma:
<flex3LicenceKey>1111-1111-1111-1111-1111-1111</flex3LicenceKey>
Ambas as formas estavam dentro de <plugin> e dentro de <configuration>
Vaaleu!
segunda-feira, 21 de março de 2011
Unable to find XML mapping file in classpath
Ao usar a tag <mapping-file> no meu persistence.xml tive o seguinte erro quando iniciei o JBoss:
Unable to find XML mapping file in classpath: br.com.localhost8080.Teste2.hbm.xml
O erro era que a separação dos pacotes deve ser feita com barra e não ponto:
Assim:
<mapping-file>br/com/localhost8080/Teste2.hbm.xml</mapping-file>
Não assim:
<mapping-file>br.com.localhost8080.Teste2.hbm.xml</mapping-file>
Vaaleu!
Adriano Schmidt
Unable to find XML mapping file in classpath: br.com.localhost8080.Teste2.hbm.xml
O erro era que a separação dos pacotes deve ser feita com barra e não ponto:
Assim:
<mapping-file>br/com/localhost8080/Teste2.hbm.xml</mapping-file>
Não assim:
<mapping-file>br.com.localhost8080.Teste2.hbm.xml</mapping-file>
Vaaleu!
Adriano Schmidt
cvc-complex-type.2.4.a: Invalid content was found starting with element 'mapping-file'
Olá,
Ao utilizar a tag <mapping-file> no persistence.xml eu tive o seguinte erro:
cvc-complex-type.2.4.a: Invalid content was found starting with element 'mapping-file'. One of '{"http://
java.sun.com/xml/ns/persistence":class, "http://java.sun.com/xml/ns/persistence":exclude-unlisted-classes,
"http://java.sun.com/xml/ns/persistence":properties}' is expected.
O problema é que no meu persistence.xml eu tinha uma tag <class> antes da tag <mapping-file>. Para resolver só joguei a tag class pra baixo da tag <mapping-file>. Assim:
<mapping-file>br/com/localhost8080/Teste2.hbm.xml</mapping-file>
<class>br.com.localhost8080.Teste1</class>
Caso você use a tag <jar-file> ela também deve estar depois da tag <mapping-file>
Vaaleu!
Ao utilizar a tag <mapping-file> no persistence.xml eu tive o seguinte erro:
cvc-complex-type.2.4.a: Invalid content was found starting with element 'mapping-file'. One of '{"http://
java.sun.com/xml/ns/persistence":class, "http://java.sun.com/xml/ns/persistence":exclude-unlisted-classes,
"http://java.sun.com/xml/ns/persistence":properties}' is expected.
O problema é que no meu persistence.xml eu tinha uma tag <class> antes da tag <mapping-file>. Para resolver só joguei a tag class pra baixo da tag <mapping-file>. Assim:
<mapping-file>br/com/localhost8080/Teste2.hbm.xml</mapping-file>
<class>br.com.localhost8080.Teste1</class>
Caso você use a tag <jar-file> ela também deve estar depois da tag <mapping-file>
Vaaleu!
sexta-feira, 18 de março de 2011
JBoss 6 Final eclipse
Olá, utilizando o JBoss 6 M5 no eclipse tudo ocorria bem, quando fui migrar para o JBoss 6 Final tive o seguinte erro:
Error installing to Instantiated: name=PostEjbJarMetadataDeployer state=Described: java.lang.NoSuchMethodError: javax.annotation.Resource.lookup()Ljava/lang/String;
Para resolver bastou adicionar nos VM arguments o seguinte:
-Djava.endorsed.dirs="C:\jboss-6.0.0-Final\lib\endorsed"
Troque C:\jboss-6.0.0-Final pela pasta do seu JBoss.
Fontes:
https://bugs.eclipse.org/bugs/show_bug.cgi?id=250643
http://community.jboss.org/message/587813?tstart=60
Vaaleu!
Error installing to Instantiated: name=PostEjbJarMetadataDeployer state=Described: java.lang.NoSuchMethodError: javax.annotation.Resource.lookup()Ljava/lang/String;
Para resolver bastou adicionar nos VM arguments o seguinte:
-Djava.endorsed.dirs="C:\jboss-6.0.0-Final\lib\endorsed"
Troque C:\jboss-6.0.0-Final pela pasta do seu JBoss.
Fontes:
https://bugs.eclipse.org/bugs/show_bug.cgi?id=250643
http://community.jboss.org/message/587813?tstart=60
Vaaleu!
quinta-feira, 17 de março de 2011
p:tabView volta primeira aba
Olá,
O TabView do primefaces volta para a primeira aba em algumas situacoes (quando ele está dentro de um <a4j:outputPanel ajaxRendered="true"> e dentro de um tab tem um rich:datatable e um botão é pressionado no datascroller (nossa, é difícil, mas aconteceu comigo)).
Para resolver isso, simplesmente tire o tabView do outputPanel.
Caso isso não possa ser feito, na troca de aba deve ser setado o 'activeIndex' do tabView. Da seguinte forma:
No tabView deve ser adicionado o tabChangeListener e o activeIndex. E as tabs devem ter seu id setado:
No Bean adicione isso:
Acredito que isso não funciona no primefaces 2.1.. aqui no 2.2.1 funcionou..
É isso, vaaleu. Abraço.
O TabView do primefaces volta para a primeira aba em algumas situacoes (quando ele está dentro de um <a4j:outputPanel ajaxRendered="true"> e dentro de um tab tem um rich:datatable e um botão é pressionado no datascroller (nossa, é difícil, mas aconteceu comigo)).
Para resolver isso, simplesmente tire o tabView do outputPanel.
Caso isso não possa ser feito, na troca de aba deve ser setado o 'activeIndex' do tabView. Da seguinte forma:
No tabView deve ser adicionado o tabChangeListener e o activeIndex. E as tabs devem ter seu id setado:
<p:tabView tabChangeListener="#{myBean.onTabChange}" activeIndex="#{myBean.currentTab}">
<p:tab title="primeria aba" id="tab0">
</tab>
<p:tab title="segunda aba" id="tab1">
</tab>
<p:tab title="terceira aba" id="tab2">
</tab>
</p:tabView>
No Bean adicione isso:
private int currentTab = 0;
public int getCurrentTab() {
return currentTab;
}
public void setCurrentTab(int currentTab) {
this.currentTab = currentTab;
}
public void onTabChange(org.primefaces.event.TabChangeEvent event) {
String id = event.getTab().getId();
if (id.equals("tab0")) {
this.setCurrentTab(0);
} else if (id.equals("tab1")) {
this.setCurrentTab(1);
} else if (id.equals("tab2")) {
this.setCurrentTab(2);
}
}
Acredito que isso não funciona no primefaces 2.1.. aqui no 2.2.1 funcionou..
É isso, vaaleu. Abraço.
sexta-feira, 11 de março de 2011
ORA-01452: cannot CREATE UNIQUE INDEX
Olá,
Fui criar um índice único no oracle:
CREATE UNIQUE INDEX nome_do_indice ON nome_da_tabela (coluna1, coluna2, coluna3);
e aconteceu o seguinte erro:
Error: ORA-01452: cannot CREATE UNIQUE INDEX; duplicate keys found
Isso aconteceu pois na tabela que fui inserir o índice já haviam registros que violavam esse índice, por isso não permitiu criar..
Para resolver removi os registros que violavam o índice e deu tudo certo.
Mais detalhes sobre o erro: http://ora-01452.ora-code.com/
Mais detalhes sobre índices no oracle: http://www.techonthenet.com/oracle/indexes.php
Vaaleu!
Adriano Schmidt.
Fui criar um índice único no oracle:
CREATE UNIQUE INDEX nome_do_indice ON nome_da_tabela (coluna1, coluna2, coluna3);
e aconteceu o seguinte erro:
Error: ORA-01452: cannot CREATE UNIQUE INDEX; duplicate keys found
Isso aconteceu pois na tabela que fui inserir o índice já haviam registros que violavam esse índice, por isso não permitiu criar..
Para resolver removi os registros que violavam o índice e deu tudo certo.
Mais detalhes sobre o erro: http://ora-01452.ora-code.com/
Mais detalhes sobre índices no oracle: http://www.techonthenet.com/oracle/indexes.php
Vaaleu!
Adriano Schmidt.
terça-feira, 8 de março de 2011
erro converter jsf
Olá,
Ao criar um converter para utilizar na minha aplicação JSF, tive um problema quando defino ele com o forClass e value (converter-for-class e converter-id no faces-config.xml) simultaneamente.
Apenas um dos dois é permitido, os dois juntos não! Se precisa disso terá que criar duas classes diferentes.
Veja como não pode ser feito:
<converter>
<converter-id>Localhost8080Converter</converter-id>
<converter-for-class>java.lang.String</converter-for-class>
<converter-class>br.com.localhost8080.Localhost8080Converter</converter-class>
</converter>
@FacesConverter(forClass = String.class, value="Localhost8080Converter")
public class Localhost8080Converter implements Converter { ... }
É isso aí. Abraços.
Adriano Schmidt
Ao criar um converter para utilizar na minha aplicação JSF, tive um problema quando defino ele com o forClass e value (converter-for-class e converter-id no faces-config.xml) simultaneamente.
Apenas um dos dois é permitido, os dois juntos não! Se precisa disso terá que criar duas classes diferentes.
Veja como não pode ser feito:
<converter>
<converter-id>Localhost8080Converter</converter-id>
<converter-for-class>java.lang.String</converter-for-class>
<converter-class>br.com.localhost8080.Localhost8080Converter</converter-class>
</converter>
@FacesConverter(forClass = String.class, value="Localhost8080Converter")
public class Localhost8080Converter implements Converter { ... }
É isso aí. Abraços.
Adriano Schmidt
quinta-feira, 3 de março de 2011
join type not supported by OracleJoinFragment
Hoje ao usar um right join num banco oracle tive o seguinte erro:
join type not supported by OracleJoinFragment (use Oracle9iDialect/Oracle10gDialect)
Para resolver tive que trocar o hibernate.dialect do persistence.xml de:
org.hibernate.dialect.OracleDialect
para:
org.hibernate.dialect.Oracle10gDialect
Pronto, resolvido.
Adriano Schmidt
join type not supported by OracleJoinFragment (use Oracle9iDialect/Oracle10gDialect)
Para resolver tive que trocar o hibernate.dialect do persistence.xml de:
org.hibernate.dialect.OracleDialect
para:
org.hibernate.dialect.Oracle10gDialect
Pronto, resolvido.
Adriano Schmidt
terça-feira, 8 de fevereiro de 2011
SQL Server - Apparently wrong driver class specified for URL
Olá, hoje tive o seguinte erro ao iniciar o JBoss num ambiente SQL Server 2000:
15:45:18,348 WARN [JBossManagedConnectionPool] Throwable while attempting to get a new connection: null: org.jboss.resource.JBossResourceException: Could not create connection; - nested throwable: (org.jboss.resource.JBossResourceException: Apparently wrong driver class specified for URL: class: com.microsoft.sqlserver.jdbc.SQLServerDriver, url: jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydatabase)
O problema era a URL de conexão com o banco no meu arquivo ds.xml, tirei o :microsoft
jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydatabase
jdbc:sqlserver://localhost:1433;DatabaseName=mydatabase
Vaaleu!
Adriano Schmidt
15:45:18,348 WARN [JBossManagedConnectionPool] Throwable while attempting to get a new connection: null: org.jboss.resource.JBossResourceException: Could not create connection; - nested throwable: (org.jboss.resource.JBossResourceException: Apparently wrong driver class specified for URL: class: com.microsoft.sqlserver.jdbc.SQLServerDriver, url: jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydatabase)
O problema era a URL de conexão com o banco no meu arquivo ds.xml, tirei o :microsoft
jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydatabase
jdbc:sqlserver://localhost:1433;DatabaseName=mydatabase
Vaaleu!
Adriano Schmidt
segunda-feira, 7 de fevereiro de 2011
JSF Acentuação IE
Olá, eu estava tendo problemas com caracteres especiais.. nos meus cadastros as palavras que tinham acento ou cedilha chegavam no java desconfiguradas (São Paulo virava São Paulo).
Fiz algumas tentativas frustradas:
<f:view contentType="text/html; charset=UTF-8" encoding="UTF-8">
<f:view contentType="text/html; charset=ISO-8859-1" encoding="ISO-8859-1">
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />
<meta http-equiv='Content-Type' content='text/html; charset=ISO-8859-1' />
<h:form acceptcharset="UTF-8">
<h:form acceptcharset="ISO-8859-1"> (essa funcionou em todos os browsers, menos no ie)
Alterei o web.xml:
<locale-encoding-mapping-list>
<locale-encoding-mapping>
<locale>pt< <encoding>ISO-8859-1</encoding> (tentei com UTF-8 tmb)
</locale-encoding-mapping>
</locale-encoding-mapping-list>
Mas nada funcionou...
Pra resolver fiz o seguinte:
Coloquei a seguinte linha no início de todos os .xhtml
No web.xml eu adicionei o seguinte:
E criei uma classe chamada CharsetFilter no pacote br.com.localhost8080.infrastructure:
Isso resolveu o problema de acentuação no submit dos formulários em todos os browsers (Para essa resolução foi de grande ajuda o site stackoverflow.com)
Porém... eu ainda tava com problemas no internet explorer em alguns campos que eram atualizados via ajax ou via rerenderização da tela no retorno de forms.
Para resolver isso criei dois converters, um eu uso para campos atualizados via ajax (ConverterCharset) e outro eu uso para campos atualizados via rerenderização da tela nos retornos dos forms (ConverterString).
Para campos atualizados via ajax é necessário adicionar converter="converterCharset"
ConverterCharset.java:
ConverterString.java:
Ambos os converters tinham um código de conversão de UTF-8 para ISO-8859-1 que foi externalizado para a classe StringUtils.
É isso.. sem mais problemas de acentuação.
Abraço,
Adriano Schmidt
Fiz algumas tentativas frustradas:
<f:view contentType="text/html; charset=UTF-8" encoding="UTF-8">
<f:view contentType="text/html; charset=ISO-8859-1" encoding="ISO-8859-1">
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />
<meta http-equiv='Content-Type' content='text/html; charset=ISO-8859-1' />
<h:form acceptcharset="UTF-8">
<h:form acceptcharset="ISO-8859-1"> (essa funcionou em todos os browsers, menos no ie)
Alterei o web.xml:
<locale-encoding-mapping-list>
<locale-encoding-mapping>
<locale>pt< <encoding>ISO-8859-1</encoding> (tentei com UTF-8 tmb)
</locale-encoding-mapping>
</locale-encoding-mapping-list>
Mas nada funcionou...
Pra resolver fiz o seguinte:
Coloquei a seguinte linha no início de todos os .xhtml
<?xml version="1.0" encoding="UTF-8"?>
No web.xml eu adicionei o seguinte:
<filter>
<filter-name>CharsetFilter</filter-name>
<filter-class>br.com.localhost8080.infrastructure.CharsetFilter</filter-class>
<init-param>
<param-name>requestEncoding</param-name>
<param-value>ISO-8859-1</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharsetFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
E criei uma classe chamada CharsetFilter no pacote br.com.localhost8080.infrastructure:
package br.com.localhost8080.infrastructure;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class CharsetFilter implements Filter {
private String encoding;
public void init(FilterConfig config) throws ServletException {
this.encoding = config.getInitParameter("requestEncoding");
if (this.encoding == null) {
this.encoding = "ISO-8859-1";
}
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain next) throws IOException, ServletException {
if (null == request.getCharacterEncoding()) {
request.setCharacterEncoding(this.encoding);
}
response.setContentType("text/html; charset=ISO-8859-1");
response.setCharacterEncoding("ISO-8859-1");
next.doFilter(request, response);
}
public void destroy() {
}
}
Isso resolveu o problema de acentuação no submit dos formulários em todos os browsers (Para essa resolução foi de grande ajuda o site stackoverflow.com)
Porém... eu ainda tava com problemas no internet explorer em alguns campos que eram atualizados via ajax ou via rerenderização da tela no retorno de forms.
Para resolver isso criei dois converters, um eu uso para campos atualizados via ajax (ConverterCharset) e outro eu uso para campos atualizados via rerenderização da tela nos retornos dos forms (ConverterString).
Para campos atualizados via ajax é necessário adicionar converter="converterCharset"
<h:inputText value="#{myBean.myObject.name}" converter="converterCharset"/>
ConverterCharset.java:
package br.com.localhost8080.infrastructure;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;
import javax.faces.convert.FacesConverter;
import br.com.localhost8080.infrastructure.StringUtils;
@FacesConverter(value = "converterCharset")
public class ConverterCharset implements Converter {
public Object getAsObject(FacesContext arg0, UIComponent arg1, String value) throws ConverterException {
return value;
}
public String getAsString(FacesContext arg0, UIComponent arg1, Object value) throws ConverterException {
String convertedString = StringUtils.convertUtf8ToIso88591(value);
return convertedString;
}
}
ConverterString.java:
package br.com.localhost8080.infrastructure;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;
import javax.faces.convert.FacesConverter;
import br.com.localhost8080.infrastructure.StringUtils;
@FacesConverter(forClass = String.class, value="Test")
public class ConverterString implements Converter {
//vem da tela / request
public Object getAsObject(FacesContext arg0, UIComponent arg1, String value) throws ConverterException {
if ("".equals(value.toString().trim())) {
return null;
}
String convertedString = StringUtils.convertUtf8ToIso88591(value);
return convertedString;
}
//vai para tela / response
public String getAsString(FacesContext arg0, UIComponent arg1, Object value) throws ConverterException {
String convertedString = StringUtils.convertUtf8ToIso88591(value);
return convertedString;
}
}
Ambos os converters tinham um código de conversão de UTF-8 para ISO-8859-1 que foi externalizado para a classe StringUtils.
package br.com.localhost8080.infrastructure;
public class StringUtils {
/**
* Verifica se valor string do objeto passado como parametro e UTF-8 e entao converte para ISO-8859-1
*/
public static String convertUtf8ToIso88591(Object value) {
if (value instanceof String == false) {
return value.toString();
}
String originalValue = (String) value;
// verifica se e UTF-8 (se tem caracteres especiais)
if (originalValue.contains("Ã") || originalValue.contains("Â")) {
java.nio.charset.Charset utf8charset = java.nio.charset.Charset.forName("UTF-8");
java.nio.charset.Charset iso88591charset = java.nio.charset.Charset.forName("ISO-8859-1");
java.nio.ByteBuffer inputBuffer = java.nio.ByteBuffer.wrap(originalValue.getBytes());
// decode UTF-8
java.nio.CharBuffer data = utf8charset.decode(inputBuffer);
// encode ISO-8559-1
java.nio.ByteBuffer outputBuffer = iso88591charset.encode(data);
byte[] outputData = outputBuffer.array();
String convertedString = new String(outputData);
// se a conversao deu errado retorna o valor original
if (convertedString.contains("?")) {
return originalValue;
}
// retorna o valor convertido
return convertedString;
}
return originalValue;
}
}
É isso.. sem mais problemas de acentuação.
Abraço,
Adriano Schmidt
sexta-feira, 4 de fevereiro de 2011
persistence.xml dinâmico
E aew!
Bom, eu defino o hibernate.dialect no persistence.xml, porém o meu persistence.xml estava dentro do meu ear.. dessa forma quando fosse necessário trocar o dialeto, era necessário alterar o ear. Eu não queria isso. Então para externalizar o hibernate.dialect tentei o seguinte:
Tirei a linha do hibernate.dialect do persistence.xml e iniciei o JBoss passando o parâmetro -Dhibernate.dialect=org.hibernate.dialect.MySQLDialect
Aconteceu o seguinte erro:
17:55:16,514 ERROR [JDBCExceptionReporter] Unexpected token: LAST_INSERT_ID in statement [select last_insert_id()]
state=Create: java.lang.RuntimeException: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not retrieve generated id after insert:
[org.jboss.ejb3.timerservice.mk2.persistence.TimeoutMethod]
Bom, pra resolver isso iniciei o JBoss com um parâmetro diferente:
-Dlocalhost8080.hibernate.dialect=org.hibernate.dialect.MySQLDialect
E essa propriedade eu usei no persistence.xml:
<property name="hibernate.dialect" value="${localhost8080.hibernate.dialect}"/>
Obs: Você pode trocar o localhost8080 do localhost8080.hibernate.dialect para o nome do seu projeto.
Pronto, dessa forma tudo funcionou!!!!
Também seria possível configurar o hibernate.dialect via código, mas não era esse meu objetivo.
Se você quiser colocar essa propriedade (localhost8080.hibernate.dialect) num arquivo de propriedades para que não seja necessário setá-la na inicialização do JBoss, faça o seguinte:
No arquivo properties-service.xml que fica em <jboss>\server\<context>\deploy dentro do mbean SystemProperties deve adicionar a propriedade, ficando dessa forma:
<mbean code="org.jboss.varia.property.SystemPropertiesService"
name="jboss:type=Service,name=SystemProperties">
<attribute name="Properties">
localhost8080.hibernate.dialect=org.hibernate.dialect.MySQLDialect
</attribute>
</mbean>
Vaaaleu!
Adriano Schmidt
Bom, eu defino o hibernate.dialect no persistence.xml, porém o meu persistence.xml estava dentro do meu ear.. dessa forma quando fosse necessário trocar o dialeto, era necessário alterar o ear. Eu não queria isso. Então para externalizar o hibernate.dialect tentei o seguinte:
Tirei a linha do hibernate.dialect do persistence.xml e iniciei o JBoss passando o parâmetro -Dhibernate.dialect=org.hibernate.dialect.MySQLDialect
Aconteceu o seguinte erro:
17:55:16,514 ERROR [JDBCExceptionReporter] Unexpected token: LAST_INSERT_ID in statement [select last_insert_id()]
state=Create: java.lang.RuntimeException: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not retrieve generated id after insert:
[org.jboss.ejb3.timerservice.mk2.persistence.TimeoutMethod]
Bom, pra resolver isso iniciei o JBoss com um parâmetro diferente:
-Dlocalhost8080.hibernate.dialect=org.hibernate.dialect.MySQLDialect
E essa propriedade eu usei no persistence.xml:
<property name="hibernate.dialect" value="${localhost8080.hibernate.dialect}"/>
Obs: Você pode trocar o localhost8080 do localhost8080.hibernate.dialect para o nome do seu projeto.
Pronto, dessa forma tudo funcionou!!!!
Também seria possível configurar o hibernate.dialect via código, mas não era esse meu objetivo.
Se você quiser colocar essa propriedade (localhost8080.hibernate.dialect) num arquivo de propriedades para que não seja necessário setá-la na inicialização do JBoss, faça o seguinte:
No arquivo properties-service.xml que fica em <jboss>\server\<context>\deploy dentro do mbean SystemProperties deve adicionar a propriedade, ficando dessa forma:
<mbean code="org.jboss.varia.property.SystemPropertiesService"
name="jboss:type=Service,name=SystemProperties">
<attribute name="Properties">
localhost8080.hibernate.dialect=org.hibernate.dialect.MySQLDialect
</attribute>
</mbean>
Vaaaleu!
Adriano Schmidt
domingo, 30 de janeiro de 2011
java metadata
Olá, encontrei um código interessante e resolvi postar aqui.. ele verifica se algum atributo de um determinado objeto possui a annotation Id..
Quando eu tiver mais tempo vou dar uma pesquisada maior sobre isso... essa questão de metadata é bem interessante, procurando no google existe bastante material sobre isso.
http://pastie.org/1505699
Alguns links interessantes:
http://www.guj.com.br/articles/136
http://java.sun.com/products/jmi/
http://download.oracle.com/javase/1.4.2/docs/api/java/sql/DatabaseMetaData.html
http://download.oracle.com/javase/1.5.0/docs/api/java/lang/reflect/AnnotatedElement.html
http://download.oracle.com/javase/6/docs/api/java/lang/reflect/AccessibleObject.html
Vaaleu!
Adriano Schmidt
Quando eu tiver mais tempo vou dar uma pesquisada maior sobre isso... essa questão de metadata é bem interessante, procurando no google existe bastante material sobre isso.
http://pastie.org/1505699
/**
* Verifica se a entidade em questão possui um Id. Método utilizado para escolher
* se a o esquema de persistência deve salvar ou atualizar o modelo
* @param entity A entidade a ser verificada
* @returntrue
se a entidade possui Id
* @throws Exception Caso algo de errado, uma exceção será lançada
*/
public boolean hasId(Object entity) throws Exception{
Class clazz = entity.getClass();
for(Field f : clazz.getDeclaredFields()){
if(!f.isAccessible())
f.setAccessible(true);
if(f.isAnnotationPresent(Id.class)){
if(f.get(entity) != null){
log.info("ID found: "+f.get(entity));
return true;
}
}
}
return false;
}
Alguns links interessantes:
http://www.guj.com.br/articles/136
http://java.sun.com/products/jmi/
http://download.oracle.com/javase/1.4.2/docs/api/java/sql/DatabaseMetaData.html
http://download.oracle.com/javase/1.5.0/docs/api/java/lang/reflect/AnnotatedElement.html
http://download.oracle.com/javase/6/docs/api/java/lang/reflect/AccessibleObject.html
Vaaleu!
Adriano Schmidt
terça-feira, 25 de janeiro de 2011
SQL - ignorar horas
Oi,
Fiz a segunte query:
select m from MinhaTabela m where :date between m.initialDate AND m.endDate
e tive o seguinte problema: o meu parâmetro :date era uma data com as horas 00:00, porém o initialDate era sempre com horário (12:30 por exemplo), então minha query nunca retornava nada.
Para igorar as horas utilizei a função date()
select m from MinhaTabela m where :date between date(m.initialDate) AND date(m.endDate)
Pronto! Dessa forma o horário foi ignorado e a comparação foi feita utilizando somente as datas e tudo funcionou : )
Mais funções de data e hora podem ser encontradas em: http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html
Vaaleu!
Adriano Schmidt
Fiz a segunte query:
select m from MinhaTabela m where :date between m.initialDate AND m.endDate
e tive o seguinte problema: o meu parâmetro :date era uma data com as horas 00:00, porém o initialDate era sempre com horário (12:30 por exemplo), então minha query nunca retornava nada.
Para igorar as horas utilizei a função date()
select m from MinhaTabela m where :date between date(m.initialDate) AND date(m.endDate)
Pronto! Dessa forma o horário foi ignorado e a comparação foi feita utilizando somente as datas e tudo funcionou : )
Mais funções de data e hora podem ser encontradas em: http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html
Vaaleu!
Adriano Schmidt
segunda-feira, 24 de janeiro de 2011
richfaces popupPanel ie8
Olá,
Estou num projeto utilizando JSF 2.0 e RichFaces 4.
Meu popupPanel (antigo modalPanel) estava desrespeitando os atributos width e height no ie8 ficando bem grande no browser.. no firefox tudo funcionava perfeitamente.
O problema era que eu estava usando o componente inputCalendar do tomahawk.. ao usar a propriedade renderAsPopup como true, o meu popupPanel se perdia e ficava com um tamanho diferente do que setei.
Solução: Troquei o inputCalendar do tomahawk pelo calendar do RichFaces.
Show! Funcionou!
Adriano Schmidt
Estou num projeto utilizando JSF 2.0 e RichFaces 4.
Meu popupPanel (antigo modalPanel) estava desrespeitando os atributos width e height no ie8 ficando bem grande no browser.. no firefox tudo funcionava perfeitamente.
O problema era que eu estava usando o componente inputCalendar do tomahawk.. ao usar a propriedade renderAsPopup como true, o meu popupPanel se perdia e ficava com um tamanho diferente do que setei.
Solução: Troquei o inputCalendar do tomahawk pelo calendar do RichFaces.
Show! Funcionou!
Adriano Schmidt
Assinar:
Postagens (Atom)