How to include Hsql database in WAR File? - java

i am developing a little application in JAVA, in which i use HSQL database to store some statistics and perform some calculations, now the requirement of application is like
The web application should be packaged as a self-contained portable war file. The war should contain any/all 3rd party jars that it depends on.
It should be possible to download a fresh tomcat, install the war, and use web app immediately without any configuration.
All config parameters should have useful default values.
i have developed the application but i am not able to include thw HSQL database in WAR file, i have tried different tutorials and search on stack overflow but i can't find any solution,
please tell me the way how i include hsql database in war file ?

Create a java class that create HSQL database on tomcat start if not exist
path of HSQL database for exemple tomcat/conf:
Server server = new Server();
server.setDatabaseName(0, "test");
server.setDatabasePath(0, "file:/path/to/db");
server.start();

Related

Use weblogic admin console to manage custom configuration files?

Is there any way I create or upload a configuration file to weblogic server. The configuration file will be used by a java application deployed on the weblogic server. But I can use weblogic server admin console to update this configuration file and don't have to have someone go to the server and find this file and update it in an text editor.
Is this possible? If so, how can I do this.
You want Deployment Plans for your app. They allow you to customise an EAR or WAR's internal settings.
Bear in mind that early versions of WLS 11g had a bug where specifying a deployment plan at the same time as uploading an app didn't work through the console, and you had to upload, then apply the deployment plan in a separate step (or use WLST or a maven plugin to do it)

how to do some action(like create database) while deploying the war file(java) into tomcat server

At the time of deploying the war(java war file) file into the tomcat server, I want to create table and insert data into table (i am using mysql).
You have multiple options :
you could deploy your application with a script (like an Apache Ant script) and include the necessary SQL code to create and populate your database
You can also check for the existence of the table at startup of the application and create it if needed. This article suggests some options to perform tasks at startup of a web application.

How run java web strat application with hsql and glassfish?

I have java program with main function, that packaged into jar archive. There is dao class with DataSource. An jdbc url to data file is expected an is passed as argument to main function. Everything works as standalone application, but how I must link jar file with database when they both in glassfish? For example, I put jnlp into glassfish docroot directory, and put HSQL database file with populated data too. Whta link I must pass tho that database? If I simple replace
"C:\path"
with
"http://localhost:8080\path_inside_docroot_folder"
I get EOFException in java when it tryies to read a file.
Off topic:
Also it very strange, when I created hsql database I write something like this:
jdbc:hsqldb:C:\\path\db_file.dat
But actually in the path there is no exactly db_file.dat. There are several files, like:
db_sile.dat.tmp
db_sile.dat.lck
db_sile.dat.log
db_sile.dat.properties
db_sile.dat.scrip
Can anyone solve my problem? May files mentioned upper influence to the problem or it is pure glassfish deploy problem?
If something unclear ask me.
The answer is you can not run HSQL inside as static resource glassfish. You can run HSQL server as HTTP server or as servlet if you deploy web application. The solution for my problem is to put JNDI file and java jar file as static resources in glassfish and run HSQL server in the same computer (where glassfish is running).

Spring MVC Web App with Default user

I am developing a web app using Spring MVC and Hibernate that I hope to package up as a WAR file and distribute for users to deploy where needed.
The application will require the database connection details before deploying, can anyone advise on the best practice of how to do this? currently my database.properties file is packaged as part of the WAR file, is there an easier way than asking the user to manually edit this file inside the WAR file or in the source and then expect them to build the war file themselves?
I would also like an easy way for users to create a single admin user on first deploy easily - is it best to just provide a sql script to create that or is there a way to include the functionality in the web app so on first deploy it creates the user?
Thanks
Since web applications are not focused to "mass production", I can't tell if something like that is possible.
You can make an SQL script containing all your CREATE statements limited by "IF NOT EXISTS" to avoid deleting existing data. Hibernate can execute a sql script at the moment of creating the SessionFactory, if Hibernate finds a file named "import.sql" located in the classpath root, Hibernate will execute it. Also you can always edit the database.properties of an application already deployed without re-packaging the WAR.
Try Liquibase, http://www.liquibase.org/ . It does not allow your users to setup database connection details but it allows you to manage the database schema (create and update the schema) and default data.

Best way to access a sqlite database file in a web service

First question from me on stack overflow.
I have created a java web application containing a web service using netbeans (I hope a web application were the correct choice). I use the web application as is with no extra frameworks. This web service use a sqlite JDBC driver for accessing a sqlite database file.
My problem is that the file path end up incorrect when I try to form the JDBC connection string. Also, the working directory is different when deploying and when running JUnit tests. I read somewhere about including the file as a resource, but examples of this were nowhere to be seen.
In any case, what is the best way to open the sqlite database, both when the web service is deployed and when I test it "locally"?
I don't know much about web services, I just need it to work, so please, help me with the technicalities.
Update
To put this a litle bit in context, some "println" code gives this:
Printing the work directory from a simple JUnit test gives
C:\MinaFiler\Work\SOA\BusTimetableWS
Invoking a similar web servic method returns
C:\Program Files\sges-v3\glassfish\domains\domain1
The connection string is formed from prepending "jdbc:sqlite:" to the path which at the moment is absolute:
C:\MinaFiler\Work\SOA\BusTimetableWS\src\java\miun\bustimetable\database\sqlit\BusTimetableWS.db
However, this fails because my tests throws exceptions stating database tables doesn't exist although they really do, I can see them with sqlite3.exe .
One way would be to use a config file that you can read and fetch your connection string from there.
I'm sure the framework you are using has some kind of standard way of saving configurations.
Another option would be to place the db in a known relative path from your main execution files. Then when executed fetch your current directory, and look for the db from that path.
In any case, what is the best way to open the sqlite database, both when the web service is deployed and when I test it "locally"?
The web service should use a DataSource to retrieve a connection from a connection pool configured at the application server level. In your unit test, use whatever you want (a standalone connection pool, a direct JDBC connection).
But in both cases, why don't you use an absolute path to the database file in your jdbc url? From How to Specify Database Files:
jdbc:sqlite:C:/work/mydatabase.db
The working directory wouldn't matter if you do so.

Categories

Resources