persistence@glassfish.java.net

Re: Re1: Code review for: [Issue 1107] Logger defined by a property doesn't work]

From: Marina Vatkina <Marina.Vatkina_at_Sun.COM>
Date: Tue, 17 Oct 2006 12:47:21 -0700

Hi Sahoo,

This seems to be the container issue, as it happens only if I redeploy without
executing a client in between the deploys. Looks like EMF.close() is not called
in that case. Can you check?

thanks,
-marina

Marina Vatkina wrote:
> Tom,
>
> I need to look at that more, as redeploying now causes an exception
> (Sahoo, I do
> not have your latest changes - this is the previous night snapshot):
>
> Exception [TOPLINK-28009] (Oracle TopLink Essentials - 9.1 (Build non
> promoted: 10/16/2006)):
> oracle.toplink.essentials.exceptions.EntityManagerSetupException
> Exception Description: Attempted to redeploy a session named
> file:/faith4/gf/publish/glassfish/domains/domain1/applications/j2ee-apps/ex1-ee/entities.jar-pu1
> without closing it.
> at
> oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerSetupImpl.addSessionToGlobalSessionManager(EntityManagerSetupImpl.java:246)
>
> at
> oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerSetupImpl.setServerSessionName(EntityManagerSetupImpl.java:776)
>
> at
> oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerSetupImpl.predeploy(EntityManagerSetupImpl.java:465)
>
> at
> oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider.createContainerEntityManagerFactory(EntityManagerFactoryProvider.java:152)
>
>
> -marina
>
> Tom Ware wrote:
>
>> Hi Marina,
>>
>> In general, I think the code looks good.
>>
>> A couple comments below related to Wonsoek's earlier comments:
>>
>>
>> Wonseok Kim wrote:
>>
>>> Marina,
>>> Some comments...
>>>
>>> 1. Could you update the default level with INFO in
>>> PropertiesHandler.LoggingLevelProp class?
>>>
>>> protected static class LoggingLevelProp extends Prop {
>>> LoggingLevelProp() {
>>> super(TopLinkProperties.LOGGING_LEVEL,
>>> Level.CONFIG.getName());
>>>
>>> Also this should be updated in the TopLink JPA documentation.
>>> http://www.oracle.com/technology/products/ias/toplink/jpa/resources/toplink-jpa-extensions.html#TopLinkLogging
>>>
>>>
>> I agree.
>>
>>> 2. If a user specify the toplink.session-name property, your code
>>> will use the default namespace(" oracle.toplink.essentials.default").
>>> I think it should be considered in setServerSessionName().
>>
>>
>>
>>
>> This is important. The user specified name should definitely be
>> considered.
>>
>>>
>>> 3. I would like to know there is a resolution about the level for a
>>> specific category. DefaultSessionLog doesn't support this. JavaLog
>>> supports this but it is not easy to set the level by a user - should
>>> know the generated session name(long and location dependent).
>>> It would be very useful if a user can set the level of 'sql' category
>>> to see only the generated SQLs. Another property like
>>> "toplink.logging.level.<category>" can be an option for this. Is
>>> there any idea?
>>
>>
>>
>> We should definitely add an issue to ensure the categories work.
>>
>> -Tom
>>
>>>
>>> Others look good to me.
>>>
>>> Thanks,
>>> - Wonseok
>>>
>>> On 10/17/06, *Marina Vatkina* <Marina.Vatkina_at_sun.com
>>> <mailto:Marina.Vatkina_at_sun.com>> wrote:
>>>
>>> Tom, Wonseok, Mitesh,
>>>
>>> Please review the changes. They combine the discussions in this
>>> thread
>>> and CONFIG log messages in the (short) other.
>>>
>>> thanks,
>>> -marina
>>>
>>> Tom Ware wrote On 10/16/06 13:55,:
>>> >
>>> > Marina Vatkina wrote:
>>> >
>>> >
>>> >>Hi Tom,
>>> >>
>>> >>Tom Ware wrote On 10/16/06 07:09,:
>>> >>
>>> >>
>>> >>
>>> >>>Hi Marina,
>>> >>>
>>> >>> Lets not add the separate property for now and continue to set
>>> both
>>> >>>loggers at initialization time. I think the issue with the
>>> default
>>> >>>logger being set by each persistence unit is one that will have
>>> a fairly
>>> >>>low impact on users.
>>> >>>
>>> >>>
>>> >>
>>> >>RI agree. With the only exception that its name is "...default".
>>> >>
>>> >>But before I finalize my changes, I have one more question: all
>>> the changes
>>> >>to the logger names are being done in the JavaLog class which
>>> means that
>>> >>they have no affect on SE loggers unless the users specify the
>>> new option
>>> >>added by Wonseok. But you are concerned about the session name.
>>> So how does
>>> >>the user-specified session name come into the picture?
>>> >>
>>> >>
>>> >
>>> > As long as the session has the correct name at the time we
>>> initialize
>>> > the loggers, it should not matter whether the use has specified
>>> the
>>> > session name or we have defaulted it.
>>> >
>>> >
>>> >>
>>> >>
>>> >>
>>> >>> Perhaps we should enter an enhancement that says something like:
>>> >>>Currently the Default logger is used for some of the initial
>>> setup
>>> >>>messages in JPA. Changing the logging level in JPA affects the
>>> logging
>>> >>>level of the default logger and therefore potentially affects
>>> users of
>>> >>>the default logger outside of the persistence unit. TopLink
>>> should be
>>> >>>enhanced to allow persistence units to log messages before the
>>> session
>>> >>>is available at all the available levels without having the log
>>> level
>>> >>>for the persistence unit affect future users of the default log.
>>> >>>
>>> >>>
>>> >>
>>> >>We have an IT that says that AbstractSessionLog is being
>>> constantly changed:
>>> >> https://glassfish.dev.java.net/issues/show_bug.cgi?id=1113. Do
>>> you want to
>>> >>change that one, or file another? Feel free to do either one.
>>> >>
>>> >>
>>> >
>>> > That one looks fine.
>>> >
>>> > -Tom
>>> >
>>> >
>>> >>thanks,
>>> >>-marina
>>> >>
>>> >>
>>> >>
>>> >>
>>> >>>-Tom
>>> >>>
>>> >>>Marina Vatkina wrote:
>>> >>>
>>> >>>
>>> >>>
>>> >>>
>>> >>>
>>> >>>>Hi Tom,
>>> >>>>
>>> >>>>This is not a problem. Do you want to be able to set the
>>> default logger
>>> >>>>level from a separate PU property (if yes, in all envs or Java
>>> SE only)?
>>> >>>>
>>> >>>>thanks,
>>> >>>>-marina
>>> >>>>
>>> >>>>Tom Ware wrote:
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>>
>>> >>>>>Hi Marina,
>>> >>>>>
>>> >>>>>How about the following:
>>> >>>>>
>>> >>>>>1. Change the namespace for the default logger to
>>> >>>>>"oracle.toplink.essentials.default".
>>> >>>>>2. Change the namespace for the session loggers to
>>> >>>>>"oracle.toplink.essentials.session.<sessionName>
>>> >>>>>
>>> >>>>>That way we can avoid a clash between the default logger and
>>> the
>>> >>>>>session loggers.
>>> >>>>>
>>> >>>>>What do you think?
>>> >>>>>-Tom
>>> >>>>>
>>> >>>>>Marina Vatkina wrote:
>>> >>>>>
>>> >>>>>
>>> >>>>>
>>> >>>>>
>>> >>>>>
>>> >>>>>
>>> >>>>>
>>> >>>>>>Hi Tom,
>>> >>>>>>
>>> >>>>>>What behavior would you like to see (keeping in mind that
>>> >>>>>>AbstractSessionLog
>>> >>>>>>doesn't have a name, and is used only for a limited
>>> pre-session-creation
>>> >>>>>>configuration).
>>> >>>>>>
>>> >>>>>>BTW, now that we create a session and name it at the time we
>>> create
>>> >>>>>>the loggers,
>>> >>>>>>can we get rid of the AbstractSessionLog instance altogether?
>>> >>>>>>
>>> >>>>>>thanks,
>>> >>>>>>-marina
>>> >>>>>>
>>> >>>>>>Tom Ware wrote:
>>> >>>>>>
>>> >>>>>>
>>> >>>>>>
>>> >>>>>>
>>> >>>>>>
>>> >>>>>>
>>> >>>>>>
>>> >>>>>>
>>> >>>>>>>Hi Marina,
>>> >>>>>>>
>>> >>>>>>>The reason I am concerned (and the reason I am slow getting
>>> back to
>>> >>>>>>>you) is that all of the following make it so there is a
>>> session name
>>> >>>>>>>is a "reserved word" since the namespace for a session is
>>> >>>>>>>oracle.toplink.essentials.<sessionName>
>>> >>>>>>>
>>> >>>>>>>- oracle.toplink.essentials.default
>>> >>>>>>>- oracle.toplink.essentials.default-logger
>>> >>>>>>>- oracle.toplink.essentials.non-session
>>> >>>>>>>
>>> >>>>>>>I am trying to figure out if there is a reasonable way to
>>> solve this
>>> >>>>>>>problem and avoid having a session name that behaves
>>> differently (no
>>> >>>>>>>matter how obscure the name ends up being). In addition, I
>>> am hoping
>>> >>>>>>>to keep the name spaces so they are intuitive.
>>> >>>>>>>
>>> >>>>>>>-Tom
>>> >>>>>>>
>>> >>>>>>>Marina Vatkina wrote:
>>> >>>>>>>
>>> >>>>>>>
>>> >>>>>>>
>>> >>>>>>>
>>> >>>>>>>
>>> >>>>>>>
>>> >>>>>>>
>>> >>>>>>>
>>> >>>>>>>
>>> >>>>>>>>Tom,
>>> >>>>>>>>
>>> >>>>>>>>One more thought: may be we should assign
>>> AbstractSessionLog namespace
>>> >>>>>>>>called oracle.toplink.essentials.non-session or something
>>> to that
>>> >>>>>>>>extent?
>>> >>>>>>>>It's not a default logger, and a different name will
>>> clarify a lot
>>> >>>>>>>>of confusion.
>>> >>>>>>>>
>>> >>>>>>>>thanks,
>>> >>>>>>>>-marina
>>> >>>>>>>>
>>> >>>>>>>>Marina Vatkina wrote:
>>> >>>>>>>>
>>> >>>>>>>>
>>> >>>>>>>>
>>> >>>>>>>>
>>> >>>>>>>>
>>> >>>>>>>>
>>> >>>>>>>>
>>> >>>>>>>>
>>> >>>>>>>>
>>> >>>>>>>>
>>> >>>>>>>>>Hi Tom,
>>> >>>>>>>>>
>>> >>>>>>>>>Tom Ware wrote:
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>>Hi Marina,
>>> >>>>>>>>>>
>>> >>>>>>>>>>Comments inline.
>>> >>>>>>>>>>
>>> >>>>>>>>>>Marina Vatkina wrote:
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>>Hi Tom,
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>About the name (your other email) - we can use
>>> something else
>>> >>>>>>>>>>>other than
>>> >>>>>>>>>>>"default", or we can document that a session named
>>> "default" will
>>> >>>>>>>>>>>have
>>> >>>>>>>>>>>the same log level as the default logger (whether
>>> explicitly
>>> >>>>>>>>>>>specified
>>> >>>>>>>>>>>or not).
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>I have a strong preference towards a solution that does
>>> not not
>>> >>>>>>>>>>make any potential session names into "reserved words"
>>> and will
>>> >>>>>>>>>>required some convincing that a solution that makes any
>>> session
>>> >>>>>>>>>>name into a "reserved word" is the only reasonable way
>>> forward.
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>No problem. Worth discussing ;)
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>>>Here are my thoughts about the options:
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>Tom Ware wrote:
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>>I am still brainstorming for ideas. So far here's all
>>> I have
>>> >>>>>>>>>>>>come up with.
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>1. Do not change the namespace
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>We know it causes all types of problems if PU
>>> properties apply to
>>> >>>>>>>>>>>the AbstractSessionLog.
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>That's why I am trying to figure out an alternate way of
>>> dealing
>>> >>>>>>>>>>with the default logger stored on AbstractSessionLog.
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>>2. Add a property that allows the default TopLink
>>> logging level
>>> >>>>>>>>>>>>to be set. ( toplink.logging.level.default or
>>> something like that).
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>Do you mean for the AbstractSessionLog to ignore the
>>> current
>>> >>>>>>>>>>>toplink.logging.level specified in a PU and use the
>>> default unless
>>> >>>>>>>>>>>explicitly specified by the
>>> toplink.logging.level.default?
>>> >>>>>>>>>>>Can be an option.
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>Your interpretation of my suggestion is correct. I am
>>> open to
>>> >>>>>>>>>>other suggestions as well.
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>>3. Document the new property as the only way to
>>> change the
>>> >>>>>>>>>>>>logging level for pre-session-creation configuration
>>> (i.e.the
>>> >>>>>>>>>>>>only way to change the logging level of the default
>>> logger on
>>> >>>>>>>>>>>>AbstractSessionLog). Also, document the fact that
>>> setting the
>>> >>>>>>>>>>>>value of this property in any persistence unit could
>>> affect
>>> >>>>>>>>>>>>other persistence units and will override any parent
>>> logging
>>> >>>>>>>>>>>>setting.
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>No, it shouldn't override the parent, i.e.
>>> >>>>>>>>>>>toplink.logging.level.default
>>> >>>>>>>>>>>will not affect
>>>
>>> >>>>>>>>>>>toplink.logging.level.<very-long-constructed-session-name>.
>>>
>>> >>>>>>>>>>>This was the reason to add its own name to the default
>>> logger.
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>First, in case my phrasing was not clear, by "override
>>> the parent"
>>> >>>>>>>>>>I simply mean using that property to specify the logging
>>> level for
>>> >>>>>>>>>>"oracle.toplink.essentials" - not changing the logging
>>> level on
>>> >>>>>>>>>>the parent logger.
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>" oracle.toplink.essentials" is the parent logger for all
>>> other
>>> >>>>>>>>>loggers.
>>> >>>>>>>>>The goal is to never set the level on that particular
>>> logger from any
>>> >>>>>>>>>of the PU properties.
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>>Assuming my initial phrasing was adequately understood,
>>> I am not
>>> >>>>>>>>>>sure I understand what you are saying here. If someone
>>> specifies
>>> >>>>>>>>>>toplink.logging.level.default, they are explicitly
>>> setting a
>>> >>>>>>>>>>logging level. Why shouldn't that set the level for
>>> >>>>>>>>>>" oracle.toplink.essentials"?
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>Setting the level for "oracle.toplink.essentials"
>>> explicitly breaks GF
>>> >>>>>>>>>integration, as it will not be possible to reset it to
>>> defaults
>>> >>>>>>>>>dynamically:
>>> >>>>>>>>>the default value is not set on
>>> "oracle.toplink.essentials" - it's
>>> >>>>>>>>>a property
>>> >>>>>>>>>that is not present for the defaults, but by Java logging
>>> defaults,
>>> >>>>>>>>>i.e.
>>> >>>>>>>>>"" logger in our case.
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>The one strange thing this setting does is
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>>it potentially has side effects for the next user of the
>>> default
>>> >>>>>>>>>>log. This setting is one that is likely to be only used
>>> while
>>> >>>>>>>>>>debugging (and infrequently, even then) due to the fact
>>> that there
>>> >>>>>>>>>>are very few messages at a more granular level that
>>> INFO(the
>>> >>>>>>>>>>default) that are written to the default logger. As a
>>> result, I
>>> >>>>>>>>>>am willing to live with that side effect as long as we
>>> adequately
>>> >>>>>>>>>>document it.
>>> >>>>>>>>>>
>>> >>>>>>>>>>What if we change the setting to
>>> toplink.logging.level.config or
>>> >>>>>>>>>> toplink.logging.level.default-logger, and ensure it
>>> does not have
>>> >>>>>>>>>>any effect on the session loggers.
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>Yes, we can have toplink.logging.level.default-logger
>>> mapped to the
>>> >>>>>>>>>"oracle.toplink.essentials.default-logger" namespace,
>>> which will
>>> >>>>>>>>>not affect
>>> >>>>>>>>>any session loggers, but will use the same global
>>> defaults if not
>>> >>>>>>>>>set explicitly.
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>>4. Only use the existing property (
>>> toplink.logging.level) to set
>>> >>>>>>>>>>>>the level of the session's log.
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>This will require a redeploy to apply a change, and
>>> doesn't solve
>>> >>>>>>>>>>>the
>>> >>>>>>>>>>>problem of having separate log levels for separate PUs.
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>What conditions cause us to need a redeploy for a change?
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>If a user once specified a toplink.logging.level in the
>>> >>>>>>>>>persistence.xml,
>>> >>>>>>>>>they can't just remove that property to get the defaults.
>>> They need to
>>> >>>>>>>>>redeploy either way if they change persistence.xml, but
>>> they'll
>>> >>>>>>>>>need to
>>> >>>>>>>>>either reset it to INFO, or restart the server after the
>>> redeploy
>>> >>>>>>>>>to get
>>> >>>>>>>>>the defaults.
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>>If toplink.logging.level sets only the level of the
>>> sessions log.
>>> >>>>>>>>>>(i.e. for session "session1", only the logger in namespace
>>> >>>>>>>>>>"oracle.toplink.essentials.session1" is affected),
>>> doesn't this
>>> >>>>>>>>>>solve the problem of having separate log levels for
>>> separate PUs?
>>> >>>>>>>>>>Please forgive me if I am being missing something obvious.
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>Yes. It does. I think we now go in circles around the
>>> following
>>> >>>>>>>>>proposal:
>>> >>>>>>>>>
>>> >>>>>>>>>1. Existing toplink.logging.level property to affect only
>>> session
>>> >>>>>>>>>loggers.
>>> >>>>>>>>>2. Introduce toplink.logging.level.default-logger
>>> property that
>>> >>>>>>>>>will affect
>>> >>>>>>>>>AbstractSessionLog only and will be global for all PUs in
>>> this VM.
>>> >>>>>>>>>
>>> >>>>>>>>>As we didn't discuss the categories behavior so far,
>>> >>>>>>>>>3. It's not possible to choose for a user a separate log
>>> level for
>>> >>>>>>>>>separate
>>> >>>>>>>>>category.
>>> >>>>>>>>>
>>> >>>>>>>>>Do you agree?
>>> >>>>>>>>>
>>> >>>>>>>>>thanks,
>>> >>>>>>>>>-marina
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>
>>> >>>>>>>>>>-Tom
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>>I haven't completely thought it out, but figured I
>>> pass on the
>>> >>>>>>>>>>>>idea to start the discussion.
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>yes, let's sort it out (and document the result).
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>thanks,
>>> >>>>>>>>>>>-marina
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>
>>> >>>>>>>>>>>>-Tom
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>Tom Ware wrote:
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>
>>> >>>>>>>>>>>>>Hi Marina,
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>Thanks for the lesson:)
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>As far as changing the namespace for the default
>>> logger to
>>> >>>>>>>>>>>>>"oracle.toplink.essentials.default", I have a
>>> concern. Isn't
>>> >>>>>>>>>>>>>this the same namespace as a session called
>>> "default"? I
>>> >>>>>>>>>>>>>believe this could cause problems.
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>I still need to do some thinking about the issue of
>>> how we deal
>>> >>>>>>>>>>>>>with the logging level of the default Logger. It
>>> seems to me
>>> >>>>>>>>>>>>>to potentially be an issue regardless of what we do
>>> about this
>>> >>>>>>>>>>>>>bug. I'll let you know what I come up with.
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>I think Wonsoek has replied to your question about
>>> the default
>>> >>>>>>>>>>>>>logging levels. Please let me know if you have
>>> additional
>>> >>>>>>>>>>>>>questions.
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>-Tom
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>Marina Vatkina wrote:
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>Tom, Wonseok,
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>Yes, I should've extracted the relevant portion into
>>> >>>>>>>>>>>>>>setServerSessionName
>>> >>>>>>>>>>>>>>(don't know why I missed half of the code :( - sorry
>>> about that).
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>Yes, it should be ".default".
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>The categories are appended to each name space, and
>>> I'm not
>>> >>>>>>>>>>>>>>sure the categories
>>> >>>>>>>>>>>>>>are implemented correctly now in the JavaLog if
>>> they are
>>> >>>>>>>>>>>>>>expected to be
>>> >>>>>>>>>>>>>>specified by the user. But let's discuss this
>>> further, and see
>>> >>>>>>>>>>>>>>where is the
>>> >>>>>>>>>>>>>>right solution.
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>Here is the problem that I'm trying to solve.
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>Java loggers use parent's level if it is not
>>> explicitly set,
>>> >>>>>>>>>>>>>>but use its own
>>> >>>>>>>>>>>>>>level otherwise. There is no way to unset a level,
>>> once it's
>>> >>>>>>>>>>>>>>set explicitly.
>>> >>>>>>>>>>>>>>The namespace is registered with the LogMgr in the
>>> VM, which
>>> >>>>>>>>>>>>>>means that as long
>>> >>>>>>>>>>>>>>as you use the same name, you are getting the same
>>> Java logger
>>> >>>>>>>>>>>>>>instance.
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>Now, if a log level is specified in a
>>> persistence.xml as a
>>> >>>>>>>>>>>>>>property, we do set
>>> >>>>>>>>>>>>>>it currently on the default logger by processing
>>> >>>>>>>>>>>>>>AbstractSessionLog in
>>> >>>>>>>>>>>>>>initOrUpdateLogging (which without ".default" equals
>>> to the
>>> >>>>>>>>>>>>>>overall TopLink namespace of "
>>> oracle.toplink.essentials") ,
>>> >>>>>>>>>>>>>>i.e. any other PU after that will
>>> >>>>>>>>>>>>>>use that level (if it doesn't specify it
>>> explicitly), or will
>>> >>>>>>>>>>>>>>override it again
>>> >>>>>>>>>>>>>>with its own setting if it is different. Which means
>>> that 2
>>> >>>>>>>>>>>>>>PUs can't have 2
>>> >>>>>>>>>>>>>>different logging levels.
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>Adding ".default" will give AbstractSessionLog it's
>>> own
>>> >>>>>>>>>>>>>>sub-space.
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>Setting the ServerSession name much earlier, gives
>>> each PU
>>> >>>>>>>>>>>>>>it's own sub-space.
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>Now the subcategories (I had never tested, how would
>>> it work
>>> >>>>>>>>>>>>>>in GF): the
>>> >>>>>>>>>>>>>>current code constructs the corresponding namespace
>>> as:
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>sessionNameSpace = DEFAULT_TOPLINK_NAMESPACE + "." +
>>> sessionName;
>>> >>>>>>>>>>>>>>String loggerNameSpace = sessionNameSpace + "." +
>>> loggerCategory;
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>It might be better to have it as
>>> >>>>>>>>>>>>>>DEFAULT_TOPLINK_NAMESPACE + "." + loggerCategory +
>>> sessionName;
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>Right?
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>I need to think more about changing the session name
>>> - we
>>> >>>>>>>>>>>>>>can't unregister
>>> >>>>>>>>>>>>>>a logger from a LogMgr, so changing a name will mean
>>> creating
>>> >>>>>>>>>>>>>>new loggers,
>>> >>>>>>>>>>>>>>right?
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>Tom, about the new useParentLevel() - will it be OFF
>>> or INFO
>>> >>>>>>>>>>>>>>by default,
>>> >>>>>>>>>>>>>>if you don't specify the level in SE? Can you check?
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>thanks,
>>> >>>>>>>>>>>>>>-marina
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>Tom Ware wrote:
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>Marina and Wonsoek,
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>- Can you explain a bit more why you need to append
>>> >>>>>>>>>>>>>>>".default" to the default log namespace. How will
>>> this work
>>> >>>>>>>>>>>>>>>in conjuction with the logger categories? How
>>> exactly is the
>>> >>>>>>>>>>>>>>>current namespace causing issues? Will users have
>>> to now
>>> >>>>>>>>>>>>>>>specify ".default" on all their categories? ( e.g.
>>> >>>>>>>>>>>>>>>oracle.toplink.essentials.default.sql) To me, this
>>> seems a
>>> >>>>>>>>>>>>>>>bit less intuitive than being able to set the
>>> logging levels
>>> >>>>>>>>>>>>>>>without the "default".
>>> >>>>>>>>>>>>>>>- BTW: Assuming we can sort out the "default", I
>>> think the
>>> >>>>>>>>>>>>>>>namespace is currently missing a dot. It looks
>>> like it is
>>> >>>>>>>>>>>>>>>oracle.toplink.essentialsdefault.
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>Additional comments inline:
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>Wonseok Kim wrote:
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>Hi Marina,
>>> >>>>>>>>>>>>>>>>comments in line...
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>On 10/12/06, *Marina Vatkina* <
>>> Marina.Vatkina_at_sun.com <mailto:Marina.Vatkina_at_sun.com>
>>> >>>>>>>>>>>>>>>><mailto:Marina.Vatkina_at_sun.com
>>> <mailto:Marina.Vatkina_at_sun.com>>> wrote:
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>Tom, Wonseok,
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>Please review the changes.
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>Major points are described below in the IT note.
>>> Other diffs:
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>a) renamed initServerSession() to
>>> setServerSessionName(),
>>> >>>>>>>>>>>>>>>>removed
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>from it the
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>call to assignCMP3Policy(), and changed the
>>> javadoc comments as
>>> >>>>>>>>>>>>>>>>they didn't
>>> >>>>>>>>>>>>>>>>reflect the actual things happening in the method
>>> anyway;
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>b) changed to call assignCMP3Policy() directly in
>>> place of the
>>> >>>>>>>>>>>>>>>>previous
>>> >>>>>>>>>>>>>>>>initServerSession() call;
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>c) moved the call to setServerSessionName() to the
>>> beginning of
>>> >>>>>>>>>>>>>>>>predeploy (see
>>> >>>>>>>>>>>>>>>>the reason #3 below).
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>Tom, do you see any problem with registering the
>>> session by
>>> >>>>>>>>>>>>>>>>name
>>> >>>>>>>>>>>>>>>>so early? I
>>> >>>>>>>>>>>>>>>>couldn't find any code in the
>>> EntityManagerSetupImpl that would
>>> >>>>>>>>>>>>>>>>suggest that
>>> >>>>>>>>>>>>>>>>it can be.
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>1. Original initServerSession() does another
>>> things. Those
>>> >>>>>>>>>>>>>>>>calls session.getDescriptors() but this is filled in
>>> >>>>>>>>>>>>>>>>predeploy phase. Therefore I think this should not
>>> be called
>>> >>>>>>>>>>>>>>>>before predeploy finishes.
>>> >>>>>>>>>>>>>>>>How about making a new method "initSessionName()" by
>>> >>>>>>>>>>>>>>>>extracting only the following code?
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>// use default session name if none is provided
>>> >>>>>>>>>>>>>>>>String name =
>>>
>>> >>>>>>>>>>>>>>>>EntityManagerFactoryProvider.getConfigPropertyAsString(TopLinkProperties.SESSION_NAME
>>>
>>> ,
>>> >>>>>>>>>>>>>>>>m);
>>> >>>>>>>>>>>>>>>>if(name == null) {
>>> >>>>>>>>>>>>>>>> if (
>>> persistenceUnitInfo.getPersistenceUnitRootUrl()
>>> >>>>>>>>>>>>>>>>!= null){
>>> >>>>>>>>>>>>>>>> name =
>>> >>>>>>>>>>>>>>>>
>>> persistenceUnitInfo.getPersistenceUnitRootUrl().toString() +
>>> >>>>>>>>>>>>>>>>"-" + persistenceUnitInfo.getPersistenceUnitName();
>>> >>>>>>>>>>>>>>>> } else {
>>> >>>>>>>>>>>>>>>> name =
>>> persistenceUnitInfo.getPersistenceUnitName();
>>> >>>>>>>>>>>>>>>> }
>>> >>>>>>>>>>>>>>>> session.setName(name);
>>> >>>>>>>>>>>>>>>>// session.log(SessionLog.FINEST,
>>> >>>>>>>>>>>>>>>>SessionLog.PROPERTIES , "property_value_default",
>>> new
>>> >>>>>>>>>>>>>>>>Object[]{TopLinkProperties.SESSION_NAME , name});
>>> >>>>>>>>>>>>>>>> addSessionToGlobalSessionManager();
>>> >>>>>>>>>>>>>>>>}
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>I think Wonsoek's suggestion is a good one. Let's
>>> only move
>>> >>>>>>>>>>>>>>>the session name initialization code, and not the
>>> other
>>> >>>>>>>>>>>>>>>code. The initServerSession() method does more than
>>> >>>>>>>>>>>>>>>initialize the name.
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>2. (To Tom) Is it safe to call
>>> >>>>>>>>>>>>>>>>addSessionToGlobalSessionManager() in this early
>>> step (with
>>> >>>>>>>>>>>>>>>>uninitialized session)?
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>There is really one issue with this call we should
>>> resolve.
>>> >>>>>>>>>>>>>>>Details in the next item.
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>3. What if SESSION_NAME is set by user explicitly?
>>> Now
>>> >>>>>>>>>>>>>>>>user-specified name is set later by
>>> updateSessionName()
>>> >>>>>>>>>>>>>>>>which is called from updateServerSession() in
>>> deploy phase.
>>> >>>>>>>>>>>>>>>>I think we need to set this user-specified name in
>>> >>>>>>>>>>>>>>>>"initSessionName()" also. But current code appears
>>> to allow
>>> >>>>>>>>>>>>>>>>changing session name in deploy(). Then should
>>> logger should
>>> >>>>>>>>>>>>>>>>change? I'm confused.
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>When we are integrated with the Server, I
>>> believe, predeploy
>>> >>>>>>>>>>>>>>>and deploy will be called with the same properties
>>> and
>>> >>>>>>>>>>>>>>>therefore, the call to updateSessionName() should
>>> result in
>>> >>>>>>>>>>>>>>>the same name as the call to initSessionName().
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>In SE, the predeploy occurs before the call to
>>> >>>>>>>>>>>>>>>createEntityManagerFactory(name, properties) and
>>> the deploy
>>> >>>>>>>>>>>>>>>occurs after. The properties specified in the
>>> argument to
>>> >>>>>>>>>>>>>>>createEntityManagerFactory() that method need to be
>>> >>>>>>>>>>>>>>>considered. That is why the call is made in deploy
>>> as well.
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>As a result of this, there is an issue we have to
>>> resolve in
>>> >>>>>>>>>>>>>>>SE if we are calling
>>> addSessionToGlobalSessionManager()
>>> >>>>>>>>>>>>>>>before the deploy phase.
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>- What happens if we initialize with a session
>>> name, and the
>>> >>>>>>>>>>>>>>>call to createEntityManagerFactory() has a
>>> different name.
>>> >>>>>>>>>>>>>>>In this case, we cannot simply change the session
>>> name
>>> >>>>>>>>>>>>>>>because sessions are hashed in SessionManager based
>>> on their
>>> >>>>>>>>>>>>>>>name, so changing the name of the session will
>>> result in
>>> >>>>>>>>>>>>>>>lookup problems.
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>4. (To Tom) This is another concern but related to
>>> #3. What
>>> >>>>>>>>>>>>>>>>is the behaviour of session name property? If I
>>> specify the
>>> >>>>>>>>>>>>>>>>same session name of two applications or two
>>> persistence
>>> >>>>>>>>>>>>>>>>units, could I share ServerSession? But it doesn't
>>> seem to
>>> >>>>>>>>>>>>>>>>do it, because in
>>> EntityManagerSetupImpl.predeploy() session
>>> >>>>>>>>>>>>>>>>is always newly created like below regardless of
>>> the session
>>> >>>>>>>>>>>>>>>>name.
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>session = new ServerSession(...);
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>If session name property has no effect in JPA, I
>>> think it
>>> >>>>>>>>>>>>>>>>should be removed and then there will be no
>>> confusion in #3.
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>Session name is used to store the session we use on
>>> the
>>> >>>>>>>>>>>>>>>SessionManager. We expect the session name to be
>>> unique. If
>>> >>>>>>>>>>>>>>>it is not, an exception will be thrown when the
>>> session is
>>> >>>>>>>>>>>>>>>added to the SessionManager. Take a look at the
>>> >>>>>>>>>>>>>>>addSessionToGlobalSessionManager() method.
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>d) I added an api to the SessionLog to allow for
>>> #1 below.
>>> >>>>>>>>>>>>>>>>Another
>>> >>>>>>>>>>>>>>>>option would
>>> >>>>>>>>>>>>>>>>be to check for the log level being OFF, but it's
>>> more time
>>> >>>>>>>>>>>>>>>>consuming to go up
>>> >>>>>>>>>>>>>>>>the logging chain every time.
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>Then in Java SE, the default level of JavaLogger
>>> becomes
>>> >>>>>>>>>>>>>>>>INFO while CONFIG is a default for DefaultLogger.
>>> It appears
>>> >>>>>>>>>>>>>>>>to be inconsistent for the default level. I don't
>>> know why
>>> >>>>>>>>>>>>>>>>the default level has been CONFIG for TopLink
>>> logger, how
>>> >>>>>>>>>>>>>>>>about changing it to INFO consistently. Then we
>>> don't need
>>> >>>>>>>>>>>>>>>>to set default level explicitly and to introduce
>>> new method
>>> >>>>>>>>>>>>>>>>"userParentLevel()" to SessionLog interface.
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>protected void initOrUpdateLogging(boolean init,
>>> Map m,
>>> >>>>>>>>>>>>>>>>SessionLog log) {
>>> >>>>>>>>>>>>>>>>String logLevelString =
>>> >>>>>>>>>>>>>>>>PropertiesHandler.getPropertyValueLogDebug
>>> >>>>>>>>>>>>>>>>( TopLinkProperties.LOGGING_LEVEL, m, session);
>>> >>>>>>>>>>>>>>>>// Don't need to set default level. It will
>>> follow the
>>> >>>>>>>>>>>>>>>>default level policy of the logger. INFO for
>>> >>>>>>>>>>>>>>>>DefaultSessionLog. Parent logger's level(INFO
>>> normally) for
>>> >>>>>>>>>>>>>>>>JavaLog.
>>> >>>>>>>>>>>>>>>>/*
>>> >>>>>>>>>>>>>>>>if(logLevelString == null && init) {
>>> >>>>>>>>>>>>>>>> logLevelString =
>>> >>>>>>>>>>>>>>>>
>>>
>>> PropertiesHandler.getDefaultPropertyValueLogDebug(TopLinkProperties.LOGGING_LEVEL,
>>>
>>> >>>>>>>>>>>>>>>>session);
>>> >>>>>>>>>>>>>>>>}
>>> >>>>>>>>>>>>>>>>*/
>>> >>>>>>>>>>>>>>>>if (logLevelString != null) {
>>> >>>>>>>>>>>>>>>>
>>>
>>> >>>>>>>>>>>>>>>>log.setLevel(AbstractSessionLog.translateStringToLoggingLevel(logLevelString));
>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>}
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>I just talked to our product manager and we agree
>>> that
>>> >>>>>>>>>>>>>>>changing the JPA default to be the same as the
>>> default
>>> >>>>>>>>>>>>>>>logger. (INFO) Does that remove the need for the
>>> >>>>>>>>>>>>>>>useParentLevel() method?
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>If we make this change, I think we should change
>>> the logging
>>> >>>>>>>>>>>>>>>in translateOldProperties and warnOldProperties to
>>> INFO.
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>-Tom
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>Regards
>>> >>>>>>>>>>>>>>>>- Wonseok
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>Let me know if you see any problems with the
>>> proposed
>>> >>>>>>>>>>>>>>>>changes. I
>>> >>>>>>>>>>>>>>>>tested with
>>> >>>>>>>>>>>>>>>>2 PUs being deployed, one with the explicit log
>>> level, and
>>> >>>>>>>>>>>>>>>>another
>>> >>>>>>>>>>>>>>>>without it.
>>> >>>>>>>>>>>>>>>>I also tested dynamic change of the log levels,
>>> and server
>>> >>>>>>>>>>>>>>>>restart. All seem
>>> >>>>>>>>>>>>>>>>to work correctly.
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>thanks,
>>> >>>>>>>>>>>>>>>>-marina
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>-------- Original Message --------
>>> >>>>>>>>>>>>>>>>Subject: [Issue 1107] Logger defined by a
>>> property doesn't
>>> >>>>>>>>>>>>>>>>work
>>> >>>>>>>>>>>>>>>>Date: Thu, 12 Oct 2006 01:56:44 +0000
>>> >>>>>>>>>>>>>>>>From: mvatkina_at_dev.java.net
>>> <mailto:mvatkina_at_dev.java.net> <mailto:mvatkina_at_dev.java.net
>>> <mailto:mvatkina_at_dev.java.net>>
>>> >>>>>>>>>>>>>>>>To: mvatkina_at_dev.java.net
>>> <mailto:mvatkina_at_dev.java.net> <mailto:mvatkina_at_dev.java.net
>>> <mailto:mvatkina_at_dev.java.net>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> https://glassfish.dev.java.net/issues/show_bug.cgi?id=1107
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>User mvatkina changed the following:
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>> What |Old
>>> value |New value
>>> >>>>>>>>>>>>>>>>
>>>
>>> >>>>>>>>>>>>>>>>================================================================================
>>>
>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> Status|NEW |STARTED
>>> >>>>>>>>>>>>>>>>
>>>
>>> >>>>>>>>>>>>>>>>--------------------------------------------------------------------------------
>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>------- Additional comments from
>>> mvatkina_at_dev.java.net <mailto:mvatkina_at_dev.java.net>
>>> >>>>>>>>>>>>>>>><mailto: mvatkina_at_dev.java.net
>>> <mailto:mvatkina_at_dev.java.net>> Thu Oct 12 01:56:44 +0000
>>> >>>>>>>>>>>>>>>>2006 -------
>>> >>>>>>>>>>>>>>>>There are apparently several issues to address -
>>> >>>>>>>>>>>>>>>>1.Do not set log level explicitly if not specified
>>> in the
>>> >>>>>>>>>>>>>>>>properties - use the
>>> >>>>>>>>>>>>>>>>parent logger's level (set by the container)
>>> instead.
>>> >>>>>>>>>>>>>>>>2. The default logger namespace should be a child
>>> of TopLink
>>> >>>>>>>>>>>>>>>>namespace, e.g.
>>> >>>>>>>>>>>>>>>>" oracle.toplink.essentials.default", otherwise
>>> >>>>>>>>>>>>>>>>AbstractSessionLog
>>> >>>>>>>>>>>>>>>>will set the
>>> >>>>>>>>>>>>>>>>explicit level for all TopLink loggers (overriding
>>> the
>>> >>>>>>>>>>>>>>>>container
>>> >>>>>>>>>>>>>>>>settings) in
>>> >>>>>>>>>>>>>>>>the VM on the first PU with the specified log level.
>>> >>>>>>>>>>>>>>>>3. ServerSession name must be set prior to
>>> setting the
>>> >>>>>>>>>>>>>>>>logger for
>>> >>>>>>>>>>>>>>>>that session,
>>> >>>>>>>>>>>>>>>>otherwise the logger is registered as the default
>>> logger,
>>> >>>>>>>>>>>>>>>>and its
>>> >>>>>>>>>>>>>>>>level will
>>> >>>>>>>>>>>>>>>>apply to all PUs in this VM.
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>A note: the problem that can't be solved so far is
>>> switching
>>> >>>>>>>>>>>>>>>>between explicitly
>>> >>>>>>>>>>>>>>>>specified log level for a PU and the defalt app
>>> server level
>>> >>>>>>>>>>>>>>>>for
>>> >>>>>>>>>>>>>>>>this namespace.
>>> >>>>>>>>>>>>>>>>As there is no way to unset log level after it's
>>> set, the only
>>> >>>>>>>>>>>>>>>>work around will
>>> >>>>>>>>>>>>>>>>be to change the property value or restart the
>>> server.
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>>>>
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>>>>>>
>>> >>>>>
>>> >>>>>
>>> >>>>>
>>> >>>>>
>>> >>>>>
>>> >>>
>>> >>>
>>> >>>
>>>
>>>
>>>