dev@glassfish.java.net

Re: Are Deployers ordered?

From: Hong Zhang <hong.hz.zhang_at_oracle.com>
Date: Mon, 18 Apr 2011 14:12:25 -0400

>>>> No, there is no ordering of the deployers. What happened in the stack trace (DolProvider) is that the GlassFish tried to process the JavaEE related metadata in the application and found none. Even though the GlassFish allows the plug in of extension container, we do assume the application still contains certain JavaEE components in addition to the extension components (except for special case like OSGI module). The GlassFish currently does not support deployment of pure extension module.
>>>>
>>>>
>>>>
>>> that is an un-necessary limitation in my opinion. Why was this error message added ?
>>> if there are no Java EE components, DolProvider should just return an empty Application object or null, I am not sure why it fails deployment all together. can you clarify ?
>>>
>>>
>>>
>> This error message was added to fix issue
>> http://java.net/jira/browse/GLASSFISH-11323
>>
>> There user tried to deploy an entity jar to the GlassFish and got a NPE. When I was fixing the issue, I was thinking we should not allow non-JavaEE archive like this to be deployed to GlassFish, so my fix was to reject the deployment with this error message.
>>
>> I guess we could relax the check to make this current use case to go through. But then in this issue I fixed where the user was deploying an entity jar as an ejb jar, he would not realize he made a mistake..
>>
>
> so the NPE should'nt have happen of course. What would happen if he deploys an entity jar with no DOL and components identified through Annotation, Isn't he going to get the "Cannot find a container capable of handing your jar file" type of message ? That's what should be happening.
Yes, that's what it would happen if user is trying to deploy a library
jar. But in this case, the entity jar is recognized by the JPA sniffer
(it contains a persistence.xml) and the current checking for no suitable
container only checks if the retrieved sniffer list is empty or not..

- Hong


>
>
>>
>>
>>>>
>>>> On 4/16/2011 2:57 AM, Lee Chuk Munn wrote:
>>>>
>>>>
>>>>
>>>>> Hi
>>>>>
>>>>> I'm in the process of implementing JPA for my container (XARContainer)
>>>>> which is not a JavaEE application. I've got XARContainer running, viz
>>>>> this is the container that runs the actual component.
>>>>>
>>>>> I have a separate JPA container XJPAContainer, can't reuse existing
>>>>> cause the app is not JavaEE, which handles JPA.
>>>>>
>>>>> I have indicated in my both my XJPASniffer and XARSniffer that its not
>>>>> compatible with 'org.glassfish.persistence.jpa.JPASniffer'
>>>>> (getIncompatibleSnifferTypes()).
>>>>>
>>>>> When I deploy my app, XJAPSniffer.handles() returns true. I've also
>>>>> added some log statement which shows that XJPAContainer and XJPADeployer
>>>>> have been instantiated by Glassfish. But for some reason,
>>>>> XJPADeployer.prepare() was never called. Instead Glassfish is treating
>>>>> my app as a JavaEE application so I'm getting an exception (see end of
>>>>> this mail).
>>>>>
>>>>> My question is is there some sort of ordering for Deployers? Or is there
>>>>> a way to get GF to give preferences to my deployer?
>>>>>
>>>>> Thanks
>>>>>
>>>>> Regards
>>>>> Chuk
>>>>>
>>>>>
>>>>>
>>>>> [#|2011-04-16T14:23:20.482+0800|SEVERE|glassfish3.1|javax.enterprise.system.core.com.sun.enterprise.v3.server|_ThreadID=54;_ThreadName=Thread-1;|Archive
>>>>> [jpatest] was deployed as a Java EE archive while it does not contain
>>>>> any valid Java EE components. Please check the packaging of the archive.
>>>>> java.lang.RuntimeException: Archive [jpatest] was deployed as a Java EE
>>>>> archive while it does not contain any valid Java EE components. Please
>>>>> check the packaging of the archive.
>>>>> at
>>>>> org.glassfish.javaee.core.deployment.DolProvider.load(DolProvider.java:143)
>>>>> at
>>>>> org.glassfish.javaee.core.deployment.DolProvider.load(DolProvider.java:93)
>>>>> at
>>>>> com.sun.enterprise.v3.server.ApplicationLifecycle.loadDeployer(ApplicationLifecycle.java:826)
>>>>> at
>>>>> com.sun.enterprise.v3.server.ApplicationLifecycle.setupContainerInfos(ApplicationLifecycle.java:768)
>>>>> at
>>>>> com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:368)
>>>>> at
>>>>> com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:240)
>>>>> at
>>>>> org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:370)
>>>>> at
>>>>> com.sun.enterprise.v3.admin.CommandRunnerImpl$1.execute(CommandRunnerImpl.java:355)
>>>>>
>>>>>
>>>>>
>>>>>
>>>
>>>
>>>
>
>