Je suis en train de faire une application mvc print en utilisant gradle comme outil de construction et Mysql comme source de données jndi. Je suis capable de l'exécuter en construisant une guerre et en la déployant manuellement. Mais quand je suis en train de l'exécuter en utilisant Gretty je reçois l'exception suivantejavax.naming.NoInitialContextException avec mysql DataSource et gretty
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
Ceci est mon fichier build.gradle: -
apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'eclipse-wtp'
//apply plugin: 'jetty' //too old, Jetty6, use gretty
apply plugin: 'org.akhikhl.gretty'
apply plugin: 'idea'
apply plugin: 'jacoco' //code coverage
def springVersion = "4.2.4.RELEASE"
def jdkVersion = 1.8
def junitVersion = "4.12"
def logbackVersion = "1.1.3"
def jclOverSlf4jVersion = "1.7.14"
def jstlVersion = "1.2"
def hamcrestVersion = "1.3"
def servletApiVersion = "3.1"
def mysqlVersion = "5.1.31"
sourceCompatibility = jdkVersion
targetCompatibility = jdkVersion
repositories {
mavenLocal()
mavenCentral()
}
task wrapper(type: Wrapper) {
gradleVersion = '2.10'
}
configurations.all {
exclude group: "commons-logging", module: "commons-logging"
}
dependencies {
compile 'org.slf4j:jcl-over-slf4j:' + jclOverSlf4jVersion
compile 'ch.qos.logback:logback-classic:' + logbackVersion
compile 'org.springframework:spring-webmvc:' +springVersion
compile 'org.springframework:spring-context:' + springVersion
compile 'org.springframework:spring-orm:' + springVersion
compile 'javax.servlet:jstl:' + jstlVersion
compile 'org.springframework:spring-test:' + springVersion
compile 'mysql:mysql-connector-java:' + mysqlVersion
//exclude the build in hamcrest
testCompile('junit:junit:' + junitVersion) {
exclude group: 'org.hamcrest'
}
testCompile 'org.hamcrest:hamcrest-library:' + hamcrestVersion
//include in compile only, exclude in the war
providedCompile 'javax.servlet:javax.servlet-api:' + servletApiVersion
}
//Gretty
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'org.akhikhl.gretty:gretty:1.1.5'
}
}
gretty {
port = 9090
contextPath = 'loanSharks'
servletContainer = 'tomcat8'
}
//For Eclipse IDE only
eclipse {
wtp {
component {
//define context path, default to project folder name
contextPath = 'loanSharks'
}
}
}
jacoco {
toolVersion = "0.7.5+"
reportsDir = file("$buildDir/reports/jacoco")
}
jacocoTestReport {
reports {
xml.enabled = true
html.enabled = true
}
}
Voici mon entrée JNDI dans web.xml: -
<resource-ref>
<res-ref-name>jdbc/devcore</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
Ceci est mon entrée dans le fichier-config printemps: -
<bean id="dataSource"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/devcore" />
<property name="lookupOnStartup" value="true"/>
<property name="proxyInterface" value="javax.sql.DataSource"/>
</bean>
J'ai aussi mes entrées de base de données dans les fichiers META-INF/context.xml et les fichiers META-INF/jetty-env.xml comme cela a été suggéré dans d'autres publications connexes. Donc, quelqu'un peut-il expliquer pourquoi je suis incapable d'utiliser gretty pour exécuter ma demande.