You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@geronimo.apache.org by dinotoa <a....@dueltv.com> on 2008/12/01 20:13:22 UTC

Cannot use @Ejb inside a war in a different ear

I have two different ears, ear A contains an ejb module and the following
geronimo-application.xml
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://geronimo.apache.org/xml/ns/j2ee/application-2.0"
xmlns:sys="http://geronimo.apache.org/xml/ns/deployment-1.2"
application-name="A">
	<sys:environment>
		<sys:moduleId>
			<sys:groupId>Duel</sys:groupId>
			<sys:artifactId>A</sys:artifactId>
			<sys:version>2.0</sys:version>
			<sys:type>car</sys:type>
		</sys:moduleId>
	</sys:environment>
	<module>
		<ejb>A.jar</ejb>
		<openejb-jar xmlns="http://openejb.apache.org/xml/ns/openejb-jar-2.2"
			xmlns:naming="http://geronimo.apache.org/xml/ns/naming-1.2">
			<sys:environment>
				<sys:moduleId>
					<sys:groupId>Duel</sys:groupId>
					<sys:artifactId>A-Core</sys:artifactId>
					<sys:version>2.0</sys:version>
					<sys:type>jar</sys:type>
				</sys:moduleId>
			</sys:environment>
		</openejb-jar>
	</module>
</application>
according to the documentation found in 
http://cwiki.apache.org/GMOxDOC21/referring-to-an-ejb-from-outside-its-ear.html
if I need to connect to an ejb using injection in the form:
@EJB(mappenName=...) 
from a servlet contained in the ear B, I need to insert an explicit
dependency in the geronimo-application.xml of the ear B, in the form:

<application xmlns="http://geronimo.apache.org/xml/ns/j2ee/application-2.0"
	xmlns:sys="http://geronimo.apache.org/xml/ns/deployment-1.2"
	application-name="B">
	<sys:environment>
		<sys:moduleId>
			<sys:groupId>Duel</sys:groupId>
			<sys:artifactId>B</sys:artifactId>
			<sys:version>2.0</sys:version>
			<sys:type>car</sys:type>
		</sys:moduleId>
	</sys:environment>
	<module>
		<web>B-Web_2.0.war</web>
		<web-app xmlns="http://geronimo.apache.org/xml/ns/j2ee/web-2.0.1">
			<sys:environment>
				<sys:moduleId>
					<sys:groupId>Duel</sys:groupId>
					<sys:artifactId>B-Web</sys:artifactId>
					<sys:version>1.0</sys:version>
					<sys:type>war</sys:type>
				</sys:moduleId>
				<sys:dependencies>
					<sys:dependency>
						<sys:groupId>Duel</sys:groupId>
						<sys:artifactId>A-Core</sys:artifactId>
						<sys:version>2.0</sys:version>
						<sys:type>jar</sys:type>
					</sys:dependency>
				</sys:dependencies>
			</sys:environment>
			<context-root>/duel/ima/gui</context-root>
		</web-app>
	</module>
</application>

when I deploy the second ear, the server complains that the dependent module
A-Core.jar is not found, and indeed I cannot find it among  the EJB-JARs in
the console.
What's wrong? Is there any example where this situation is described,
connecting using injections is really difficult in geronimo, you have to
mess with the xml files, which is exactly what the EJB 3 specs  were trying
to eliminate...
Any help is appreciated, thanks in advance
 Antonio
-- 
View this message in context: http://www.nabble.com/Cannot-use-%40Ejb-inside-a-war-in-a-different-ear-tp20775244s134p20775244.html
Sent from the Apache Geronimo - Users mailing list archive at Nabble.com.


Re: Cannot use @Ejb inside a war in a different ear

Posted by dinotoa <a....@dueltv.com>.
Thanks for the answer.
Actually I tried to put de dependency you mentioned, but the ejb isn't
injected either :-(
 Other AS, such as weblogic, don't need any special configuration for beans
in a different ear and actually, I think this should be the normal
behaviour, most of the bean you inject are in different ears, at least in my
experience..


djencks wrote:
> 
> Hi dinotoa,
> 
> ejb jars don't have separate moduleIds separate from the ear  
> containing them.  Your dependency needs to be on
> 
>> 			<sys:groupId>Duel</sys:groupId>
>> 			<sys:artifactId>A</sys:artifactId>
>> 			<sys:version>2.0</sys:version>
>> 			<sys:type>car</sys:type>
> 
> at the ear level.
> 
> I think you may need some geronimo xml to indicate that the ejb-ref is  
> to another ear  -- just having the dependency worked for geronimo 1.x  
> but I think the mechanism has changed a lot in openejb 3.  I haven't  
> set one of these up recently.
> 
> AFAIK you pretty much always need some vendor specific configuration  
> for ejb refs outside an ear, whether done using annotations or xml.   
> For intra-ear references all the annotations work fine without any  
> extra configuration.  If you disagree please provide more details.
> 
> thanks
> david jencks
> 
> On Dec 1, 2008, at 11:13 AM, dinotoa wrote:
> 
>>
>> I have two different ears, ear A contains an ejb module and the  
>> following
>> geronimo-application.xml
>> <?xml version="1.0" encoding="UTF-8"?>
>> <application
>> xmlns="http://geronimo.apache.org/xml/ns/j2ee/application-2.0 
>> "
>> xmlns:sys="http://geronimo.apache.org/xml/ns/deployment-1.2"
>> application-name="A">
>> 	<sys:environment>
>> 		<sys:moduleId>
>> 			<sys:groupId>Duel</sys:groupId>
>> 			<sys:artifactId>A</sys:artifactId>
>> 			<sys:version>2.0</sys:version>
>> 			<sys:type>car</sys:type>
>> 		</sys:moduleId>
>> 	</sys:environment>
>> 	<module>
>> 		<ejb>A.jar</ejb>
>> 		<openejb-jar xmlns="http://openejb.apache.org/xml/ns/openejb- 
>> jar-2.2"
>> 			xmlns:naming="http://geronimo.apache.org/xml/ns/naming-1.2">
>> 			<sys:environment>
>> 				<sys:moduleId>
>> 					<sys:groupId>Duel</sys:groupId>
>> 					<sys:artifactId>A-Core</sys:artifactId>
>> 					<sys:version>2.0</sys:version>
>> 					<sys:type>jar</sys:type>
>> 				</sys:moduleId>
>> 			</sys:environment>
>> 		</openejb-jar>
>> 	</module>
>> </application>
>> according to the documentation found in
>> http://cwiki.apache.org/GMOxDOC21/referring-to-an-ejb-from-outside-its-ear.html
>> if I need to connect to an ejb using injection in the form:
>> @EJB(mappenName=...)
>> from a servlet contained in the ear B, I need to insert an explicit
>> dependency in the geronimo-application.xml of the ear B, in the form:
>>
>> <application
>> xmlns="http://geronimo.apache.org/xml/ns/j2ee/application-2.0 
>> "
>> 	xmlns:sys="http://geronimo.apache.org/xml/ns/deployment-1.2"
>> 	application-name="B">
>> 	<sys:environment>
>> 		<sys:moduleId>
>> 			<sys:groupId>Duel</sys:groupId>
>> 			<sys:artifactId>B</sys:artifactId>
>> 			<sys:version>2.0</sys:version>
>> 			<sys:type>car</sys:type>
>> 		</sys:moduleId>
>> 	</sys:environment>
>> 	<module>
>> 		<web>B-Web_2.0.war</web>
>> 		<web-app xmlns="http://geronimo.apache.org/xml/ns/j2ee/web-2.0.1">
>> 			<sys:environment>
>> 				<sys:moduleId>
>> 					<sys:groupId>Duel</sys:groupId>
>> 					<sys:artifactId>B-Web</sys:artifactId>
>> 					<sys:version>1.0</sys:version>
>> 					<sys:type>war</sys:type>
>> 				</sys:moduleId>
>> 				<sys:dependencies>
>> 					<sys:dependency>
>> 						<sys:groupId>Duel</sys:groupId>
>> 						<sys:artifactId>A-Core</sys:artifactId>
>> 						<sys:version>2.0</sys:version>
>> 						<sys:type>jar</sys:type>
>> 					</sys:dependency>
>> 				</sys:dependencies>
>> 			</sys:environment>
>> 			<context-root>/duel/ima/gui</context-root>
>> 		</web-app>
>> 	</module>
>> </application>
>>
>> when I deploy the second ear, the server complains that the  
>> dependent module
>> A-Core.jar is not found, and indeed I cannot find it among  the EJB- 
>> JARs in
>> the console.
>> What's wrong? Is there any example where this situation is described,
>> connecting using injections is really difficult in geronimo, you  
>> have to
>> mess with the xml files, which is exactly what the EJB 3 specs  were  
>> trying
>> to eliminate...
>> Any help is appreciated, thanks in advance
>> Antonio
>> -- 
>> View this message in context:
>> http://www.nabble.com/Cannot-use-%40Ejb-inside-a-war-in-a-different-ear-tp20775244s134p20775244.html
>> Sent from the Apache Geronimo - Users mailing list archive at  
>> Nabble.com.
>>
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Cannot-use-%40Ejb-inside-a-war-in-a-different-ear-tp20775244s134p20788701.html
Sent from the Apache Geronimo - Users mailing list archive at Nabble.com.


Re: Cannot use @Ejb inside a war in a different ear

Posted by David Jencks <da...@yahoo.com>.
Hi dinotoa,

ejb jars don't have separate moduleIds separate from the ear  
containing them.  Your dependency needs to be on

> 			<sys:groupId>Duel</sys:groupId>
> 			<sys:artifactId>A</sys:artifactId>
> 			<sys:version>2.0</sys:version>
> 			<sys:type>car</sys:type>

at the ear level.

I think you may need some geronimo xml to indicate that the ejb-ref is  
to another ear  -- just having the dependency worked for geronimo 1.x  
but I think the mechanism has changed a lot in openejb 3.  I haven't  
set one of these up recently.

AFAIK you pretty much always need some vendor specific configuration  
for ejb refs outside an ear, whether done using annotations or xml.   
For intra-ear references all the annotations work fine without any  
extra configuration.  If you disagree please provide more details.

thanks
david jencks

On Dec 1, 2008, at 11:13 AM, dinotoa wrote:

>
> I have two different ears, ear A contains an ejb module and the  
> following
> geronimo-application.xml
> <?xml version="1.0" encoding="UTF-8"?>
> <application xmlns="http://geronimo.apache.org/xml/ns/j2ee/application-2.0 
> "
> xmlns:sys="http://geronimo.apache.org/xml/ns/deployment-1.2"
> application-name="A">
> 	<sys:environment>
> 		<sys:moduleId>
> 			<sys:groupId>Duel</sys:groupId>
> 			<sys:artifactId>A</sys:artifactId>
> 			<sys:version>2.0</sys:version>
> 			<sys:type>car</sys:type>
> 		</sys:moduleId>
> 	</sys:environment>
> 	<module>
> 		<ejb>A.jar</ejb>
> 		<openejb-jar xmlns="http://openejb.apache.org/xml/ns/openejb- 
> jar-2.2"
> 			xmlns:naming="http://geronimo.apache.org/xml/ns/naming-1.2">
> 			<sys:environment>
> 				<sys:moduleId>
> 					<sys:groupId>Duel</sys:groupId>
> 					<sys:artifactId>A-Core</sys:artifactId>
> 					<sys:version>2.0</sys:version>
> 					<sys:type>jar</sys:type>
> 				</sys:moduleId>
> 			</sys:environment>
> 		</openejb-jar>
> 	</module>
> </application>
> according to the documentation found in
> http://cwiki.apache.org/GMOxDOC21/referring-to-an-ejb-from-outside-its-ear.html
> if I need to connect to an ejb using injection in the form:
> @EJB(mappenName=...)
> from a servlet contained in the ear B, I need to insert an explicit
> dependency in the geronimo-application.xml of the ear B, in the form:
>
> <application xmlns="http://geronimo.apache.org/xml/ns/j2ee/application-2.0 
> "
> 	xmlns:sys="http://geronimo.apache.org/xml/ns/deployment-1.2"
> 	application-name="B">
> 	<sys:environment>
> 		<sys:moduleId>
> 			<sys:groupId>Duel</sys:groupId>
> 			<sys:artifactId>B</sys:artifactId>
> 			<sys:version>2.0</sys:version>
> 			<sys:type>car</sys:type>
> 		</sys:moduleId>
> 	</sys:environment>
> 	<module>
> 		<web>B-Web_2.0.war</web>
> 		<web-app xmlns="http://geronimo.apache.org/xml/ns/j2ee/web-2.0.1">
> 			<sys:environment>
> 				<sys:moduleId>
> 					<sys:groupId>Duel</sys:groupId>
> 					<sys:artifactId>B-Web</sys:artifactId>
> 					<sys:version>1.0</sys:version>
> 					<sys:type>war</sys:type>
> 				</sys:moduleId>
> 				<sys:dependencies>
> 					<sys:dependency>
> 						<sys:groupId>Duel</sys:groupId>
> 						<sys:artifactId>A-Core</sys:artifactId>
> 						<sys:version>2.0</sys:version>
> 						<sys:type>jar</sys:type>
> 					</sys:dependency>
> 				</sys:dependencies>
> 			</sys:environment>
> 			<context-root>/duel/ima/gui</context-root>
> 		</web-app>
> 	</module>
> </application>
>
> when I deploy the second ear, the server complains that the  
> dependent module
> A-Core.jar is not found, and indeed I cannot find it among  the EJB- 
> JARs in
> the console.
> What's wrong? Is there any example where this situation is described,
> connecting using injections is really difficult in geronimo, you  
> have to
> mess with the xml files, which is exactly what the EJB 3 specs  were  
> trying
> to eliminate...
> Any help is appreciated, thanks in advance
> Antonio
> -- 
> View this message in context: http://www.nabble.com/Cannot-use-%40Ejb-inside-a-war-in-a-different-ear-tp20775244s134p20775244.html
> Sent from the Apache Geronimo - Users mailing list archive at  
> Nabble.com.
>