[keycloak-dev] Access datasource from a CLI
Stan Silvert
ssilvert at redhat.com
Wed Oct 21 14:16:38 EDT 2015
On 10/21/2015 2:08 PM, Stan Silvert wrote:
> On 10/21/2015 1:57 PM, Stian Thorgersen wrote:
>> We manage our own EntityManagerFactory and EntityManager as well as
>> our own transactions. So that's not true.
> If all you need is the datasource info that lives in standalone.xml
> then yes, we can get that.
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.
>
>>
>> On 21 October 2015 at 19:53, Stan Silvert <ssilvert at redhat.com
>> <mailto:ssilvert at redhat.com>> wrote:
>>
>> On 10/21/2015 1:23 PM, Stian Thorgersen wrote:
>>> Guys - all we need is the datasource. I want to create a "db
>>> tool" for Keycloak, this is not for the Admin CLI
>>>
>>> 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.
>>>
>>> If offline mode can do this then that'd be good, but I seem to
>>> remember datasources weren't available?
>> 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.
>>
>> Hey, let's just use JDBC! :-)
>>
>>>
>>> On 21 October 2015 at 18:22, Marko Strukelj <mstrukel at redhat.com
>>> <mailto:mstrukel at redhat.com>> wrote:
>>>
>>> On Wed, Oct 21, 2015 at 5:57 PM, Stan Silvert
>>> <ssilvert at redhat.com <mailto:ssilvert at redhat.com>> wrote:
>>>
>>> On 10/21/2015 11:14 AM, Marko Strukelj wrote:
>>>
>>> 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 ...
>>>
>>> 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.
>>>
>>> Here is an explanation of the problem based on an old
>>> version of JBoss:
>>> https://docs.jboss.org/jbossas/docs/Server_Configuration_Guide/4/html/JBoss_JMX_Implementation_Architecture-Class_Loading_and_Types_in_Java.html
>>>
>>> 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.
>>>
>>> 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.
>>>
>>>
>>>
>>> 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.
>>>
>>> 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.
>>>
>>> Or, as I mentioned, you need the CLI to actually live
>>> inside the container.
>>>
>>>
>>> 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.
>>>
>>> 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.
>>>
>>>
>>
>>
>
>
>
> _______________________________________________
> keycloak-dev mailing list
> keycloak-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/keycloak-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/keycloak-dev/attachments/20151021/7a36cf49/attachment-0001.html
More information about the keycloak-dev
mailing list