2014-10-01 2 views
2

Архитектура: Клиент Windows -> Служба Wildfly JAX-RS -> Унаследованная система JBoss 5.1.0.GA.@Remote JNDI Связь: Wildfly to JBoss AS 5.1.0.GA

Я получаю java.lang.ClassCastException: javax.naming.Reference нельзя передать в com.interfaces.GroupBookingManagerRemote при общении здесь между службами Wildfly JAX-RS и старой системой JBoss 5.1.0.GA.

Как я связываюсь с Wildfly на JBoss AS 5.1.0.GA Я пытаюсь подключиться с помощью JNDI.

В моем Wildfly сервер Maven П включает:

<dependency> 
    <groupId>jboss</groupId> 
    <artifactId>jnp-client</artifactId> 
    <version>4.2.2.GA</version> 
</dependency> 

Это дает мне доступ к требуемой org.jnp * классы и интерфейсы..

Я просто использую следующий код для подключения к удаленному компьютеру и возврата назад GroupBookingManager. Однако проблема возникает, когда я пытаюсь применить класс к интерфейсу GroupBookingManagerRemote.

Properties env = new Properties(); 
env.setProperty(Context.PROVIDER_URL, "jnp://myremoteserver:1099"); 
env.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); 
env.setProperty(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces"); 
InitialContext initialContext = new InitialContext(env); 

Object ref = initialContext.lookup("MyEARFile/GroupBookingManager/remote"); 
if (ref != null) { 
    bookingManager = (GroupBookingManagerRemote) ref; // java.lang.ClassCastException: javax.naming.Reference cannot be cast 
} 

У меня есть myclient.jar файл, который я добавил к моему Wildfly приложение, которое содержит удаленный интерфейс GroupBookingManagerRemote.

Кто-нибудь видит какие-либо проблемы с тем, что я сделал?

Спасибо,

Darren

+0

Человек, который возвращается с машиной времени ... возможно, вы не бросаете объект, но вам нужно сделать PortableRemoteObject.narrow (ref, GroupBookingManagerRemote.class); (не знаю, правильно ли это, я выкопал его из ДЕЙСТВИТЕЛЬНО старых статей wiki компании) – Gimby

+0

К сожалению, это дает мне следующее: java.lang.ClassCastException: javax.naming.Reference нельзя передать в org.omg.CORBA .Object – DarrenD

+0

Тогда, вероятно, это неправильная зависимость. эта версия нечетна - похоже, вы используете зависимость от JBoss 4.2.2 для JBoss 5.1. JBoss всегда имеет общую зависимость jboss-as-client, которая предназначена для подключения к серверу JBoss от клиента, попробуйте использовать это. http://mvnrepository.com/artifact/org.jboss.jbossas/jboss-as-client/5.1.0.GA – Gimby

ответ

2

Спасибо за вашу помощь Gimby,

Я нашел ответ сам после того, как немного больше возиться.

От Wildfly 8.1.0 (клиент) -> JBoss AS 5

Вы не требуете JBoss 5 баночек

Во-первых, вам нужна ссылка на интерфейс, который вы хотите использовать на стороне клиента , Это может быть в вашем-project-client.jar. При использовании Maven вы можете создать хранилище и создать структуру каталогов Maven с использованием MVN

mvn install:install-file -DlocalRepositoryPath=DirectoryName -DcreateChecksum=true -Dpackaging=jar -Dfile=Path-to-you-project-client.jar -DgroupId=YourGroupId -DartifactId=YourartifactId -Dversion=1.0 

Тогда для того, чтобы подключиться к удаленному компьютеру и бросьте интерфейс обратно в интерфейс, вы используете:

final Properties env = new Properties(); 
env.put(Context.INITIAL_CONTEXT_FACTORY, org.jboss.naming.remote.client.InitialContextFactory.class.getName()); 
env.put(Context.PROVIDER_URL, "remote://remoteserver:4447"); 
InitialContext initialContext = new InitialContext(env); 

Это использует wildfly отдаленное: //, который находится в удаленном наименовании и в EJB wildfly-EJB-клиент-бом

<dependency> 
    <groupId>org.wildfly</groupId> 
    <artifactId>wildfly-ejb-client-bom</artifactId> 
    <version>8.1.0.Final</version> 
    <scope>compile</scope> 
    <type>pom</type> 
</dependency> 

и я обязательно эту зависимость для связи

<dependency> 
    <groupId>org.jboss.xnio</groupId> 
    <artifactId>xnio-nio</artifactId> 
    <version>3.2.2.Final</version> 
    <scope>compile</scope> 
</dependency> 

и этот номер для дистанционного именования.

<dependency> 
    <groupId>org.jboss</groupId> 
    <artifactId>jboss-remote-naming</artifactId> 
    <version>2.0.1.Final</version> 
</dependency>     

Также обратите внимание, что порт не ususal порт для JBoss 5 JNDI: 1099 это по умолчанию Remoting Порт: 4447

Object ref = initialContext.lookup("ejb:Your-EAR/YourClass/remote!" + YouClass.class.getName()); 

Вы можете бросить вашу ссылку на свой интерфейс и использовать его в качестве нормальный.

Надеюсь, что это имеет смысл.