Changes

Jump to: navigation, search

NexJ Express Connecting to PostgreSQL

1,110 bytes added, 20:30, 26 January 2014
no edit summary
<big><big> PostgreSQL Adapter for NexJ - Create Test Environment </big></big>{{NexJ_Express IndexAdmon/obsolete}}
[[category: NexJ Express PostgreSQL]][[Category:NexJ_Express_Development]][[category: NexJ Express]]
* == Task Summary =={| border="1" cellpadding="4" cellspacing="2" style="border: 1px solid black;border-collapse:collapse;"|-! Task! Status|- | Install the PostgreSQL Server| DONE|- | Install PostgreSQL driver| DONE|- | Add code to connect to server| DONE|-| Create Script for Test database| DONE |-| Test connection to the server| DONE|-| Configure UnitTests for multiple DB's| |} == Task Details ===== Install PostgreSQL ===Download: <code>Version 9.0</code> from list of [http://www.enterprisedb.com/products/pgdownload.do#windows PostgreSQL downloads]. === Install PostgreSQL JDBC3 driver ===Download: <code> JDBC3 Postgresql Driver, Version 9.0-801 </code> @ http://jdbc.postgresql.org/download.html <br/>Install: Copy driver to <code>[PostgreSQL_Adapter-jdk folder]/jre/lib/ext</code> === Code: Add PostgreSQL Driver ===Package: <code>nexj.core.persistance.sql</code>:Create <code>PostgreSQLAdapter.java</code> by extending <code>SQLAdapter</code>:Create <code>PostgreSQLSchemaManager.java</code> by extending <code>SQLSchemaManager</code> :Edit <code>RelationalDatabase.java</code>:Edit <code>RelationalDatabaseFragment.java</code>:Edit <code>SQLSchemaManagerFactory.java</code> Package: <code>nexj.core.meta.sys</code>:Edit <code>system.dstypes</code> === SQL Scripts ===Package: <code>nexj.core.persistence.sql.script</code>:Create * <code>postgresql_setup.sql</code>* <code>postgresql_drop.sql</code>* <code>postgresql_insert.sql</test-envcode>* <code>postgresql_upd_addr.sql</code>* <code>postgresql_upd_cont.sql</todo |TODOs]]code>
* [[PostgreSQL_Adapter-=== UnitTest: Test Connectivity to database ===Package: <code>nexj.core.persistance.sql</test-envcode>:Create <code>PostgreSQLAdapterTest.java</files | Files to Modify]]code> by extending <code>SQLAdapterTest</code>:Create <code>PostgreSQLSchemaManagerTest.java</code> by extending <code>SQLSchemaManagerTest</code>
Package: <code>nexj</code>:Create <code>postgresql.connections</code> using NexJ Studio:Edit <code>default.config</code> to use PostgreSQL:Edit all <code>*.connections</code> files to use PostgreSQL == 1=Configure UnitTests for more than one Database=== <!- -== Setup the postgresql-connection ==
For testing the connection, the 'AllTests.java' is being used.
: Installed the <code> Installer version Version 9.0.1-1</code> from list of [http://www.enterprisedb.com/products/pgdownload.do#windows PostgreSQL downloads].: Installed the <code> JDBC3 Postgresql Driver, Version 9.0-801 </code> @ http://jdbc.postgresql.org/download.html and added it to the libraries in JDK
:: The driver class which is being used for NexJ Express Model is: <code> org.postgresql.xa.PGXADataSource </code>
:: The driver is loaded from RelationalDatabaseFragment.java and RelationalDatabase.java
: After all properties are loaded, it creates the connection through Connection Factory files.
===- ModificationsFiles to Configure==={|class="collapsible collapsed" style="border-style:solid;border-width:thin;border-color:black"!align="left" style="background-color:SteelBlue; font-weight:bold;border-style:solid;border-width:thin;padding: 2px 2px 2px 2px;"| '''NOTE''': Changes Done to MySQL adapterthese files are involved with ''' |1- |Port''', which should be: When a connection is first established5432, this initial SQL statement and '''2- Driver package''' that should execute in MySQL, which is not the case for PostgreSQL, so it was commented out:::change to <source lang=javacode>/* MySQLAdapterorg.postgresql.xa.java *PGXADataSource </code>: srcpublic String getInitialSQL():: system.dstype { StringBuffer buf = new StringBuffer();  buf:: DatabaseTool.append("set sql_mode = concat(@@sql_mode, ',ANSI_QUOTES')"); java // allow using doublequote when quoting column names in "CREATE TABLE" statementsThis file calles SQLSchemaMangerFactory.java and creates the connection buf:: RelationalDatabase.append(";set optimizer_search_depth = 0"); java // let DB automatically decide on how long it takes to examine plans, improves long planning sessionsSets the default properties for the supported drivers buf:: RelationalDatabaseFragment.append(";set max_sort_length = ").append(Math.max(MAX_VARCHAR_PRECISION, MAX_VARBINARY_PRECISION)); java // set TEXT/BLOB minimum sorting length to be same as cutoff between varchar/text return buf.toString(); }</source>Sets the custom fragment properties for the supported drivers: Also the same line should be commented out : Driver type and some other properties in postgresql_createJDBCInfo.sql script, which is being used to create tables in the database 'test':java::<source lang=SQLSchemaManagerFactory.java> /* nexj/core/persistence/sql/etc/postgresql_create.sql */Sets the connection for the particular adapter typeset sql_mode = concat(@@sql_mode, ',ANSI_QUOTES');</source>: test: After activating the connection, the database is locked: AllTests.java: In MySQL, the storage engine is set to a transactional safe engine such as [http://wwwdefault.wikivs.comconfig /wiki/MySQL_vs_PostgreSQL#MySQLchange to these four files are:InnoDB InnoDB], whereas adapter="PostgreSQL has a single built in engine" port="5432":: postgresql. So, changes needed to be done to this scriptconnection ::filestorage.connections::<source lang=java>create table testfilestoragefragment.Account(connections id binary(16) not null, contactId binary(16) not null, account Type varchar(16) character set utf8 not null, funds double null, constraint Account_PK primary key(id) )engine=innoDB;</source--|}

Navigation menu