간단한 tcp 인바운드 리소스 어댑터 (RA)가 github에서 example project으로 프로 그램되어 standalone-full로 wildfly 10.x에 성공적으로 배포되었습니다 구성. 메시지 수신기 TcpMessageListener
인터페이스는 RA에 있고 ra.xml 설명자에 정의되어 있지만 메시지 구동 Bean (MDB)을 연결할 수 없습니다. RA의 eis 측은 예상대로 작동하며 텔넷을 사용하여 메시지를 연결/전송할 수 있습니다. 나는 제이보스 받는다는 플러그인으로 MDB를 배포하려고하면 MDB는 TcpMessageListener
를 찾을 수 없습니다 나는 java.lang.NoClassDefFoundError
을 가지고 :Wildfly 10.x에서 인바운드 리소스 어댑터에 MDB를 연결하지 못했습니다. - 배포가 실패했습니다.
WARN [org.jboss.modules] (MSC service thread 1-7) Failed to define class de.bitc.ejb.InboundEventHandler in Module "deployment.ra-ear.ear.ra-user-ejb-0.0.1-SNAPSHOT.jar:main" from Service Module Loader: java.lang.NoClassDefFoundError: Failed to link de/bitc/ejb/InboundEventHandler (Module "deployment.ra-ear.ear.ra-user-ejb-0.0.1-SNAPSHOT.jar:main" from Service Module Loader): de/bitc/jca/inflow/TcpMessageListener
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
.
.
.
ERROR [org.jboss.msc.service.fail] (MSC service thread 1-7) MSC000001: Failed to start service jboss.deployment.subunit."ra-ear.ear"."ra-user-ejb-0.0.1-SNAPSHOT.jar".POST_MODULE: org.jboss.msc.service.StartException in service jboss.deployment.subunit."ra-ear.ear"."ra-user-ejb-0.0.1-SNAPSHOT.jar".POST_MODULE: WFLYSRV0153: Failed to process phase POST_MODULE of subdeployment "ra-user-ejb-0.0.1-SNAPSHOT.jar" of deployment "ra-ear.ear"
.
.
.
Caused by: java.lang.NoClassDefFoundError: Failed to link de/bitc/ejb/InboundEventHandler (Module "deployment.ra-ear.ear.ra-user-ejb-0.0.1-SNAPSHOT.jar:main" from Service Module Loader): de/bitc/jca/inflow/TcpMessageListener
.
.
.
ERROR [org.jboss.as.controller.management-operation] (management-handler-thread - 17) WFLYCTL0013: Operation ("add") failed - address: ([("deployment" => "ra-ear.ear")]) - failure description: {
"WFLYCTL0080: Failed services" => {"jboss.deployment.subunit.\"ra-ear.ear\".\"ra-user-ejb-0.0.1-SNAPSHOT.jar\".POST_MODULE" => "org.jboss.msc.service.StartException in service jboss.deployment.subunit.\"ra-ear.ear\".\"ra-user-ejb-0.0.1-SNAPSHOT.jar\".POST_MODULE: WFLYSRV0153: Failed to process phase POST_MODULE of subdeployment \"ra-user-ejb-0.0.1-SNAPSHOT.jar\" of deployment \"ra-ear.ear\"
Caused by: java.lang.NoClassDefFoundError: Failed to link de/bitc/ejb/InboundEventHandler (Module \"deployment.ra-ear.ear.ra-user-ejb-0.0.1-SNAPSHOT.jar:main\" from Service Module Loader): de/bitc/jca/inflow/TcpMessageListener"},
"WFLYCTL0412: Required services that are not installed:" => ["jboss.deployment.subunit.\"ra-ear.ear\".\"ra-user-ejb-0.0.1-SNAPSHOT.jar\".POST_MODULE"],
"WFLYCTL0180: Services with missing/unavailable dependencies" => undefined
EJB를 받는다는 서브 모듈의 의존성은 provided
범위에있다. 나는 RA의 배포와 함께 redhat guide을 따랐다. 나는 또한 ejb 서브 모듈에서 자원 어댑터의 종속성을 컴파일하여 제공하도록 전환했다. 이 경우 나는 다음과 같은 오류
[ERROR] Caused by: java.lang.IllegalStateException: WFLYEJB0383: No message listener of type de.bitc.jca.inflow.TcpMessageListener found in resource adapter tcp-eis.rar"},
"WFLYCTL0412: Required services that are not installed:" => ["jboss.deployment.subunit.\"ra-ear.ear\".\"ra-user-ejb-0.0.1-SNAPSHOT.jar \".component.InboundEventHandler.CREATE"],
"WFLYCTL0180: Services with missing/unavailable dependencies" => undefined}}}
다음
자원 어댑터의 설정이 jboss_cli
에 TcpListenerInterface 여기package de.bitc.jca.inflow;
/**
* TcpMessageListener
*
* @version $Revision: $
*/
public interface TcpMessageListener {
/**
* Receive message
*
* @param msg
* String.
*/
public void onMessage(String msg);
}
MDB를 여기
package de.bitc.ejb;
import java.util.logging.Logger;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import org.jboss.ejb3.annotation.ResourceAdapter;
import de.bitc.jca.inflow.TcpMessageListener;
@MessageDriven(
activationConfig = {
@ActivationConfigProperty(propertyName = "topic", propertyValue = "test")
} //, messageListenerInterface = TcpMessageListener.class
)
@ResourceAdapter(value="tcp-eis.rar")
public class InboundEventHandler implements TcpMessageListener {
/** The logger */
private static Logger log = Logger.getLogger(InboundEventHandler.class.getName());
/**
* Default constructor.
*/
public InboundEventHandler() {
// TODO Auto-generated constructor stub
}
/**
* @see TcpMessageListener#onMessage(String)
*/
@Override
public void onMessage(String msg) {
// TODO Auto-generated method stub
}
}
있습니다입니다
있어/subsystem=resource-adapters/resource-adapter=tcp-eis.rar:read-resource(recursive=true)
{
outcome => success,
result => {
archive => tcp-eis.rar,
beanvalidationgroups => undefined,
bootstrap-context => undefined,
config-properties => undefined,
module => undefined,
statistics-enabled => false,
transaction-support => XATransaction,
wm-security => false,
wm-security-default-groups => undefined,
wm-security-default-principal => undefined,
wm-security-domain => other,
wm-security-mapping-groups => undefined,
wm-security-mapping-required => false,
wm-security-mapping-users => undefined,
admin-objects => undefined,
connection-definitions => undefined
}
}
제 질문은 MDB가 리소스 어댑터를 찾는 배포 단계에서 누락 된 단계가 있는지입니다. 제 생각에는 이것이 @ResourceAdapter
주석으로 끝났다고 생각하십니까? 대기열 또는 다른 것을 정의해야합니까? 인바운드 자원 어댑터에 대한 자원은 매우 드물고 대부분의 예는 아웃 바운드 자원 어댑터입니다. 미리 감사드립니다.
위의 연결된 inbound-ra-example은 github에서 호스팅됩니다. 필자는 github 프로젝트의 README.md에서 모든 단계를 빌드하고 실행하는 방법을 설명했습니다. 문서를 찾기 위해 같은 문제가있는 다른 사람들을 위해이 예제를 제공하고 싶습니다.