Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / EJB - продолжение разбора полетов / 25 сообщений из 41, страница 1 из 2
24.12.2013, 09:59:41
    #38510749
NDAleksey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB - продолжение разбора полетов
Доброго времени, форумчане!
Продолжаю мучить изучать EJB, но никак вот не могу понять. Есть двух модульный maven-проект (три pom.xml). В EJB-модуле прописаны remote/stateless/statefull бины, в client-части public static main с вызовом методов из remote interface-а. Все собирается в pom-файл и деплоится на JBoss7.
Вопрос: пишу GUI приложение в котором хотел бы использовать те методы. Как это сделать?

P.S. сам проект
...
Рейтинг: 0 / 0
24.12.2013, 11:17:09
    #38510838
WGA
WGA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB - продолжение разбора полетов
NDAleksey,

Наверное, так .
...
Рейтинг: 0 / 0
24.12.2013, 11:48:11
    #38510894
NDAleksey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB - продолжение разбора полетов
WGANDAleksey,

Наверное, так .

я не хочу то приложение запускать, я хочу его методы использовать в своем приложении
...
Рейтинг: 0 / 0
24.12.2013, 11:50:53
    #38510900
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB - продолжение разбора полетов
Что-то не догнал. Проблема-то в чем? Вопрос как в Maven делать зависимости между модулями?
...
Рейтинг: 0 / 0
24.12.2013, 12:48:19
    #38510998
NDAleksey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB - продолжение разбора полетов
BlazkowiczЧто-то не догнал. Проблема-то в чем? Вопрос как в Maven делать зависимости между модулями?
Нееее... Это мы с Вами проходили. С этим все в порядке!

Есть Maven-проект ( client-mavenModule + server-side-mavenModule ). Я его собираю с плагином в jar-ник и кидаю на апп_сервер. Он успешно деплоится.

server-side состоит из RemoteCalculator.java(@Remote) и CalculatorBean.java(@Stateless). В RemoteCalculator есть метод: int add(int, int).

Я его хотел дернуть. Через JNDI.lookup у меня не получилось. В примере том создается модуль client, где делается invoke по lookup. Приведу тут, что там делается:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
public class RemoteEJBClient
{
	public static void main( String[] args ) throws Exception {
		// Invoke a stateless bean
		invokeStatelessBean();
	}
	public static void invokeStatelessBean() throws NamingException	{
		// Let's lookup the remote stateless calculator
		final RemoteCalculator statelessRemoteCalculator = lookupRemoteStatelessCalculator();
		System.out.println( "Obtained a remote stateless calculator for invocation" );
		// invoke on the remote calculator
		int a = 204;
		int b = 340;
		System.out
				.println( "Adding " + a + " and " + b + " via the remote stateless calculator deployed on the server" );
		int sum = statelessRemoteCalculator.add( a, b );
		System.out.println( "Remote calculator returned sum = " + sum );
		if ( sum != a + b ) {
			throw new RuntimeException(
					"Remote stateless calculator returned an incorrect sum " + sum + " ,expected sum was " + ( a
							+ b ) );
		}
		// try one more invocation, this time for subtraction
		int num1 = 3434;
		int num2 = 2332;
		System.out.println( "Subtracting " + num2 + " from " + num1
				+ " via the remote stateless calculator deployed on the server" );
		int difference = statelessRemoteCalculator.subtract( num1, num2 );
		System.out.println( "Remote calculator returned difference = " + difference );
		if ( difference != num1 - num2 ) {
			throw new RuntimeException( "Remote stateless calculator returned an incorrect difference " + difference
					+ " ,expected difference was " + ( num1 - num2 ) );
		}
	}

	private static RemoteCalculator lookupRemoteStatelessCalculator() throws NamingException {
		final Hashtable jndiProperties = new Hashtable();
		jndiProperties.put( Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming" );
		final Context context = new InitialContext( jndiProperties );

		return ( RemoteCalculator ) context	.lookup( "ejb:/jboss-ejb-remote-server-side/CalculatorBean!" + RemoteCalculator.class.getName() );
	}
}



Вот у меня вопросы:
зачем определена main, если проект будет деплоиться на сервер?

как мне воспользоваться калькулятором?
Щас попробовал просто сделать так:
Код: java
1.
2.
3.
4.
public static void main( String... args ) {
    RemoteCalculator calculator = new CalculatorBean();
    System.out.println( "result = " + calculator.add( 5, 6 ) );
}


Отработало и вернуло результат. Но разве при этом создается сессионный бин?
...
Рейтинг: 0 / 0
24.12.2013, 12:50:24
    #38511005
NDAleksey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB - продолжение разбора полетов
NDAleksey...
Отработало и вернуло результат. Но разве при этом создается сессионный бин?

Я это сделал отдельным консольным приложением.
...
Рейтинг: 0 / 0
24.12.2013, 12:53:47
    #38511013
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB - продолжение разбора полетов
1) Задеплойте EJB jar в Jboss
2) Зайдите в web console
3) Найдите там JNDI дерево и JNDI имя своих бинов в нем
...
Рейтинг: 0 / 0
24.12.2013, 12:54:28
    #38511016
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB - продолжение разбора полетов
Ну, то есть проблема локализовалась в JNDI lookup, о котором в первом посте почему-то не слова.
...
Рейтинг: 0 / 0
24.12.2013, 15:22:31
    #38511211
NDAleksey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB - продолжение разбора полетов
Blazkowicz1) Задеплойте EJB jar в Jboss
2) Зайдите в web console
3) Найдите там JNDI дерево и JNDI имя своих бинов в нем

1) Задеплоил
2) Зашел
3) Не нашел бинов (прилагаю картинку)

Проблема локализуется не совсем в JNDI. Я делал много попыток "дернуть" бины через различные JNDI варианты, которые находил в инете. Но не получилось. Если Вы мне дадите 100% работающий код, то я буду безмерно счастлив!!!)))
...
Рейтинг: 0 / 0
24.12.2013, 15:35:44
    #38511220
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB - продолжение разбора полетов
Дык, чет не видать чтобы
jboss-ejb-remote-server-side.jar
был задеплоен.
...
Рейтинг: 0 / 0
24.12.2013, 15:55:15
    #38511241
NDAleksey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB - продолжение разбора полетов
BlazkowiczДык, чет не видать чтобы
jboss-ejb-remote-server-side.jar
был задеплоен.

я же говорил, что:
Есть Maven-проект ( client-mavenModule + server-side-mavenModule ) - вот он и есть jboss-ejb-romote-client.
...
Рейтинг: 0 / 0
24.12.2013, 15:57:07
    #38511244
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB - продолжение разбора полетов
NDAlekseyя же говорил, что:
Есть Maven-проект ( client-mavenModule + server-side-mavenModule ) - вот он и есть jboss-ejb-romote-client.
Няня я у них поел.
Есть сервер. Есть клиент. Клиент деплоиться в JBoss. Сервер не деплоиться никуда. Занавес.
...
Рейтинг: 0 / 0
24.12.2013, 16:03:28
    #38511253
NDAleksey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB - продолжение разбора полетов
BlazkowiczNDAlekseyя же говорил, что:
Есть Maven-проект ( client-mavenModule + server-side-mavenModule ) - вот он и есть jboss-ejb-romote-client.
Няня я у них поел.
Есть сервер. Есть клиент. Клиент деплоиться в JBoss. Сервер не деплоиться никуда. Занавес.

Я тоже люблю пошутить, но мне реально не до шуток. Я, черт возьми, не понимаю ничего. Эту структуру мне указал начальник. В том примере, который я дал в первом посте все находится в одном проекте. И я, так полагаю, он должен деплоиться. У меня в клиенет контекстом вызываются бины из server-side. После Ваших слов, я вообще ничего не понимаю.... = (
...
Рейтинг: 0 / 0
24.12.2013, 16:11:49
    #38511267
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB - продолжение разбора полетов
Два maven модуля создают два артифакта. Где артефакт который создаёт server-side модуль?
...
Рейтинг: 0 / 0
24.12.2013, 16:19:22
    #38511279
NDAleksey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB - продолжение разбора полетов
BlazkowiczДва maven модуля создают два артифакта. Где артефакт который создаёт server-side модуль?

pom-основного модуля:
<groupId>org.jboss.quickstarts.eap</groupId>
<artifactId>jboss-ejb-remote-parent</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<name>JBoss EAP Quickstart: ejb-remote</name>

<modules>
<module>server-side</module>
<module>client</module>
</modules>

pom server-side модуля:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<groupId>org.jboss.quickstarts.eap</groupId>
	<artifactId>jboss-ejb-remote-server-side</artifactId>
	<packaging>jar</packaging>
	<name>JBoss EAP Quickstart: ejb-remote - server-side</name>

	<parent>
		<groupId>org.jboss.quickstarts.eap</groupId>
		<artifactId>jboss-ejb-remote-parent</artifactId>
		<version>1.0-SNAPSHOT</version>
	</parent>



pom client-модуля:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<groupId>org.jboss.quickstarts.eap</groupId>
	<artifactId>jboss-ejb-remote-client</artifactId>
	<packaging>jar</packaging>
	<name>JBoss EAP Quickstart: ejb-remote - client</name>
	<description>JBoss EAP Quickstart: ejb-remote-client</description>

	<parent>
		<groupId>org.jboss.quickstarts.eap</groupId>
		<artifactId>jboss-ejb-remote-parent</artifactId>
		<version>1.0-SNAPSHOT</version>
	</parent>



все собирается специальным плагинов в основном pom-нике в jar-архив, который я деплою. вот - два в одном. бины в server-side. lookup- в client-е
...
Рейтинг: 0 / 0
24.12.2013, 16:25:13
    #38511289
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB - продолжение разбора полетов
У меня, правда слова заканчиваются.

Build and Deploy the Quickstart
Since this quickstart builds two separate components , you can not use the standard Build and Deploy commands used by most of the other quickstarts. You must follow these steps to build, deploy, and run this quickstart.

Make sure you have started the JBoss server. See the instructions in the previous section.
Open a command prompt and navigate to the ejb-remote quickstart directory

Build and install the server side component:

Navigate to the server-side subdirectory:

cd server-side

Build the EJB and client interfaces JARs and install them in your local Maven repository.

mvn clean install

Deploy the EJB JAR to your server . This maven goal will deploy server-side/target/jboss-ejb-remote-server-side.jar . You can check the JBoss server console to see information messages regarding the deployment.

mvn jboss-as:deploy

Build and run the client application

Navigate to the server-side subdirectory:

cd ../client

Compile the client code

mvn clean compile

Execute the client application within Maven

mvn exec:exec
...
Рейтинг: 0 / 0
24.12.2013, 16:31:40
    #38511298
NDAleksey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB - продолжение разбора полетов
BlazkowiczУ меня, правда слова заканчиваются.

..... спасибо за терпение.... )
...
Рейтинг: 0 / 0
25.12.2013, 09:58:30
    #38511758
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB - продолжение разбора полетов
NDAlekseyДоброго времени, форумчане!
Продолжаю мучить изучать EJB, но никак вот не могу понять. Есть двух модульный maven-проект (три pom.xml). В EJB-модуле прописаны remote/stateless/statefull бины, в client-части public static main с вызовом методов из remote interface-а. Все собирается в pom-файл и деплоится на JBoss7.
Вопрос: пишу GUI приложение в котором хотел бы использовать те методы. Как это сделать?

Надо делать четырёхмодульный.
1. все константы, entity, remote-интерфейсы.
2. серверная часть, использует 1ю.
3. EAR, включающий в себя 1 и 2.
4. клиент, использующий 1 и при сборке включающий его в свои либы.
...
Рейтинг: 0 / 0
25.12.2013, 10:17:42
    #38511770
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB - продолжение разбора полетов
Alexey Tomin, 2 и 3 можно объединить при желании в один модуль.
...
Рейтинг: 0 / 0
25.12.2013, 12:41:09
    #38511973
NDAleksey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB - продолжение разбора полетов
Проблема более менее прояснилась. Дело в том, что я сделал пример похожий на тот, ссылку на который давал. Поэтому не мог взять в толк, почему на сервер получались EJB JAR архивы. Не разобрался в описании проекта (не хотелось) - а зря. Спасибо Blazkowicz)

Все дело в
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-ejb-plugin</artifactId>
	<version>${version.ejb.plugin}</version>
	<configuration>
		<ejbVersion>3.1</ejbVersion>
		<!-- this is false by default -->
		<generateClient>true</generateClient>
	</configuration>
</plugin>



этом плагине, который собирает доп. имя_модуля-client.jar архив. Вот его-то, наверное, и имел в виду Blazkowicz (если ошибаюсь - прошу исправить).

Теперь у меня другая ошибка. Сперва напишу что было сделано:

Создал maven-проект CalculatorService:

RemoteCalculator.java:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
package com.calculator;

import javax.ejb.Remote;

@Remote
public interface RemoteCalculator {
	int add( int op1, int op2 );
	int sub( int op1, int op2 );
}



CalculatorBean.java:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
package com.calculator;

import javax.ejb.Stateless;

@Stateless
public class CalculatorBean implements RemoteCalculator {
	@Override
	public int add( int op1, int op2 ) {
		return op1 + op2;
	}

	@Override
	public int sub( int op1, int op2 ) {
		return op1 - op2;
	}
}



pom.xml:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.calculator</groupId>
    <artifactId>ejb-remote-stateless</artifactId>
    <version>1.0-SNAPSHOT</version>
	<packaging>ejb</packaging>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

		<version.jboss.maven.plugin>7.4.Final</version.jboss.maven.plugin>
		<version.ejb.plugin>2.3</version.ejb.plugin>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.jboss.spec</groupId>
			<artifactId>jboss-javaee-all-7.0</artifactId>
			<version>1.0.0.Beta2</version>
			<scope>compile</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-ejb-plugin</artifactId>
				<version>${version.ejb.plugin}</version>
				<configuration>
					<ejbVersion>3.1</ejbVersion>
					<generateClient>true</generateClient>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>



Собрал проект. Задеплоил ОБА jar-ника на сервер. Написал Клиента:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
public class EJBClient {
	private static void invokeStatelessBean() throws NamingException {
		RemoteCalculator statelessRemoteCalculator = lookupRemoteStatelessCalculator();
		int sum = statelessRemoteCalculator.add( 3, 4 );
		System.out.println( "sum = " + sum );
	}

	private static RemoteCalculator lookupRemoteStatelessCalculator() throws NamingException {
		Security.addProvider( new JBossSaslProvider() );
		final Hashtable<String, String> p = new Hashtable<String, String>();
		p.put( Context.PROVIDER_URL, "remote://localhost:4447" );
		p.put( Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming" );
		p.put( Context.SECURITY_PRINCIPAL, "admin" );
		p.put( Context.SECURITY_CREDENTIALS, "jboss" );
		final Context context = new InitialContext( p );
		return ( RemoteCalculator ) context
				.lookup( "java:/ejb-remote-stateless-1.0-SNAPSHOT/CalculatorBean!com.calculator.RemoteCalculator" );
	}

	public static void main( String... args ) {
		try {
			invokeStatelessBean();
		} catch ( NamingException e ) {
			e.printStackTrace();
		}
	}
}



Запускаю. Чувствуется, что идет коннект. После этого получаю следующее:

Exception in thread "main" javax.naming.NamingException: Failed to create remoting connection [Root exception is java.lang.RuntimeException: Operation failed with status WAITING]
at org.jboss.naming.remote.client.ClientUtil.namingException(ClientUtil.java:36)
at org.jboss.naming.remote.client.InitialContextFactory.getInitialContext(InitialContextFactory.java:121)
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:684)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307)
at javax.naming.InitialContext.init(InitialContext.java:242)
at javax.naming.InitialContext.<init>(InitialContext.java:216)
at Main.lookupRemoteStatelessCalculator(Main.java:31)
at Main.main(Main.java:46)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: java.lang.RuntimeException: Operation failed with status WAITING
at org.jboss.naming.remote.protocol.IoFutureHelper.get(IoFutureHelper.java:89)
at org.jboss.naming.remote.client.NamingStoreCache.getRemoteNamingStore(NamingStoreCache.java:56)
at org.jboss.naming.remote.client.InitialContextFactory.getOrCreateCachedNamingStore(InitialContextFactory.java:166)
at org.jboss.naming.remote.client.InitialContextFactory.getOrCreateNamingStore(InitialContextFactory.java:139)
at org.jboss.naming.remote.client.InitialContextFactory.getInitialContext(InitialContextFactory.java:104)
... 11 more

Что это такое и как с ним бороться?
...
Рейтинг: 0 / 0
25.12.2013, 15:48:48
    #38512260
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB - продолжение разбора полетов
NDAleksey,

Я подзабыл уже EJB вообще, но насколько помню, 7.1 очень заморочен в вопросах видимости.
В том проекте деление такое- jar от server-side кладётся на сервер, а клиент содержит обе jar'ки.
Класть client на сервер не надо.

Я так и не понял- тот проект, собранный строго как сказано, заработал?
Т.е. "Remote calculator returned difference = " и прочее написал в консоли?
...
Рейтинг: 0 / 0
25.12.2013, 16:34:17
    #38512322
NDAleksey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB - продолжение разбора полетов
Alexey TominNDAleksey,

Я подзабыл уже EJB вообще, но насколько помню, 7.1 очень заморочен в вопросах видимости.
В том проекте деление такое- jar от server-side кладётся на сервер, а клиент содержит обе jar'ки.
Класть client на сервер не надо.

Я так и не понял- тот проект, собранный строго как сказано, заработал?
Т.е. "Remote calculator returned difference = " и прочее написал в консоли?

да, мне тоже кажется, что он подзаморочен, хотя может я не умею читать документацию)
да, то что не надо класть, я это понял. по чистой логике нечего ему там делать.
проект не заработал = ( у меня было несколько иное заполнение контекста (если присмотреться). а в моем предыдущем посте я указал новое заполнение, после того как нашел парочку статей ( одна из них ).
но я не понимаю, почему случается RuntimeException. щас хоть чувствуется, что идет подключение.
здесь автор статьи объясняет вроде что и почему, я следую инструкциям, но все равно не работает. уже не знаю, что делать....
...
Рейтинг: 0 / 0
25.12.2013, 19:37:12
    #38512481
WGA
WGA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB - продолжение разбора полетов
NDAleksey,

Тынц
...
Рейтинг: 0 / 0
26.12.2013, 11:27:54
    #38512887
NDAleksey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB - продолжение разбора полетов
WGANDAleksey,

Тынц

не совсем понял, где там описание моей ошибки...

кстати, попробовал стартовать при выключенном jboss - результат тот же... = (
...
Рейтинг: 0 / 0
26.12.2013, 12:24:30
    #38512951
WGA
WGA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB - продолжение разбора полетов
NDAlekseyWGANDAleksey,

Тынц

не совсем понял, где там описание моей ошибки...Это не описание ошибки, а пошаговая инструкция по написанию remote-client. Я просто документацию JBoss почитываю, попалось на глаза. Вроде Ваш случай.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / EJB - продолжение разбора полетов / 25 сообщений из 41, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]