users@glassfish.java.net

[gf-users] Re: Handling env-entry application configuration with Glassfish

From: Reza Rahman <reza.rahman_at_oracle.com>
Date: Tue, 22 Jul 2014 12:31:58 -0400

At this stage, unfortunately I don't have much more time to volunteer to this discussion. I'll try to contribute further as time permits. In the meanwhile perhaps you can do a bit more research on your own as to correct spec defined behavior or perhaps someone else can help you out.

It is always possible to file JIRAs against specifications such as EJB/Servlet/Java EE or implementations like GlassFish when desired so proposed changes can be vetted by the correct folks.

Sent from my iPhone

> On Jul 22, 2014, at 12:19 PM, Lachezar Dobrev <l.dobrev_at_gmail.com> wrote:
>
> Using the console I was unable to make it work.
>
> After making your suggested changes:
>
> - Replace @Resource with simplified path
> * this seems to work in the other servers too
>
> - Hard-code env-entry-value in web.xml
>
> The application now deploys.
>
> Digging down I was able to progress one step further:
> bin/asadmin set-web-env-entry ...
> allows changing the environment entries, but:
>
> 1. A hard-coded value in web.xml must be present for this to work
> 2. I could not find a place in the web console to perform this task.
>
> 2014-07-22 15:11 GMT+03:00 Reza Rahman <reza.rahman_at_oracle.com>:
>> Let's kindly start from a working baseline before getting into a discussion of what should and should not be.
>>
>> Did my suggested changes work?
>>
>> Sent from my iPhone
>>
>>> On Jul 22, 2014, at 5:37 AM, Lachezar Dobrev <l.dobrev_at_gmail.com> wrote:
>>>
>>> 1. Yes, env-entry-value is not filled.
>>> These are configuration parameters, and I do not know what values
>>> they will be assigned at deployment time. Hence the env-entry-value is
>>> missing, and I *expect* them to be filled on deployment using whatever
>>> means the server has. Manually *fixing* the web.xml descriptor in an
>>> already packaged (and possibly cryptographically signed) WAR file is
>>> not my idea of server deployment tools.
>>>
>>> 2. Do I *need* to omit the java:comp/env, or I *can* omit the prefix?
>>> With other J2EE servers I was only able to get it running using the
>>> full java:comp/env/config/user location.
>>>
>>>
>>> I find it hard to believe, that deploying and configuring an
>>> application would require:
>>> a) Hard-coding values by the developer.
>>> b) Manually editing packaged files by hand.
>>>
>>> Am I missing something? Am I supposed to recompile/repackage the WAR
>>> for every instance? Because I can't find a way for this to work
>>> otherwise. I thought I am to provide a WAR file with declared
>>> references to configuration parameters, that are configured/linked
>>> when deploying to the server.
>>>
>>>
>>> After hard-coding some values for the configuration attributes in
>>> web.xml and attempting to deploy the application I got:
>>>
>>>> An error has occurred
>>>> Error occurred during deployment: null. Please see server.log for more details.
>>>
>>> And the server.log has:
>>>> [2014-07-22T12:28:03.320+0300] [glassfish 4.0] [INFO] [] [org.glassfish.admingui] [tid: _ThreadID=122 _ThreadName=admin-listener(9)] [timeMillis: 1406021283320] [levelValue: 800] [[
>>>> Exception Occurred :Error occurred during deployment: null. Please see server.log for more details.]]
>>>
>>> Which is unhelpful to say the least. I suspect a NPE occurs
>>> somewhere on the server, but the exception is
>>> masked/wrapped/ignored/printed and the actual cause eludes me.
>>>
>>> The same thing happens if I try to deploy the application without
>>> starting it: I get an error message 'null', and then trying to deploy
>>> the application again yields:
>>>
>>>> An error has occurred
>>>> Error occurred during deployment: Application name DemoApplication is already in use. Please pick a different name.. Please see server.log for more details.
>>>
>>>
>>> 2014-07-21 21:25 GMT+03:00 Reza Rahman <reza.rahman_at_oracle.com>:
>>>> You seem to have two problems:
>>>>
>>>> * env-entry-value is undefined.
>>>> * You simply need @Resource(name = "config/user")
>>>>
>>>>
>>>>> On 7/21/2014 11:53 AM, Lachezar Dobrev wrote:
>>>>>
>>>>> Hello all.
>>>>> I'm having trouble using environment entries to configure an
>>>>> application on deployment in Glassfish.
>>>>>
>>>>> web.xml:
>>>>>
>>>>> <web-app ...>
>>>>> <env-entry>
>>>>> <env-entry-name>config/user</env-entry-name>
>>>>> <env-entry-type>java.lang.String</env-entry-type>
>>>>> </env-entry>
>>>>> </web-app>
>>>>>
>>>>>
>>>>> ServiceProducer.java:
>>>>>
>>>>> @ApplicationScoped
>>>>> public class ServiceProducer {
>>>>> @Produces
>>>>> @Default
>>>>> public Service get() {
>>>>> return new ServiceImpl(user);
>>>>> }
>>>>>
>>>>> private String user;
>>>>> @Resource(name = "java:comp/env/config/user")
>>>>> public void setUser(String user) {
>>>>> this.user = user;
>>>>> }
>>>>> }
>>>>>
>>>>> With "GlassFish Server Open Source Edition 4.0 (build 89)" the
>>>>> ServiceProducer.get() is called before setUser() is called.
>>>>>
>>>>> I'm at a loss here: How can I configure the application?
>>>>>
>>>>> I have added a config/user JNDI Custom Resource:
>>>>> Resource Type: java.lang.String
>>>>> Factory Class:
>>>>> org.glassfish.resources.custom.factory.PrimitivesAndStringFactory
>>>>> Status : Enabled (checked)
>>>>> Properties:
>>>>> name = "value", value = "ConfiguredUserName"
>>>>>
>>>>> Please advise! I'm getting seriously frustrated with this.
>>>>
>>>>