3.2.13.2. Problemas de Migração do Arquivo Seam 2.2
- Seam 2.2 Drools e Java 7 não são compatíveis
- Seam 2.2 Drools e Java 7 são incompatíveis e falham com org.drools.RuntimeDroolsException: valor '1.7' não é um erro de nível de mensagem válido.
- Seam 2.2.5 assinado como
cglib.jarevita o funcionamento do exemplo Spring - Quando o exemplo Spring é executado usando o
cglib.jarassinado enviado junto com Seam 2.2.5 no JBoss EAP 5, uma falha com a seguinte causa raiz ocorre:java.lang.SecurityException: class "org.jboss.seam.example.spring.UserService$$EnhancerByCGLIB$$7d6c3d12"'s signer information does not match signer information of other classes in the same package
java.lang.SecurityException: class "org.jboss.seam.example.spring.UserService$$EnhancerByCGLIB$$7d6c3d12"'s signer information does not match signer information of other classes in the same packageCopy to Clipboard Copied! Toggle word wrap Toggle overflow A solução para este problema é remover a assinatura decglib.jar, como a seguir:zip -d $SEAM_DIR/lib/cglib.jar META-INF/JBOSSCOD\* - O exemplo Seambay falha com
NotLoggedInException - A causa deste problema é o cabeçalho da mensagem SOAP ficando nulo durante o processamento da mensagem em SOAPRequestHandler e, como consequência, a ID de conversa não é definida.A solução para este problema é substituir
org.jboss.seam.webservice.SOAPRequestHandler.handleOutbound, conforme descrito em https://issues.jboss.org/browse/JBPAPP-8376. - O exemplo Seambay falha com
UnsupportedOperationException: nenhuma transação - Este erro é causado por alterações no nome JNDI do UserTransaction no JBoss EAP 6.A solução para este problema é substituir
org.jboss.seam.transaction.Transaction.getUserTransaction, conforme descrito em https://issues.jboss.org/browse/JBPAPP-8322. - O exemplo de tarefas lança
org.jboss.resteasy.spi.UnhandledException: não foi possível cancelar o marshall do corpo da solicitação - Este erro é causado pela incompatibilidade entre seam-resteasy-2.2.5, incluído no JBoss EAP 5.1.2), e RESTEasy 2.3.1.GA, incluído no JBoss EAP 6.Para solucionar este problema, use
jboss-deployment-structure.xmlpara excluir resteasy-jaxrs, resteasy-jettison-provider e resteasy-jaxb-provider da implantação principal e resteasy-jaxrs, resteasy-jettison-provider, resteasy-jaxb-provider e resteasy-yaml-provider dojboss-seam-tasks.war, conforme descrito em https://issues.jboss.org/browse/JBPAPP-8315. Depois, é necessário incluir as bibliotecas RESTEasy agrupadas com Seam 2.2 no EAR. - Deadlock entre
org.jboss.seam.core.SynchronizationInterceptore o bloqueio EJB da instância de componente com monitorização de estado (stateful) durante uma solicitação AJAX - Uma página de erro com a mensagem a seguir ou uma mensagem semelhante é exibida: "Caused by javax.servlet.ServletException with message: "javax.el.ELException: /main.xhtml @36,71 value="#{hotelSearch.pageSize}": org.jboss.seam.core.LockTimeoutException: could not acquire lock on @Synchronized component: hotelSearch".O problema é que Seam 2 realiza seu próprio bloqueio fora do bean de sessão com monitorização de estado (stateful) (SFSB) e com um escopo diferente. Isto significa que se um thread acessa um EJB duas vezes na mesma transação, após a primeira invocação, ele terá o bloqueio SFSB, mas não o bloqueio seam. Assim, um segundo thread pode adquirir o bloqueio seam, o qual atingirá, então, o bloqueio EJB e aguardará. Quando o primeiro thread tenta sua segunda invocação, ele bloqueará o deadlock e o interceptor seam 2. No Java EE 5, os EJBs lançariam imediatamente uma exceção aos acessos concomitantes. Esse comportamento foi alterado no Java EE 6.Para solucionar este problema é preciso adicionar @AccessTimeout(0) ao EJB. Isto fará com que um
ConcurrentAccessExceptionseja lançado imediatamente quando esta situação ocorrer. - A criação de pedido do exemplo Dvdstore falha com
javax.ejb.EJBTransactionRolledbackException - O exemplo dvdstore exibe o seguinte erro:
JBAS011437: Found extended persistence context in SFSB invocation call stack but that cannot be used because the transaction already has a transactional context associated with it. This can be avoided by changing application code, either eliminate the extended persistence context or the transactional context. See JPA spec 2.0 section 7.6.3.1.
JBAS011437: Found extended persistence context in SFSB invocation call stack but that cannot be used because the transaction already has a transactional context associated with it. This can be avoided by changing application code, either eliminate the extended persistence context or the transactional context. See JPA spec 2.0 section 7.6.3.1.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Este problema é devido às alterações na especificação JPA.A solução para este problema é alterar o contexto de persistência paratransactionalnas classesCheckoutActioneShowOrdersAction, além de usar a operação de mesclagem do gerenciador de entidade nos métodoscancelOrderedetailOrder. - O provedor do JBoss Cache Seam Cache não pode ser usado no JBoss EAP 6
- JBoss Cache não é suportado no JBoss EAP 6. Isto faz com que o provedor do JBoss Cache Seam falhe em um aplicativo Seam no servidor do aplicativo com:.
java.lang.NoClassDefFoundError: org/jboss/util/xml/JBossEntityResolver
java.lang.NoClassDefFoundError: org/jboss/util/xml/JBossEntityResolverCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Hibernate 3.3.x Auto examina por problemas de entidades JPA com o JBoss EAP 6
- A solução para este problema é listar manualmente todas as classes de entidade no arquivo persistence.xml. Por exemplo:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Chamar componentes EJB Seam a partir de Threads não pertencentes a EJB gera javax.naming.NameNotFoundException
- Este problema é o resultado de alterações no JBoss EAP 6 para implementar o novo sistema de carregamento de classe modular e adotar as novas convenções do namespace JNDI padronizadas. O namespace
java:appé designado para os nomes compartilhados por todos os componentes em um aplicativo único. Threads não pertencentes a EE, tais como threads assíncronos Quartz, devem usar o namespacejava:global, o qual é compartilhado por todos os aplicativos implantados em uma instância do servidor do aplicativo.Caso você recebajavax.naming.NameNotFoundException, quando tentar chamar os componentes EJB Seam a partir dos métodos assíncronos Quartz, você deve modificar o arquivocomponents.xmlpara usar o nome JNDI global, por exemplo:<component class="org.jboss.seam.example.quartz.MyBean" jndi-name="java:global/seam-quartz/quartz-ejb/myBean"/>
<component class="org.jboss.seam.example.quartz.MyBean" jndi-name="java:global/seam-quartz/quartz-ejb/myBean"/>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Para mais informações sobre as alterações JNDI, consulte Seção 3.1.8.1, “Atualização dos Nomes do Namespace JNDI do Aplicativo” . Para mais informações sobre este problema, em particular, consulte BZ#948215 - Seam2.3 javax.naming.NameNotFoundException trying to call EJB Seam components from quartz asynchronous methods nas notas de lançamento 2.2.0 Release Notes para Red Hat JBoss Web Framework Kit no Portal do Consumidor Red Hat .