<div dir="ltr"><div><div><div><div><div>To be fair it is bit worse than only examples Heiko showed.<br><br>we currently have around 4 or even maybe 5 different ways properties are represented in the model.<br><br></div>also the system properties part is bit of exception as it has 3rd attribute &quot;boot-time&quot; not just key &amp; value, so they do not officially belong into category of &quot;properties&quot;<br>

<br></div>so narrow it down we now have <br>1) PropertiesAttributeDefinition, basicly complex attribute with key &amp; value<br></div>2) sub resources, where key = name of resource and there is only one attribute under it with value, for example see PropertyResourceDefinition and its usage. This is quite common<br>
</div>3) custom ListAttributeDefinition based attributes, <br></div><div><div>4) custom complex object implementations for example ModuleOptions referenced up, which btw is deprecated and was replaced with solution described under #2<br>
</div><div><br>and some hybrids in between<br><br></div><div>my intent is/was to unify most of this under #1 &amp; #2, there are some good use cases for #2 but in most cases when you need any special handling of each and every property #1 works best and is simplest to use.<br>
</div><div><br></div><div>So i would say that if we only support first two in consoles we are good to go, there should not be many exceptions to this anymore but if there is they should be fixed.<br></div><div>Knowing most of the codebase there are only few exception still present and most of them ware already replaced but still there only to preserve backward compatibility,<br>
</div><div>most obvious case of this would be security subsystem.<br><br>--<br></div><div>tomaz<br></div><div><div><br><div><div><div><br></div></div></div></div></div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">
On Thu, Nov 14, 2013 at 6:45 PM, Brian Stansberry <span dir="ltr">&lt;<a href="mailto:brian.stansberry@redhat.com" target="_blank">brian.stansberry@redhat.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On 11/14/13 9:58 AM, Heiko Braun wrote:<br>
&gt; *<br>
&gt; *<br>
<div class="im">&gt; While working on the console extension mechanism [1], I discovered that<br>
&gt; we don&#39;t use a common representation of properties within the management<br>
&gt; model. Below are two descriptions of properties (name/value pairs) taken<br>
&gt; from security domains and server-groups. Server-groups use a addressable<br>
&gt; resource representations for name value pairs, while security domains<br>
&gt; use some (bogus?) definition of type=object and value-type=String.<br>
&gt;<br>
<br>
</div>It&#39;s not bogus. It&#39;s a per-spec description of an attribute with<br>
Map&lt;String, String&gt; semantics. This is a conceptually valid construct if<br>
the resource involved consumes the map as a unit.<br>
<br>
A set of system properties is not an attribute with Map&lt;String, String&gt;<br>
semantics. Each individual property has a largely independent nature.<br>
The JDK exposes a map API for dealing with them, but that&#39;s not really<br>
fundamental to what a system property is.<br>
<br>
Take the above as an FYI historical explanation. I don&#39;t pretend that<br>
every name/value pair case in our management model is handled<br>
consistently based on that rationale.<br>
<br>
&gt; /Is it possible to make resources rely on the same representation for<br>
&gt; properties? /<br>
&gt;<br>
<br>
It&#39;s a matter of resourcing. How critical is this problem? I&#39;d like to<br>
convert all the type=OBJECT,value-type=STRING ones to a<br>
resource-per-entry approach, but it&#39;s a lot of work. We&#39;d still have to<br>
support passing the entire map as an attribute to :add (both for<br>
compatibility and because it&#39;s often for more usable for CLI users) and<br>
for compatibility we&#39;d also have to support the existing attribute as an<br>
alternate view.<br>
<div class="im"><br>
&gt; I don&#39;t even know how it&#39;s currently possible to define a login module<br>
&gt; option using the CLI today. Non addressable resources cannot be<br>
&gt; *:add()&#39;ed, can&#39;t they?<br>
</div>&gt; *<br>
<br>
The CLI parser can read complex parameter values<br>
<br>
:add(module-options={a=b,c=d})<br>
<br>
&gt; *<br>
&gt; */profile=default/subsystem=security/security-domain=other/authentication=classic/login-module=RealmDirect*<br>
<div class="im">&gt;<br>
&gt;<br>
&gt; &quot;module-options&quot; =&gt; {<br>
&gt;                  &quot;type&quot; =&gt; OBJECT,<br>
&gt;                  &quot;description&quot; =&gt; &quot;List of module options containing a<br>
&gt; name/value pair.&quot;,<br>
&gt;                  &quot;expressions-allowed&quot; =&gt; true,<br>
&gt;                  &quot;nillable&quot; =&gt; true,<br>
&gt;                  &quot;value-type&quot; =&gt; STRING,<br>
&gt;                  &quot;access-type&quot; =&gt; &quot;read-write&quot;,<br>
&gt;                  &quot;storage&quot; =&gt; &quot;configuration&quot;,<br>
&gt;                  &quot;restart-required&quot; =&gt; &quot;no-services&quot;<br>
&gt;              }<br>
&gt;<br>
&gt;<br>
</div>&gt; */server-group=**<br>
<div><div class="h5">&gt;<br>
&gt;   &quot;system-property&quot; =&gt; {<br>
&gt;                      &quot;description&quot; =&gt; &quot;A list of system properties to<br>
&gt; set on all servers in this server-group.&quot;,<br>
&gt;                      &quot;model-description&quot; =&gt; {&quot;*&quot; =&gt; {<br>
&gt;                          &quot;description&quot; =&gt; &quot;A system property to set on<br>
&gt; all servers in this server-group.&quot;,<br>
&gt;                          &quot;access-constraints&quot; =&gt; {&quot;sensitive&quot; =&gt;<br>
&gt; {&quot;system-property&quot; =&gt; {&quot;type&quot; =&gt; &quot;core&quot;}}},<br>
&gt;                          &quot;attributes&quot; =&gt; {<br>
&gt;                              &quot;value&quot; =&gt; {<br>
&gt;                                  &quot;type&quot; =&gt; STRING,<br>
&gt;                                  &quot;description&quot; =&gt; &quot;The value of the<br>
&gt; system property.&quot;,<br>
&gt;                                  &quot;expressions-allowed&quot; =&gt; true,<br>
&gt;                                  &quot;nillable&quot; =&gt; true,<br>
&gt;                                  &quot;min-length&quot; =&gt; 0L,<br>
&gt;                                  &quot;max-length&quot; =&gt; 2147483647L,<br>
&gt;                                  &quot;access-type&quot; =&gt; &quot;read-write&quot;,<br>
&gt;                                  &quot;storage&quot; =&gt; &quot;configuration&quot;,<br>
&gt;                                  &quot;restart-required&quot; =&gt; &quot;no-services&quot;<br>
&gt;                              },<br>
&gt;                              &quot;boot-time&quot; =&gt; {<br>
&gt;                                  &quot;type&quot; =&gt; BOOLEAN,<br>
&gt;                                  &quot;description&quot; =&gt; &quot;If true the system<br>
&gt; property is passed on the command-line to the started server jvm. If<br>
&gt; false, it will be pushed to the server as part of the startup sequence.&quot;,<br>
&gt;                                  &quot;expressions-allowed&quot; =&gt; true,<br>
&gt;                                  &quot;nillable&quot; =&gt; true,<br>
&gt;                                  &quot;default&quot; =&gt; true,<br>
&gt;                                  &quot;access-type&quot; =&gt; &quot;read-write&quot;,<br>
&gt;                                  &quot;storage&quot; =&gt; &quot;configuration&quot;,<br>
&gt;                                  &quot;restart-required&quot; =&gt; &quot;no-services&quot;<br>
&gt;                              }<br>
&gt;                          },<br>
&gt;                          &quot;operations&quot; =&gt; undefined,<br>
&gt;                          &quot;children&quot; =&gt; {}<br>
&gt;                      }}<br>
&gt;                  }<br>
&gt;<br>
&gt;<br>
</div></div>&gt; _______________________________________________<br>
&gt; wildfly-dev mailing list<br>
&gt; <a href="mailto:wildfly-dev@lists.jboss.org">wildfly-dev@lists.jboss.org</a><br>
&gt; <a href="https://lists.jboss.org/mailman/listinfo/wildfly-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/wildfly-dev</a><br>
&gt;<br>
<span class="HOEnZb"><font color="#888888"><br>
<br>
--<br>
Brian Stansberry<br>
Principal Software Engineer<br>
JBoss by Red Hat<br>
_______________________________________________<br>
wildfly-dev mailing list<br>
<a href="mailto:wildfly-dev@lists.jboss.org">wildfly-dev@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/wildfly-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/wildfly-dev</a><br>
</font></span></blockquote></div><br></div>