<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<div class="moz-cite-prefix">On 10/22/2015 2:05 AM, Stian Thorgersen
wrote:<br>
</div>
<blockquote
cite="mid:CAJgngAeakOyJ6uGtqkqPxcfT8aCK1PxZ3j0BydG9VEEVBmqpTA@mail.gmail.com"
type="cite">
<div dir="ltr">It can be JBoss CLI, that's no problem as long as
it works, but if datasources are unavailable in offline mode
then it's not going to help.
<div><br>
</div>
<div>Parsing the standalone.xml ourselves and extracting the
datasource piece seems very brittle, that's why I was hoping
there was some magic way we could get the datasource.
Everything else should be easy enough.</div>
</div>
</blockquote>
So if it's WildFly CLI then there is obviously no problem reading
standalone.xml in a standard way.<br>
<br>
The custom commands we create for WildFly CLI can do anything we
want. So by pulling in Hibernate and using its JPA implementation
directly, we could do it.<br>
<blockquote
cite="mid:CAJgngAeakOyJ6uGtqkqPxcfT8aCK1PxZ3j0BydG9VEEVBmqpTA@mail.gmail.com"
type="cite">
<div class="gmail_extra"><br>
<div class="gmail_quote">On 21 October 2015 at 22:48, Marko
Strukelj <span dir="ltr"><<a moz-do-not-send="true"
href="mailto:mstrukel@redhat.com" target="_blank">mstrukel@redhat.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex">
<p dir="ltr">@Stian, so your original question is then:</p>
<p dir="ltr">Can we have a non jboss-cli CLI that will use
hibernate directly, and configure it with datasource info
from keycloak-server.json and standalone.xml?</p>
<p dir="ltr">That would involve identifying Datasource jndi
lookup name, finding datasource definition for it,
identifying the driver used, and jboss-module containing
the driver ...</p>
<p dir="ltr">As long as Hibernate is capable of using
connection url to autodetect dialect (AFAIK it can do
that) it seems to me the answer is yes, that can be done
...<br>
</p>
<div class="HOEnZb">
<div class="h5">
<div class="gmail_quote">On Oct 21, 2015 21:39, "Stian
Thorgersen" <<a moz-do-not-send="true"
href="mailto:sthorger@redhat.com" target="_blank">sthorger@redhat.com</a>>
wrote:<br type="attribution">
<blockquote class="gmail_quote" style="margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">Nopes, that's not the job of EE
containers, that's what Hibernate does. Hibernate
does that perfectly well in standalone Java apps
as well. As I said we manage our own
EntityManagerFactory.
<div><br>
</div>
<div>Have you looked at KeycloakServer inside the
testsuite? You can spin up a perfectly
functional KC server with nothing but an
embedded Undertow server.</div>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">On 21 October 2015 at
21:08, Stan Silvert <span dir="ltr"><<a
moz-do-not-send="true"
href="mailto:ssilvert@redhat.com"
target="_blank">ssilvert@redhat.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0
0 0 .8ex;border-left:1px #ccc
solid;padding-left:1ex">
<div text="#000000" bgcolor="#FFFFFF"><span>
<div>On 10/21/2015 2:43 PM, Stian
Thorgersen wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">I have no idea what you
mean about containers. As I said we
manage our own EntityManagerFactory,
etc.. inside Keycloak. It doesn't rely
on JEE for that part.</div>
</blockquote>
</span> Somebody has to process the
annotations in
org.keycloak.models.jpa.entities, do
injection, interception, etc. That's the
job of the EE containers.
<div>
<div><br>
<br>
<blockquote type="cite">
<div dir="ltr">
<div><br>
</div>
<div>We just need the classes which
we can get with jboss-modules.</div>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">On 21
October 2015 at 20:16, Stan
Silvert <span dir="ltr"><<a
moz-do-not-send="true"
href="mailto:ssilvert@redhat.com"
target="_blank">ssilvert@redhat.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote"
style="margin:0 0 0
.8ex;border-left:1px #ccc
solid;padding-left:1ex">
<div text="#000000"
bgcolor="#FFFFFF"><span>
<div>On 10/21/2015 2:08 PM,
Stan Silvert wrote:<br>
</div>
<blockquote type="cite">
<div>On 10/21/2015 1:57
PM, Stian Thorgersen
wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">We manage
our own
EntityManagerFactory
and EntityManager as
well as our own
transactions. So
that's not true.</div>
</blockquote>
If all you need is the
datasource info that lives
in standalone.xml then
yes, we can get that.<br>
</blockquote>
</span> But I'm a little
confused as to how this would
work. Are you saying that you
wouldn't use any of the
classes in
org.keycloak.models.jpa.entities?
Those need containers.<br>
<blockquote type="cite"><span>
<br>
<blockquote type="cite">
<div class="gmail_extra"><br>
<div
class="gmail_quote">On
21 October 2015 at
19:53, Stan Silvert
<span dir="ltr"><<a
moz-do-not-send="true" href="mailto:ssilvert@redhat.com" target="_blank">ssilvert@redhat.com</a>></span>
wrote:<br>
<blockquote
class="gmail_quote"
style="margin:0 0
0
.8ex;border-left:1px
#ccc
solid;padding-left:1ex">
<div
text="#000000"
bgcolor="#FFFFFF"><span>
<div>On
10/21/2015
1:23 PM, Stian
Thorgersen
wrote:<br>
</div>
<blockquote
type="cite">
<div dir="ltr">Guys
- all we need
is the
datasource. I
want to create
a "db tool"
for Keycloak,
this is not
for the Admin
CLI
<div><br>
</div>
<div>We don't
need CDI, EJB,
etc.. All we
need is the
datasource, or
at least the
connection
information
for the
datasource +
we also need
JBoss modules
so we can get
the required
classes.</div>
<div><br>
</div>
<div>If
offline mode
can do this
then that'd be
good, but I
seem to
remember
datasources
weren't
available?</div>
</div>
</blockquote>
</span> If you
want to use our
existing JPA
infrastructure
then you need a
JPA container.
That's where
this other stuff
all gets pulled
in.<br>
<br>
Hey, let's just
use JDBC! :-)<span><br>
<br>
<blockquote
type="cite">
<div
class="gmail_extra"><br>
<div
class="gmail_quote">On
21 October
2015 at 18:22,
Marko Strukelj
<span
dir="ltr"><<a
moz-do-not-send="true" href="mailto:mstrukel@redhat.com" target="_blank">mstrukel@redhat.com</a>></span>
wrote:<br>
<blockquote
class="gmail_quote"
style="margin:0
0 0
.8ex;border-left:1px
#ccc
solid;padding-left:1ex">
<div dir="ltr">
<div
class="gmail_extra">
<div
class="gmail_quote"><span>On
Wed, Oct 21,
2015 at 5:57
PM, Stan
Silvert <span
dir="ltr"><<a
moz-do-not-send="true" href="mailto:ssilvert@redhat.com" target="_blank">ssilvert@redhat.com</a>></span>
wrote:<br>
<blockquote
class="gmail_quote"
style="margin:0px
0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span>On
10/21/2015
11:14 AM,
Marko Strukelj
wrote:<br>
<blockquote
class="gmail_quote"
style="margin:0px
0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">I
haven't taken
a very close
look at Swarm
yet, but I
assumed you
start Wildfly
embedded in
the same JVM
as your Main
class. If that
is the case,
then there
should be no
problem
communicating
with any kind
of deployed
component via
heap directly
- just lookup
some singleton
...<br>
</blockquote>
</span>
Classloading
constraints
are what you
usually run up
against. You
can't use your
own version of
a class that
was loaded
from a
different
classloader.
I don't think
Swarm helps
you get around
that, but just
assumes you
will access
the WAR in the
usual way
through an
HTTP port.
But I could be
wrong as I
haven't worked
with Swarm
either.<br>
<br>
Here is an
explanation of
the problem
based on an
old version of
JBoss:<br>
<a
moz-do-not-send="true"
href="https://docs.jboss.org/jbossas/docs/Server_Configuration_Guide/4/html/JBoss_JMX_Implementation_Architecture-Class_Loading_and_Types_in_Java.html"
rel="noreferrer" target="_blank">https://docs.jboss.org/jbossas/docs/Server_Configuration_Guide/4/html/JBoss_JMX_Implementation_Architecture-Class_Loading_and_Types_in_Java.html</a><br>
<br>
With
jboss-modules,
it's easier to
get around
these
problems, but
you still run
into the
isolation
built into the
container
itself,
especially in
the case of a
WAR.</blockquote>
<div> </div>
</span>
<div>CLI
running in the
same JVM as
Wildfly would
get
bootstrapped
through
jboss-modules,
and would
package it's
classes as a
jboss module.
It can then
deploy
additional
'in-container'
logic that
needs actual
access to
datasources
via many
different
mechanisms. It
can be a .jar
containing a
SLSB, a .war,
a .sar, a POJO
(via pojo
subsystem), it
can be a
custom
subsystem that
gets installed
... In every
of these cases
it can then
have access to
resource
objects bound
to java:jboss
JNDI space ...
And in every
of these cases
it uses shared
types loaded
via
dependencies
on
jboss-modules.</div>
<span>
<div><br>
</div>
<div><br>
</div>
<blockquote
class="gmail_quote"
style="margin:0px
0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span>
<blockquote
class="gmail_quote"
style="margin:0px
0px 0px
0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><br>
If that is not
the case, then
we would need
some kind of
interprocess
communication
going. With
shell the
roles of who
connects where
could also be
reversed, and
a started up
Wildfly
instance could
have a service
connecting out
to local port
bound by our
CLI rather
than the other
way around.<br>
</blockquote>
</span> I
don't think
the direction
of the
connection
matters so
much as the
fact that you
need a
serialized
format to
issue commands
to a foreign
container.<br>
<br>
Or, as I
mentioned, you
need the CLI
to actually
live inside
the container.</blockquote>
<div><br>
</div>
</span>
<div>CLI needs
to be able to
execute its
logic inside
the container
in order to
harness the
datasources,
but the UI
part that
takes care of
getting the
inputs and
displaying the
outputs - e.g.
CraSH, does
not have to be
inside the
container. </div>
<div><br>
</div>
<div>I don't
know what you
mean by
'serialized
format to
issue commands
to a foreign
container',
but if it
means taking
care of UI
interaction,
CraSH looks
pretty decent
CLI, easy to
extend with
custom
commands. </div>
<div><br>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</blockquote>
<br>
</span></div>
</blockquote>
</div>
<br>
</div>
</blockquote>
<br>
<br>
<fieldset></fieldset>
<br>
</span><span>
<pre>_______________________________________________
keycloak-dev mailing list
<a moz-do-not-send="true" href="mailto:keycloak-dev@lists.jboss.org" target="_blank">keycloak-dev@lists.jboss.org</a>
<a moz-do-not-send="true" href="https://lists.jboss.org/mailman/listinfo/keycloak-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/keycloak-dev</a></pre>
</span></blockquote>
<br>
</div>
<br>
_______________________________________________<br>
keycloak-dev mailing list<br>
<a moz-do-not-send="true"
href="mailto:keycloak-dev@lists.jboss.org"
target="_blank">keycloak-dev@lists.jboss.org</a><br>
<a moz-do-not-send="true"
href="https://lists.jboss.org/mailman/listinfo/keycloak-dev"
rel="noreferrer"
target="_blank">https://lists.jboss.org/mailman/listinfo/keycloak-dev</a><br>
</blockquote>
</div>
<br>
</div>
</blockquote>
<br>
</div>
</div>
</div>
</blockquote>
</div>
<br>
</div>
<br>
_______________________________________________<br>
keycloak-dev mailing list<br>
<a moz-do-not-send="true"
href="mailto:keycloak-dev@lists.jboss.org"
target="_blank">keycloak-dev@lists.jboss.org</a><br>
<a moz-do-not-send="true"
href="https://lists.jboss.org/mailman/listinfo/keycloak-dev"
rel="noreferrer" target="_blank">https://lists.jboss.org/mailman/listinfo/keycloak-dev</a><br>
</blockquote>
</div>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</blockquote>
<br>
</body>
</html>