Richfaces4 + JSF2 + JPA + JBoss7

9 respostas
dlucchesi

Boa tarde galera,

Eu precisava criar um projeto (que acreditei) ser simples. O projeto em si seria um controle de horas e tarefas aplicadas aos projetos em nossa base já existente.

Como existia a proposta de atualizar as VERSÕES de nossas plataformas, resolvi já utilizar as versões para as quais os nossos servidores serão atualizados:

Cenário: JBoss7, JSF2, JPA2, Java1.6 e Richfaces 4

Comecei do começo:

projeto simples do maven modelo web-jee6: Subiu sem problemas no JBoss;

adicionei o Richfaces4: Subiu sem problemas no JBoss e exibiu uma pagina de teste ligada a um @ManagedBean com acesso a uma String;

Adicionei o JPA (Datasource no JBoss, anotações de classes e persistence.xml no META-INF): Erro de publicação;

O que parece pelo log abaixo é que o JBoss não reconheceu o meu persistence-unit, mas como sou leigo no JPA gostaria que alguém me confirmasse.

Obs.: Não lotei o post de coisas p/ não dificultar, assim também posso saber como os mais entendidos rastreiam esse tipo de problema.

13:59:36,505 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-8) Starting deployment of "jscheduler.war"
13:59:37,061 WARN  [org.jboss.as.server.deployment.service-loader] (MSC service thread 1-1) Encountered invalid class name "com.sun.faces.vendor.Tomcat6InjectionProvider:org.apache.catalina.util.DefaultAnnotationProcessor" for service type "com.sun.faces.spi.injectionprovider"
13:59:37,064 WARN  [org.jboss.as.server.deployment.service-loader] (MSC service thread 1-1) Encountered invalid class name "com.sun.faces.vendor.Jetty6InjectionProvider:org.mortbay.jetty.plus.annotation.InjectionCollection" for service type "com.sun.faces.spi.injectionprovider"
13:59:37,074 INFO  [org.jboss.as.jpa] (MSC service thread 1-1) added javax.persistence.api, javaee.api, org.jboss.as.jpa, org.javassist dependencies to jscheduler.war
13:59:37,127 INFO  [org.jboss.weld] (MSC service thread 1-6) Processing CDI deployment: jscheduler.war
13:59:37,209 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-1) MSC00001: Failed to start service jboss.deployment.unit."jscheduler.war".INSTALL: org.jboss.msc.service.StartException in service jboss.deployment.unit."jscheduler.war".INSTALL: Failed to process phase INSTALL of deployment "jscheduler.war"
	at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:121)
	at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1765)
	at org.jboss.msc.service.ServiceControllerImpl$ClearTCCLTask.run(ServiceControllerImpl.java:2291)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [:1.6.0_30]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [:1.6.0_30]
	at java.lang.Thread.run(Thread.java:662) [:1.6.0_30]
Caused by: org.jboss.as.server.deployment.DeploymentUnitProcessingException: Component class br.com.pamcary.bi.jscheduler.control.EquipeControl for component managed-bean.br.com.pamcary.bi.jscheduler.control.EquipeControl has errors: 
 Can't find a deployment unit named jschedulerpu at deployment "jscheduler.war"
	at org.jboss.as.ee.component.ModuleJndiBindingProcessor$1.handle(ModuleJndiBindingProcessor.java:133)
	at org.jboss.as.ee.component.ClassDescriptionTraversal.run(ClassDescriptionTraversal.java:52)
	at org.jboss.as.ee.component.ModuleJndiBindingProcessor.processClassConfigurations(ModuleJndiBindingProcessor.java:129)
	at org.jboss.as.ee.component.ModuleJndiBindingProcessor.deploy(ModuleJndiBindingProcessor.java:122)
	at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:115)
	... 5 more

13:59:37,451 INFO  [org.jboss.as.server.controller] (DeploymentScanner-threads - 2) Deployment of "jscheduler.war" was rolled back with failure message {"Failed services" => {"jboss.deployment.unit.\"jscheduler.war\".INSTALL" => "org.jboss.msc.service.StartException in service jboss.deployment.unit.\"jscheduler.war\".INSTALL: Failed to process phase INSTALL of deployment \"jscheduler.war\""},"Services with missing/unavailable dependencies" => ["jboss.naming.context.java.comp.jscheduler.jscheduler.jscheduler.Validator missing [ jboss.naming.context.java.module.jscheduler.jscheduler ]","jboss.naming.context.java.comp.jscheduler.jscheduler.jscheduler.ValidatorFactory missing [ jboss.naming.context.java.module.jscheduler.jscheduler ]"]}
13:59:37,659 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-8) Stopped deployment jscheduler.war in 208ms
13:59:37,662 ERROR [org.jboss.as.deployment] (DeploymentScanner-threads - 1) {"Composite operation failed and was rolled back. Steps that failed:" => {"Operation step-2" => {"Failed services" => {"jboss.deployment.unit.\"jscheduler.war\".INSTALL" => "org.jboss.msc.service.StartException in service jboss.deployment.unit.\"jscheduler.war\".INSTALL: Failed to process phase INSTALL of deployment \"jscheduler.war\""},"Services with missing/unavailable dependencies" => ["jboss.naming.context.java.comp.jscheduler.jscheduler.jscheduler.Validator missing [ jboss.naming.context.java.module.jscheduler.jscheduler ]","jboss.naming.context.java.comp.jscheduler.jscheduler.jscheduler.ValidatorFactory missing [ jboss.naming.context.java.module.jscheduler.jscheduler ]"]}}}

Um abs

9 Respostas

Rodrigo_Sasaki

você não tem referências do servidor antigo em algum lugar? em arquivos, properties ou anotações de configuração?

“com.sun.faces.vendor.Tomcat6InjectionProvider:org.apache.catalina.util.DefaultAnnotationProcessor”

você usava o Tomcat 6?

Big_E

Realizou a configuração de referência no arquivo web.xml?

<persistence-unit-ref>
		<description>Referência ao Persistence unit</description>
		<persistence-unit-ref-name>seu-PU</persistence-unit-ref-name>
		<persistence-unit-name>seu-PU</persistence-unit-name>
</persistence-unit-ref>
Richard_Mendes_Madur
Can't find a deployment unit named jschedulerpu at deployment "jscheduler.war"

Se o nome da sua unidade de persistencia é realmente “jschedulerpu”, provavelmente o erro é na configuração do datasource, dentro do jboss.

Se o Datasource ainda não estiver configurado, você terá que incluir o módulo do drive de banco de dados que o seu projeto está utilizando, e então configurá-lo alterando o arquivo standalone.xml (ou domain.xml).
Nos links abaixo, ensinam como fazer isso para o mysql e o oracle respectivamente.
http://jbossdivers.wordpress.com/2012/01/20/introducao-ao-jboss-as-7-parte-2/
http://www.thiagovespa.com.br/blog/2011/10/06/data-souce-oracle-no-jboss-as-7/

Espero ter ajudado!
Valeu!

dlucchesi

E lá vamos nós,

Digão, nós aqui usamos atualmente o JBoss 4 ou 5 (depende do pacote, cliente, etc) e o Richfaces, o DAO é feito através de classes que programamos especificamente para cada projeto.

Big E, nos exemplos que pesquisei, não vi essa marcação, mas mesmo após coloca-la e adequa-la, continuou dando o mesmo erro.

Richard, eu já tinha visto como configurar o DS no Jboss, como vc pode ver abaixo (standalone.xml). O DS aparece com a bola verde de habilitado dentro do console de adm do JBoss.

<datasource jndi-name="java:jboss/datasources/jschedulerds" pool-name="jscheduler" enabled="true" jta="true" use-java-context="true" use-ccm="true">
                    <connection-url>
                        jdbc:mysql://localhost/jclock
                    </connection-url>
                    <driver>
                        com.mysql
                    </driver>
                    <transaction-isolation>
                        TRANSACTION_READ_COMMITTED
                    </transaction-isolation>
                    <pool>
                        <min-pool-size>
                            2
                        </min-pool-size>
                        <max-pool-size>
                            10
                        </max-pool-size>
                        <prefill>
                            true
                        </prefill>
                        <use-strict-min>
                            false
                        </use-strict-min>
                        <flush-strategy>
                            FailingConnectionOnly
                        </flush-strategy>
                    </pool>
                    <security>
                        <user-name>
                            bla
                        </user-name>
                        <password>
                            bla01
                        </password>
                    </security>
                </datasource>

E o driver:

<driver name="com.mysql" module="com.mysql">
                        <xa-datasource-class>
                            com.mysql.jdbc.jdbc2.optional.MysqlXADataSource
                        </xa-datasource-class>
                    </driver>

No aguardo,

Big_E

Pode ser problema no jndi do DataSource no jboss

java:jboss/datasources/jschedulerds

troque apenas por

jschedulerds

e no persistence.xml apenas <jta-data-source>java:/jschedulerds</jta-data-source>

Espero que isso ajude.

Rodrigo_Sasaki

se não me engano o prefixo java:/ é obrigatório no nome do datasource…

acho que só falta mesmo é colocar o nome igual no persistence.xml igual o Big E comentou

Big_E

Nesse caso o prefixo é obrigatório apenas na referência contida no arquivo persistence.xml (java:/jschedulerds)

para o name do DS no jboss pode colocar apenas jschedulerds.

[]'s

Richard_Mendes_Madur

Aparentemente, a configuração do módulo está ok. Não sei se o icone verde quer realmente dizer que está funcionando…
Para testar eu faço o seguinte. Na tela de descrição de DataSources do JBoss 7, eu clico em profile e testo a conexão (connection -> Test connection).
O JBoss informará se está tudo ok ou não. Qualquer dúvida sobre a configuração do módulo será respondida realizando esse teste.

Já, para o seu arquivo “persistence.xml”, você deverá deixar assim:

<jta-data-source>java:jboss/datasources/jschedulerds</jta-data-source>

Valeu!

dlucchesi

Bom dia pessoal,

Depois de muita cabeçada, aceitei o conselho de um velho amigo. O projeto virou um EAR e bastou configurar o persistence.xml do mesmo jeito, colocar as anotações @Inject e @PersistenceContext no meu EntityManager e funcionou de primeira.

Acho ruim colocar um EAR p/ matar um problema simples, mas infelizmente tenho preocupações maiores. Só queria que soubessem que eu usei o mesmo JBoss c/ o DS e JNDI que estavam p/ meu projeto original, ou seja não alterei nada e copiei o persistence.xml para o novo projeto EAR, juntamente com as classes TO.

Quero agradecer a todos pela ajuda. Hora de encarar o JPA.

Um abraço,

Criado 4 de maio de 2012
Ultima resposta 8 de mai. de 2012
Respostas 9
Participantes 4