-
January 27th, 2012, 03:56 PM
#1
JDBC Data Adapter [Java]
Below you can find a very simple example source code for a Java Data Adapter. We modified the HelloWorldDataAdapter to poll a database, instead of generating the data internally.
This Data Adapter uses JDBC to query a MySQL table every second. It simply reads the first record, extracts the "message" and "timestamp" fields and injects them into the Lightstreamer Kernel.
-
May 19th, 2023, 07:53 AM
#2
Hi alessandro,
If i want to write the adapters.xml file for this project how will it be like? Can u provide a reference for it? Will i be needing <metadataprovider> for this code as metadataprovider is not used
-
May 19th, 2023, 09:45 AM
#3
Hi Vinayak Singh,
For such a simple example like HelloWorld, the configuration file of the AdapterSet is equally simple, and you can find it described here: https://github.com/Lightstreamer/Lig...-configuration
In fact, the adapters.xml file can be completely identical to the one from the Java project from which the above extension is derived.
But please let me to add two considerations.
The first one is that one (and only one) Metadata Adapter is mandatory for each Adapter Set. In fact, every client request, whether it's for opening a client session, subscribing or unsubscribing to items, or sending messages, is subject to authentication and/or authorization by the Metadata Adapter.
For this reason, in order to make examples like this one simpler, we have developed a simple full implementation of Metadata Adapter in Java, LiteralBasedProvider, made available as sample for inspiration and/or extension and enbedded in the Lightstreamer Java Adapter libraries.
Please refer here for more details: https://github.com/Lightstreamer/Lig...tadata-adapter
The second one is that since this example adds a connection to the database from which to retrieve messages to send to clients, it would be a natural extension to add configurations to avoid hardcoding all the parameters of the database connection string in the code.
For example you could add to the <data_provider> section something like these:
<param name="db_hostname">localhost</param>
<param name="db_user">root</param>
<param name="db_password">xxx</param>
<param name="jdbc_driver">com.mysql.jdbc.Driver</param>
And any other parameter that you deem necessary, such as table names or column names, etc.
Regards,
Giuseppe
-
May 19th, 2023, 10:38 AM
#4
Hi Giuseppe,
Thank you for the reply, I just wanted to confirm with the adapters.xml file that i wrote and want you to check it for this above code.
<?xml version="1.0" encoding="UTF-8"?>
<!-- Do not remove this line. File tag: adapters_conf-APV-7.2.0. -->
<!-- This is a generic template for the configuration file of an Adapter Set pluggable into Lightstreamer Server. It can be considered a reference example of an in-process Java Adapter deploy. Note that element and attribute names are case-sensitive.
A very simple variable-expansion feature is available; see <enable_expansion_for_adapters_config> in the Server's main configuration file. -->
<!-- Mandatory. Define an Adapter Set and its unique ID. -->
<adapters_conf id="HELLOWORLD">
<metadata_provider>
<!-- Mandatory. Java class name of the adapter. -->
<adapter_class>classfile.adapters.metadata.Literal BasedProvider</adapter_class>
</metadata_provider>
<!-- Mandatory. Define a Data Adapter named "HelloWorldAdapter". -->
<data_provider name="HelloWorldDataAdapter">
<param name="db_hostname">localhost</param>
<param name="db_user">root</param>
<param name="db_password">xxxx</param>
<param name="jdbc_driver">com.mysql.jdbc.Driver</param>
<adapter_class>classfile.adapters.HelloWorldDataAd apter</adapter_class>
</data_provider>
</adapters_conf>
If this is correct i am going to paste the adapters folder in the lightstreamer server folder. And then how to see the output in the lightstreamer server?
-
May 19th, 2023, 11:06 AM
#5
Certainly, since you have added parameters in the `<data_provider>` section, you will need to add code to read and use them. Therefore, in the `init` method of your Data Adapter, you will need to implement something similar to the following:
```java
public void init(Map params, File configDir) throws DataProviderException {
// Read the DB parameters
String db_host = (String) params.get("db_hostname");
String db_user = (String) params.get("db_user");
...
}
```
Once you have retrieved the configuration parameters, you can utilize them within the `init` method or store them as instance variables to be used in other methods of your Data Adapter.
Sorry but I am not sure what do you mean for "output in the Lightstreamer", if you refer to the log messages generated by Lightstreamer, including the logs related to the loading of adapters and client requests. You can find these logs in the <LS_HOME>/logs directory.
If you are looking for a web application that acts as a client for this adapter, you can refer to this project:
[Project Name: Lightstreamer - "Hello World" Tutorial - HTML Client]
[GitHub Repository: https://github.com/Lightstreamer/Lig...ent-javascript]
This web application can serve as a client for your adapter and provide an interface for the visualization of the data provided by the adapter. You can find more details and the necessary code in the provided GitHub repository.
Reagrds,
Giuseppe
-
May 22nd, 2023, 07:12 AM
#6
Hi Giuseppe,
I am encountering an error while trying to run this code in the IntelliJ. The error is
No com.lightstreamer.kernel_lib_path defined; using a unique ClassLoader; ignoring any other _lib_path supplied
Unexpected error in initialization phase:
How to solve this error? I am using a windows system. Please help me regarding this issue, This is my adapters.xml file
<?xml version="1.0" encoding="UTF-8"?>
<!-- Do not remove this line. File tag: adapters_conf-APV-7.2.0. -->
<!-- This is a generic template for the configuration file of an Adapter Set pluggable into Lightstreamer Server. It can be considered a reference example of an in-process Java Adapter deploy. Note that element and attribute names are case-sensitive.
A very simple variable-expansion feature is available; see <enable_expansion_for_adapters_config> in the Server's main configuration file. -->
<!-- Mandatory. Define an Adapter Set and its unique ID. -->
<adapters_conf id="HELLOWORLD">
<metadata_provider>
<!-- Mandatory. Java class name of the adapter. -->
<adapter_class>classfile.adapters.metadata.Literal BasedProvider</adapter_class>
</metadata_provider>
<!-- Mandatory. Define a Data Adapter named "HelloWorldAdapter". -->
<data_provider name="HelloWorldDataAdapter">
<param name="db_hostname">localhost</param>
<param name="db_user">root</param>
<param name="db_password">xxxx</param>
<param name="jdbc_driver">com.mysql.jdbc.Driver</param>
<adapter_class>classfile.adapters.HelloWorldDataAd apter</adapter_class>
</data_provider>
</adapters_conf>
-
May 22nd, 2023, 08:26 AM
#7
The "Unexpected error in initialization phase:" should be followed by the actual error message.
Do you see anything after that line?
The previous message, "No com.lightstreamer.kernel_lib_path defined; using a unique ClassLoader; ignoring any other _lib_path supplied", is not an error.
It can be issued if you launch the Server directly, without using the factory scripts and without passing the needed JVM properties, but this does not prevent the Server from starting.
However, if there is something missing or wrong in the classpath supplied to the JVM, this may explain the startup failure.
But to understand what's wrong we need either to see the full log, or to see exactly the command you used to launch the JVM.
-
May 22nd, 2023, 10:03 AM
#8
Hi Dario,
With continuation to my last message i want to add the other related errors i got while executing the code
java.lang.NoClassDefFoundError: ch/qos/logback/core/Context
at java.base/java.lang.Class.getDeclaredConstructors0(Native Method)
at java.base/java.lang.Class.privateGetDeclaredConstructors(Cla ss.java:3373)
at java.base/java.lang.Class.getConstructor0(Class.java:3578)
at java.base/java.lang.Class.getConstructor(Class.java:2271)
at com.lightstreamer.init.p.a(p.java)
at com.lightstreamer.init.o.a(o.java)
at com.lightstreamer.init.o.a(o.java)
at com.lightstreamer.f.e.b.a(b.java)
at com.lightstreamer.b.b.a(b.java)
at com.lightstreamer.b.b.a(b.java)
at com.lightstreamer.b.a.a(a.java)
at com.lightstreamer.LS.main(LS.java)
Caused by: java.lang.ClassNotFoundException: ch.qos.logback.core.Context
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(B uiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.lo adClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:5 20)
... 12 more
Initialization error.
Startup failed.
Please help me solve the error!
-
May 22nd, 2023, 10:44 AM
#9
Hi, Also in this thread, I can't but refer to this other thread of yours and in particular to post #4.
To resume, if you open a command prompt from the "Lightstreamer" folder of the Server installation package, you should run a command like this:
Code:
java -cp "lib/*;lib/log/*;lib/core/*;lib/adapters/*;lib/proxy/*" com.lightstreamer.LS conf\lightstreamer_conf.xml
This is the simplest way to run the Server. It will log "No com.lightstreamer.kernel_lib_path defined; using a unique ClassLoader; ignoring any other _lib_path supplied" at startup, but this should not prevent it from working.
Launched in this way, there may be problems only in case of conflicts between third-party libraries used by the Server and libraries used by your Adapters, but they can arise only after the initial startup.
In particular, the classes from Logback that you can't load are in the "lib/log/*" part of the classpath shown.
Please try to do exactly the same and confirm if it works.
Then, use that as the baseline that you should refer to when setting up the launch in you own context.
-
May 22nd, 2023, 11:47 AM
#10
Hi Dario,
Can u list the properties and the jar files needed for the JVM platform setup to start the lightstreamer. Also include the paths as well.
Thank you!
Similar Threads
-
By zschmidt in forum Adapter SDKs
Replies: 2
Last Post: April 30th, 2014, 04:14 PM
-
By V S Suresh in forum Adapter SDKs
Replies: 2
Last Post: October 25th, 2012, 08:11 AM
-
By Alessandro in forum Adapter SDKs
Replies: 4
Last Post: October 24th, 2011, 09:33 AM
-
By k.mcc2009 in forum Adapter SDKs
Replies: 1
Last Post: May 21st, 2009, 09:41 AM
-
By khalil78 in forum Adapter SDKs
Replies: 2
Last Post: April 22nd, 2008, 11:46 AM
Tags for this Thread
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
All times are GMT +1. The time now is 09:18 PM.
Bookmarks