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:25:03 -0700

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.
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>
>> >>>
>> >>>
>>
>>
>>