- GlassFish 3.2
- SQL Server
- EclipseLink
Download and explode WildFly zip archieve.
DataSource
In order to configure SQL Server based DataSource we need to add a module in WildFly:
- create modules\system\layers\base\com\microsoft\sqlserver\jdbc\main (it not manadatory to have this name but it must be a subdirectory of modules...?)
- copy sqljdbc4.jar in thsi subdirectory
- create a module.xml with the following content:
<?xml version="1.0" encoding="utf-8"?> <module xmlns="urn:jboss:module:1.3" name="com.microsoft.sqlserver.jdbc"> <resources> <resource-root path="sqljdbc4.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module>
- in the drivers section of standalone\configuration\standalone.xml add the folowing sub-section:
<driver name="sqlserver" module="com.microsoft.sqlserver.jdbc"> <xa-datasource-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</xa-datasource-class> </driver>
- in the datasources section add the following sub-section (change the default settings according to your needs):
<datasource jta="true" jndi-name="java:/MyPool" pool-name="MyPool" enabled="true" use-ccm="true"> <connection-url>jdbc:sqlserver://127.0.0.1:1433;databaseName=MyDatabase;</connection-url> <driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class> <driver>sqlserver</driver> <security> <user-name>myuser</user-name> <password>mypassword</password> </security> <validation> <validate-on-match>false</validate-on-match> <background-validation>false</background-validation> </validation> <timeout> <set-tx-query-timeout>false</set-tx-query-timeout> <blocking-timeout-millis>0</blocking-timeout-millis> <idle-timeout-minutes>0</idle-timeout-minutes> <query-timeout>0</query-timeout> <use-try-lock>0</use-try-lock> <allocation-retry>0</allocation-retry> <allocation-retry-wait-millis>0</allocation-retry-wait-millis> </timeout> <statement> <share-prepared-statements>false</share-prepared-statements> </statement> </datasource>
You can test your datasource from the management console now.
Please notice that WildFly will accept only jndi names that start with java:/ (or java:jboss..(?)) while the practice on Glassfish is to have (for datasources) jdbc as a prefix. Trying to change the name on Glassfish (starting with java: will induce huge performance issues (high CPU) )
JPA Provider
First attempt: tryed with proposed default JPA provider for WildFly: Hibernate. Worked fine till firtst attempt to access a property with fetch type LAZY (the default). An exception was thrown claiming that org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: <some collection type property>, could not initialize proxy - no Session
Since the solution found on the net were not acceptable (at first sight) I tried to switch back (explicitly) to EclipseLink:
- Download latest EclipseLink.jar and place it in existing sub-directory: modules\system\layers\base\org\eclipse\persistence\main
- modify the existing module.xml adding <resource-root path="eclipselink.jar"/>
- add (top level section) in standalone.xml:
<system-properties>
<property name="eclipselink.archive.factory" value="org.jipijapa.eclipselink.JBossArchiveFactoryImpl"/>
</system-properties>
Without this property eclipselink will throw an exception about non-existing named queries at application runtime
Security Realm
The application used an security realm that was configured on Glassfish to use (for development purpose) a fileRealm. The easiest way to port this is to use a security domain based on RealmDirect (which in turn will use standard application-users.properties and application-roles.properties
<security-domain name="AD" cache-type="default">
<authentication>
<login-module code="RealmDirect" flag="required">
<module-option name="password-stacking" value="useFirstPass"/>
</login-module>
</authentication>
</security-domain>
To generate the test user(s) run add-user.bat, choose b option, provide username,password and comma separated roles when prompted.
For the application to use this security domain add <security-domain>AD</security-domain> in jboss-web.xml. Without it the default 'other' security domain will be used never mind the realm-name specification in web.xml
For the application to use this security domain add <security-domain>AD</security-domain> in jboss-web.xml. Without it the default 'other' security domain will be used never mind the realm-name specification in web.xml
No comments :
Post a Comment