J'utilise Seam avec JBoss AS. Dans mon application, j'ai un SLSB qui est également déclaré comme un composant Seam à l'aide de l'annotation @Name. J'essaie d'injecter et d'utiliser ce SLSB dans un autre composant de couture en utilisant l'annotation @In.
Mon problème est que parfois Seam injecte l'interface locale (alors le code s'exécute bien) et parfois Seam injecte l'interface distante (alors il y a une erreur dans l'exécution du code). J'ai essayé de faire tout ce qui est indiqué sur ce lien : http://docs.jboss.org/seam/2.2.0.GA/reference/en-US/html/configuration.html#config.integration.ejb.container
Le SeamInterceptor est configuré,
J'ai spécifié le modèle jndi dans le fichier components.xml ( < core:init debug="true" jndi-pattern="earName/#{ejbName}/local"/> ),
J'ai également essayé d'utiliser l'annotation @JndiName("earName/ejbName/local") pour chaque SLSB,
J'ai essayé de définir cette propriété ( org.jboss.seam.core.init.jndiPattern=earName/#{ejbName}/local ) dans le fichier seam.properties.
J'ai également essayé de mettre le texte ci-dessous dans le fichier web.xml
<context-param> <param-name>org.jboss.seam.core.init.jndiPattern</param-name> <param-value>earName/#{ejbName}/local</param-value> </context-param>
Même après avoir fait toutes les choses mentionnées ci-dessus, le filon continue parfois à injecter l'interface à distance. Est-ce que quelque chose m'échappe ici ? Quelqu'un peut-il me dire comment résoudre ce problème et dire au seam de toujours injecter l'interface locale ?
Mon fichier components.xml ressemble à ceci :
<?xml version="1.0" encoding="UTF-8"?> <components xmlns="http://jboss.com/products/seam/components" xmlns:core="http://jboss.com/products/seam/core" xmlns:persistence="http://jboss.com/products/seam/persistence" xmlns:drools="http://jboss.com/products/seam/drools" xmlns:bpm="http://jboss.com/products/seam/bpm" xmlns:security="http://jboss.com/products/seam/security" xmlns:mail="http://jboss.com/products/seam/mail" xmlns:web="http://jboss.com/products/seam/web" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation= "http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.1.xsd http://jboss.com/products/seam/persistence http://jboss.com/products/seam/persistence-2.1.xsd http://jboss.com/products/seam/drools http://jboss.com/products/seam/drools-2.1.xsd http://jboss.com/products/seam/bpm http://jboss.com/products/seam/bpm-2.1.xsd http://jboss.com/products/seam/security http://jboss.com/products/seam/security-2.1.xsd http://jboss.com/products/seam/mail http://jboss.com/products/seam/mail-2.1.xsd http://jboss.com/products/seam/web http://jboss.com/products/seam/web-2.1.xsd http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.1.xsd"> <core:init debug="true" jndi-pattern="myEarName/#{ejbName}/local"/> <core:manager concurrent-request-timeout="500" conversation-timeout="120000" conversation-id-parameter="cid" parent-conversation-id-parameter="pid"/> <web:hot-deploy-filter url-pattern="*.seam"/> <persistence:managed-persistence-context name="entityManager" auto-create="true" persistence-unit-jndi-name="@puJndiName@"/> <drools:rule-base name="securityRules"> <drools:rule-files> <value>/security.drl</value> </drools:rule-files> </drools:rule-base> <security:rule-based-permission-resolver security-rules="#{securityRules}"/> <security:identity authenticate-method="#{authenticator.authenticate}" remember-me="true"/> <event type="org.jboss.seam.security.notLoggedIn"> <action execute="#{redirect.captureCurrentView}"/> </event> <event type="org.jboss.seam.security.loginSuccessful"> <action execute="#{redirect.returnToCapturedView}"/> </event> <component name="org.jboss.seam.core.init"> <property name="jndiPattern">myEarName/#{ejbName}/local</property> </component> </components>
Et mon composant EJB ressemble à ça :
@Stateless
@Name("myEJBComponent")
@AutoCreate
public class MyEJBComponentImpl implements MyEJBComponentRemote, MyEJBComponentLocal {
public void doSomething() {
}
}