quarta-feira, 22 de dezembro de 2010

@EJB não funciona

A injeção via @EJB só funciona em classes gerenciadas pelo container EJB, em outros casos é preciso fazer lookup:

Tive esse problema pois no projeto que estou agora fiz uma camada de delegates. A parte de telas do meu projeto não acessa diretamente meus serviços.. acessa um delegate que esse sim acessa meus serviços.

Como meu delegate não é uma classe gerenciada pelo container EJB tive que fazer lookup:

/////////////////
public class AaaDelegate {

private AaaService aaaService;

public AaaDelegate() {
this.aaaService = (AaaService) this.lookup(AaaService.JNDI);
}

public Object lookup(String jndi) {

try {
Context context = new InitialContext();
return context.lookup(jndi);
} catch (NamingException e) {
e.printStackTrace();
}

return null;
}

///////////////

@Local
public interface AaaService {

public static String JNDI = "aaa.AaaService";

}

/////////////

@Stateless
@LocalBinding(jndiBinding = AaaService.JNDI)
public class AaaServiceImpl implements AaaService {

}

////////////


Vaaleu!

Referência Cíclica EJB

Oi, hoje tive um problema de referência cíclica (cycle services dependiency ou circular references ou ainda cyclic reference) com EJBs..

Na classe AaaServiceBean eu tinha isso:

@EJB
private BbbService bbbService;

E na classe BbbServiceBean eu tinha:

@EJB
AaaService aaaService;

Isso causava um erro de referência cíclica, pois Aaa tinha um Bbb e Bbb tinha um Aaa. Para resolver isso adicionei a annotation org.jboss.ejb3.annotation.IgnoreDependency em uma das classes:

A classe AaaServiceBean ficou assim:

@EJB
@IgnoreDependency
private BbbService bbbService;


Pronto! Problema resolvido. O que esse IgnoreDependency faz exatamente eu não sei, não encontrei nenhuma documentação interessante, mas, funcionou.

Vaaleu, abraço!

UIInstructions cannot be cast to AbstractTogglePanelItem

Hoje me aconteceu o seguinte erro num projeto com jsf2 e richfaces4:

com.sun.faces.facelets.compiler.UIInstructions cannot be cast to org.richfaces.component.AbstractTogglePanelItem

No meu caso descobri que o que causava isso eram comentários dentro do tabPanel.

NÃO FUNCIONA:
<rich:tabPanel>
<rich:tab header="aaaaa">
<h:outputText value="aaaaaaaaaa"></h:outputText>
</rich:tab>
<!— esse comentario gerou o erro -->
<rich:tab header="bbbbb">
<h:outputText value="bbbbbbbbbb"></h:outputText>
</rich:tab>
</rich:tabPanel>

FUNCIONA:
<rich:tabPanel>
<rich:tab header="aaaaa">
<h:outputText value="aaaaaaaaaa"></h:outputText>
</rich:tab>
<rich:tab header="bbbbb">
<h:outputText value="bbbbbbbbbb"></h:outputText>
</rich:tab>
</rich:tabPanel>


Log com mais detalhes:
10:36:35,449 SEVERE [javax.enterprise.resource.webcontainer.jsf.application] Error Rendering View[/resources/user/UserForm.xhtml]: java.lang.ClassCastException: com.sun.faces.facelets.compiler.UIInstructions cannot be cast to org.richfaces.component.AbstractTogglePanelItem
at org.richfaces.renderkit.html.TogglePanelRenderer.getChildrenScriptObjects(TogglePanelRenderer.java:178) [:4.0.0-SNAPSHOT]

[…]
10:36:35,493 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/l8-web].[Faces Servlet]] Servlet.service() for servlet Faces Servlet threw exception: java.lang.ClassCastException: com.sun.faces.facelets.compiler.UIInstructions cannot be cast to org.richfaces.component.AbstractTogglePanelItem
at org.richfaces.renderkit.html.TogglePanelRenderer.getChildrenScriptObjects(TogglePanelRenderer.java:178) [:4.0.0-SNAPSHOT]
at org.richfaces.renderkit.html.TogglePanelRenderer.getScriptObjectOptions(TogglePanelRenderer.java:147) [:4.0.0-SNAPSHOT]

[…]

Exportar dados mysql

Olá,

No terminal de comando basta executar a seguinte linha de comando:

mysqldump -u root -p -r c:\dados.sql nomeDoBanco

altere nomeDoBanco pelo nome do banco
altere root pelo nome do usuário
altere c:\dados.sql pelo diretório/arquivo.sql onde os dados serão gravados

Depois será solicitada a senha e então os dados serão exportados para o arquivo indicado.

Vaaleu!

Syntax error in EL - & E comercial - JSF

Pra usar & (E comercial) em JSF num bloco como
#{var1 == 1 && var2 == 2}

você pode usar ‘and’, assim:
#{var1 == 1 and var2 == 2}

além de 'and' você pode usar 'or' ou 'eq'

mais informações em:
http://developers.sun.com/docs/jscreator/help/jsp-jsfel/jsf_expression_language_intro.html

Vaaaleu!

.properties ignorado

Olá,

Ao gerar meu war pelo eclipse, os arquivos .properties estavam sendo ignorados(não iam para dentro do war)
O problema foi resolvido da seguinte forma:
Fui em nas propriedades do projeto (botão direito, properties) em ‘Java Build Path’, aba ‘Sources’.
Cliquei em ‘included’, cliquei no botão ‘edit’
Cliquei em “Add’, digitei ‘**/*.properties’ (sem as aspas) e cliquei em ‘OK’.

Pronto, ao gerar o war novamento os arquivos .properties não foram mais ignorados.

Isso pode acontecer com qualquer tipo de arquivo (.jks) por exemplo.

Se quiser fazer isso via maven basta adicionar ao seu pom.xml o trecho abaixo e dar um mvn eclipse:eclipse.

<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**</include>
</includes>
</resource>
</resources>
</build>

É isso aí. Valeu!

datascrooler richfaces não funciona

Ao usar o datascrooler do richfaces ao apertar para ir para uma outra página nada acontecia, apenas no cabeçalho do browser aparecia “Erro na página”.

No meu caso o dataTable e o dataScrooler não estavam dentro de um form, ao colocar os dois componentes no mesmo form o problema foi resolvido.

datascrooler richfaces ecss

Ao usar o datascrooler do richfaces saiu no log os seguintes warnings:

10:28:06,362 WARNING [javax.enterprise.resource.webcontainer.jsf.context] JSF1091: Nenhum tipo de mime pôde ser encontrado para o arquivo skinning.ecss. Para resolver isso, adicione um mapeamento de mime-type ao web.xml do aplicativo.
10:28:06,376 WARNING [javax.enterprise.resource.webcontainer.jsf.context] JSF1091: Nenhum tipo de mime pôde ser encontrado para o arquivo panel.ecss. Para resolver isso, adicione um mapeamento de mime-type ao web.xml do aplicativo.
10:28:06,386 WARNING [javax.enterprise.resource.webcontainer.jsf.context] JSF1091: Nenhum tipo de mime pôde ser encontrado para o arquivo datatable.ecss. Para resolver isso, adicione um mapeamento de mime-type ao web.xml do aplicativo.
10:28:06,394 WARNING [javax.enterprise.resource.webcontainer.jsf.context] JSF1091: Nenhum tipo de mime pôde ser encontrado para o arquivo datascroller.ecss. Para resolver isso, adicione um mapeamento de mime-type ao web.xml do aplicativo.

Para resolver adicionei o seguinte trecho no web.xml:
<mime-mapping>
<extension>ecss</extension>
<mime-type>text/css</mime-type>
</mime-mapping>

TypeMappingDelegate - No serializer found

Aconteceu o erro abaixo ao tentar acessar meu WebService:

No serializer found xxxxxx for class in registry org.apache.axis.encoding.TypeMappingDelegate

Para resolver tive que coloar as linhas abaixo

import org.apache.axis.encoding.ser.BeanDeserializerFactory;
import org.apache.axis.encoding.ser.BeanSerializerFactory;
QName QNAME = new QName(
"http://www.w3.org/2001/XMLSchema", "string");

call.registerTypeMapping(String.class, QNAME,
new BeanSerializerFactory(String.class, QNAME),
new BeanDeserializerFactory(String.class, QNAME));


Onde está escrito string.. tem q ser colocado o que está no wsdl

valeu : )

tabelas MySQL letras maiúsculas

Para criar tabelas no MySQL com letras maiúsculas faça o seguinte:

Adicione no arquivo my.ini a seguinte linha:
lower_case_table_names=2

O arquivo my.ini está onde o MySQL foi instalado. Em uma máquina Windows pode estar em:
C:\Program Files\MySQL\MySQL Server 5.1

Depois disso, reinicie o service do MySQL, qualquer coisa reinicie a máquina.

Dessa forma você poderá criar tabelas com letras maiúsculas.

Valeeu!!

Failed to register driver for: com.mysql.jdbc.Driver

Ao iniciar o JBoss aconteceu o erro:

Caused by: org.jboss.resource.JBossResourceException: Failed to register driver for: com.mysql.jdbc.Driver;
Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver from BaseClassLoader@1b64925

Para resolver coloquei o driver do MySQL em < Pasta do JBoss >/server/< contexto >/lib

Você pode baixar o driver em http://dev.mysql.com/downloads/connector/j/ depois descompacte e pegue o arquivo .jar, esse é o arquivo que você deve jogar em < Pasta do JBoss >/server/< contexto >/lib

; )

HibernateException: 'hibernate.dialect'

Aconteceu comigo o erro:

Caused by: org.hibernate.HibernateException: 'hibernate.dialect' must be set when no Connection available

Para resolver apenas coloquei o trecho abaixo dentro da tag persistence-unit do arquivo persistence.xml:

<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<properties>

Isso foi para um banco MySQL, para outros bancos segue a lista:
RDBMS                 Dialect
DB2 org.hibernate.dialect.DB2Dialect
DB2 AS/400 org.hibernate.dialect.DB2400Dialect
DB2 OS390 org.hibernate.dialect.DB2390Dialect
PostgreSQL org.hibernate.dialect.PostgreSQLDialect
MySQL org.hibernate.dialect.MySQLDialect
MySQL with InnoDB org.hibernate.dialect.MySQLInnoDBDialect
MySQL with MyISAM org.hibernate.dialect.MySQLMyISAMDialect
Oracle (any version) org.hibernate.dialect.OracleDialect
Oracle 9i org.hibernate.dialect.Oracle9iDialect
Oracle 10g org.hibernate.dialect.Oracle10gDialect
Sybase org.hibernate.dialect.SybaseDialect
Sybase Anywhere org.hibernate.dialect.SybaseAnywhereDialect
Microsoft SQL Server org.hibernate.dialect.SQLServerDialect
SAP DB org.hibernate.dialect.SAPDBDialect
Informix org.hibernate.dialect.InformixDialect
HypersonicSQL org.hibernate.dialect.HSQLDialect
Ingres org.hibernate.dialect.IngresDialect
Progress org.hibernate.dialect.ProgressDialect
Mckoi SQL org.hibernate.dialect.MckoiDialect
Interbase org.hibernate.dialect.InterbaseDialect
Pointbase org.hibernate.dialect.PointbaseDialect
FrontBase org.hibernate.dialect.FrontbaseDialect
Firebird org.hibernate.dialect.FirebirdDialect

Mais detalhes em: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html

É isso aí!

persistence-unit.xml

O erro abaixo aconteceu comigo.. aconteceu pois o meu arquivo de persistência estava com o nome persistence-unit.xml, ao renomear para persistence.xml o problema parou de ocorrer.

18:23:55,912 ERROR [Ejb3Deployment] Exception while processing container metadata for EJB: TestServerBean in unit: test-ejb.jar
18:23:55,914 ERROR [AbstractKernelController] Error installing to Real: name=vfs:///C:/temp/test/jboss-6.0.0-M5/server/test-web/deploy/test-ee.ear state=PreReal mode=Manual requiredState=Real: org.jboss.deployers.spi.DeploymentException: Error deploying test-ejb.jar: Exception while processing container metadata for EJB: TestServerBean in unit: test-ejb.jar
at org.jboss.ejb3.deployers.Ejb3Deployer.deploy(Ejb3Deployer.java:189) [:6.0.0.20100911-M5]
[…]
Caused by: java.lang.IllegalArgumentException: Container jboss.j2ee:ear=test-ee.ear,jar=test-ejb.jar,name=TestServerBean,service=EJB3 failed to resolve persistence unit test
at org.jboss.injection.PersistenceUnitHandler.addPUDependency(PersistenceUnitHandler.java:135) [:1.5.1]

[…]
Caused by: java.lang.IllegalArgumentException: Can't find a persistence unit named 'test' in AbstractVFSDeploymentContext@22455058{vfs:///C:/temp/test/jboss-6.0.0-M5/server/test-web/deploy/test-ee.ear/test-ejb.jar/}
at org.jboss.jpa.resolvers.BasePersistenceUnitDependencyResolver.resolvePersistenceUnitSupplier(BasePersistenceUnitDependencyResolver.java:107) [:1.0.2-alpha-1]

Gerar código a partir de um banco

Bom, precisei gerar as classes que mapeiam as minhas tabelas com JPA..

utilizei os seguintes tutoriais para conseguir:

Começo:
http://pt.scribd.com/doc/73027102/Fazendo-Engenharia-Reversa-Com-Hibernate-Tools-Reverse-Engineering

Vídeo aula
http://docs.jboss.org/tools/archive/movies/demos/Reverse_engineering_and_code_generation/Reverse_engineering_and_code_generation.htm

Documentação:
Em HTML:
http://docs.jboss.org/tools/3.3.0.Final/en/hibernatetools/html/index.html

Em HTML (versão leve)
http://docs.jboss.org/tools/3.3.0.Final/en/hibernatetools/html_single/index.html

Em PDF
http://docs.jboss.org/tools/3.3.0.Final/en/hibernatetools/pdf/Hibernatetools_Reference_Guide.pdf

illegal target for the requested operation

Ao commitar um arquivo novo no SVN deu o erro abaixo:



Isso aconteceu pois o arquivo novo também está numa pasta nova.. a pasta ainda não tinha sido commitada também.
Para resolver, ao invés de selecionar o arquivo e commitar, selecionei a pasta e commitei. Assim deu tudo certo!
:D

Access restriction BASE64Decoder

Oi : )

Hoje peguei um projeto novo aqui na empresa e aconteceram os seguintes erros:

Access restriction: The constructor BASE64Decoder() is not accessible due to restriction on required library C:\Program Files\Java\jre1.6.0_06\lib\rt.jar
Access restriction: The method decodeBuffer(String) from the type CharacterDecoder is not accessible due to restriction on required library C:\Program Files\Java\jre1.6.0_06\lib\rt.jar
Access restriction: The method encode(byte[]) from the type CharacterEncoder is not accessible due to restriction on required library C:\Program Files\Java\jre1.6.0_06\lib\rt.jar
Access restriction: The type BASE64Encoder is not accessible due to restriction on required library C:\Program Files\Java\jre1.6.0_06\lib\rt.jar
The project cannot be built until build path errors are resolved

Para resolver isso fiz o seguinte (no eclipse):
Botao direito no projeto > Properties > Java Compiler > Errors/Warnings > Deprecated and restricted API > Forbidden reference (access rules)
Nesse campo alterei o combobox de Error para Warning e pronto! Tudo certo o/

Talvez essa não seja a melhor solução mas resolveu o meu problema aqui, espero que possa ajudar outras pessoas.

Vaaaaleu! Até mais!