Я использую Seam с JBoss AS. В моем приложении у меня есть SLSB, который также объявляется как шовный компонент, используя аннотацию @Name. Я пытаюсь внедрить и использовать этот SLSB в другом компоненте шва, используя аннотацию @In.Как сказать Seam ввести локальный интерфейс EJB (SLSB), а не удаленный интерфейс EJB (SLSB)?
Моя проблема в том, что иногда Seam внедряет локальный интерфейс (тогда код работает нормально), а иногда шов вводит удаленный интерфейс (тогда есть ошибка при выполнении кода). Я пытался делать все вещи, указанные на этой ссылке: http://docs.jboss.org/seam/2.2.0.GA/reference/en-US/html/configuration.html#config.integration.ejb.container
SeamInterceptor настроен,
Я уточнил JNDI шаблона в components.xml файл (< ядра: INIT отлаживать = «истинный» JNDI-шаблон =» earName/# {ejbName}/local "/>),
Я также попытался использовать аннотацию @JndiName (" earName/ejbName/local ") для каждого SLSB,
Я пробовал задавать это свойство (org.jboss. seam.core.init.jndiPattern = earName/# {ejbName}/local) в файле seam.properties.
Я также попытался положить текст ниже в файле web.xml
<context-param> <param-name>org.jboss.seam.core.init.jndiPattern</param-name> <param-value>earName/#{ejbName}/local</param-value> </context-param>
Даже после выполнения всех вышеперечисленных вещей, шов еще впрыскивает удаленный интерфейс иногда. Я что-то упустил? Может ли кто-нибудь сказать мне, как решить эту проблему, и сказать, что шов всегда вставляет локальный интерфейс?
Мой файл components.xml выглядит следующим образом:
<?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>
И мой EJB компонент выглядит следующим образом:
@Stateless
@Name("myEJBComponent")
@AutoCreate
public class MyEJBComponentImpl implements MyEJBComponentRemote, MyEJBComponentLocal {
public void doSomething() {
}
}
Я проверил журналы jboss, я наблюдал эту строку в файле журнала: DEBUG [org.jboss.seam.Component] (main) org.jboss.seam.core.init.jndiPattern = myEarName/# {ejbName}/local, JndiPattern устанавливается правильно. –
V Кажется правильным! Попробуйте следующее: ** удалите удаленный интерфейс ** и посмотрите, работает ли ваше приложение в порядке. Если нет, покажите свой стек. Если возможно, обойтись без аннотации AutoCreate. –
@Arthur Ronald F D Garcia: Хорошо, я удалил аннотацию AutoCreate и заменил ее на @In (create = true). Я удалил все мои удаленные интерфейсы и запустил приложение 6 раз (потому что даже с удаленным интерфейсом приложение прекрасно работает), он работает отлично все 6 раз. Я думаю, что с удаленным интерфейсом удаленный шов не путается, какой интерфейс использовать, локальный или удаленный. –