J'utilise Seam avec JBoss AS. Dans mon application, j'ai un SLSB qui est également déclaré comme un composant de couture en utilisant l'annotation @Name. J'essaie d'injecter et d'utiliser cette 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 fonctionne bien) et parfois la couture injecte l'interface distante (alors il y a une erreur dans l'exécution du code). Je l'ai essayé de faire toutes les choses spécifiées sur ce lien: http://docs.jboss.org/seam/2.2.0.GA/reference/en-US/html/configuration.html#config.integration.ejb.containerComment indiquer à Seam d'injecter une interface EJB locale (SLSB) et non l'interface EJB distante (SLSB)?
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 aussi 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 tout ce qui précède mentionné les choses, la couture injecte encore l'interface distante parfois. Est-ce que j'ai râté quelque chose? Quelqu'un peut-il me dire comment résoudre ce problème et dire à seam de toujours injecter l'interface locale?
Mon fichier components.xml ressemble:
<?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="@[email protected]"/> <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:
@Stateless
@Name("myEJBComponent")
@AutoCreate
public class MyEJBComponentImpl implements MyEJBComponentRemote, MyEJBComponentLocal {
public void doSomething() {
}
}
J'ai vérifié les journaux jboss, j'ai observé cette ligne dans le fichier journal: DEBUG [org.jboss.seam.Component] (main) org.jboss.seam.core.init.jndiPattern = myEarName/# {ejbName}/local, Le jndiPattern est configuré correctement. –
V Il semble juste! Essayez le suivant: ** supprimez l'interface distante ** et voyez si votre application fonctionne bien. Sinon, montrez votre pileTrace. Si possible, faites sans annotation AutoCreate. –
@Arthur Ronald F D Garcia: Ok, j'ai supprimé l'annotation AutoCreate et l'ai remplacé par @In (create = true). J'ai enlevé toutes mes interfaces à distance, et j'ai lancé l'application 6 fois (parce que même avec l'interface à distance, l'application marche bien parfois), ça s'est bien passé toutes les 6 fois. Je pense qu'avec l'interface à distance enlevée, la couture ne se confond pas, quelle interface utiliser, locale ou distante. –