Yes, i try this template example and certainly the datasource in
context.xml inside the pod is created with the env variables of the
template.
If this is the way, how can i define 2 datasources for my
application. Should i have to define more env variables in the
template and the S2I makes the magic?, or should i have to adapt the
S2I to my purpose?
Thanks,
Andrés.
El 17/02/2016 a las 16:26, Ben Parees escribió:
Well the expected way to define datasources is to do what the template
example I provided does, in which case the image will actually
generate the entire datasource definition for you.
I'm not sure if the v3 images have the same behavior as v2 with
respect to env variables (in v2 we would scan the entire app server
config file for any references to an env variable, and perform
substitution). I thought that behavior was carried to v3, but not
sure and maybe there are only some files it scans and some it doesn't.
Rob Cernich might be able to shed more light on the expected behavior
there.
On Wed, Feb 17, 2016 at 9:39 AM, [email protected]
<mailto:[email protected]> <[email protected]
<mailto:[email protected]>> wrote:
Hello,
I have deployed my aplication like this:
oc new-app --name myadmin
jboss-webserver30-tomcat7-openshift~http://<...>MYADMIN.git
I set the following environment variable:
oc env dc/myadmin MYADMINDB_PORT=3306
And i check that the environment variable is set:
oc get pods
NAME READY STATUS RESTARTS AGE
myadmin-4-x2kw7 1/1 Running 0 1m
myadmindb-2-8jc15 1/1 Running 0 2h
oc env pods/myadmin-4-x2kw7 --list
# pods myadmin-4-x2kw7, container myadmin
MYADMINDB_PORT=3306
In my Java proyect, i have the file:
configuration/context.xml
with the following JNDI datasource definition:
<Resource name="jdbc/myadmin1"
url="jdbc:mysql://myadmindb:${MYADMINDB_PORT}/myadmin"
driverClassName="com.mysql.jdbc.Driver"
username="myiadminuser"
password="myadminpass"
auth="Container"
type="javax.sql.DataSource"
maxActive="20"
maxIdle="5"
maxWait="10000"
/>
When i deploy the POD the logs are:
...
Caused by:
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:
Cannot load connection class because of underlying
exception: 'java.lang.NumberFormatException: For input
string: "${MYADMINDB_PORT}"'.
at
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)
at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at
java.lang.reflect.Constructor.newInstance(Constructor.java:422)
at
com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1015)
at
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
at
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)
at
com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920)
at
com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:359)
at
org.apache.tomcat.dbcp.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
at
org.apache.tomcat.dbcp.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
at
org.apache.tomcat.dbcp.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1558)
at
org.apache.tomcat.dbcp.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1547)
... 117 more
Caused by: java.lang.NumberFormatException: For input
string: "${MYADMINDB_PORT}"
at
java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:569)
at java.lang.Integer.parseInt(Integer.java:615)
at
com.mysql.jdbc.NonRegisteringDriver.port(NonRegisteringDriver.java:882)
at
com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:350)
... 121 more
...
So, it shows there is no replacement of the TOKEN
${MYADMINDB_PORT} with its environment value 3306.
I set explicitly the value 3306, and rebuild, this JNDI
datasource works.
NOTE: In this example, i have reduced the tokens in the JNDI
datasource just to MYADMINDB_PORT for testing porpuse. I real
world the JNDI datasource shouldn't have any explicit value,
just the tokens to be replaced by environment variables.
Thanks,
Andrés.
El 11/02/2016 a las 21:08, Ben Parees escribió:
You can always add the appropriate env variables to your
"myadmin" deployment config using the "oc env" command, and then
redeploy it.
On Thu, Feb 11, 2016 at 2:52 PM, Andres <[email protected]
<mailto:[email protected]>> wrote:
Hello,
In this template you can create at the same time a MySQL
server and a Tomcat7. The Tomcat7 DataSource is
configured with the environment variables at the creation
time.
But my case is that i have already deployed and
configured the MySQL server with:
oc new-app --name mydb mysql-persistent -p
DATABASE_SERVICE_NAME=xxx -p MYSQL_USER=xxx -p
MYSQL_PASSWORD=xxx -p MYSQL_DATABASE=xxx
And i want to deploy some separate build just with a
Tomcat7, for exaple with:
oc new-app --name myadmin
jboss-webserver30-tomcat7-openshift~http://<...>/MYADMIN.git
Or other posible situation could be to need several
datasources defined in context.xml pointing to diferent DDBB.
Thanks,
Andrés.
El 09/02/2016 a las 18:59, Ben Parees escribió:
This template illustrates it:
https://github.com/jboss-openshift/application-templates/blob/master/webserver/jws30-tomcat7-mysql-persistent-s2i.json
Specifically this section defines the env variables that
will be used to define the datasource:
https://github.com/jboss-openshift/application-templates/blob/master/webserver/jws30-tomcat7-mysql-persistent-s2i.json#L454-L485
That should result in a datasource named
${APPLICATION_NAME}-mysql being constructed using the
various DB_XXX env variable content, where "DB" comes from
the "=DB" portion of the DB_SERVICE_PREFIX_MAPPING.
Kevin, is this behavior documented somewhere? I didn't see
it in the openshift image docs.
On Tue, Feb 9, 2016 at 10:55 AM, [email protected]
<mailto:[email protected]> <[email protected]
<mailto:[email protected]>> wrote:
Hi,
In Openshift2, you could reference a MySQL DB from a
Tomcat cartridge just defining some environment
variables, that were replaced automatically in the
JNDI definition at the context.xml.
<Resource name="jdbc/piadmin"
url="jdbc:mysql://*${OPENSHIFT_MYSQL_DB_HOST}*:*${OPENSHIFT_MYSQL_DB_PORT}*/*${OPENSHIFT_APP_NAME}*"
driverClassName="com.mysql.jdbc.Driver"
username="*${OPENSHIFT_MYSQL_DB_USERNAME}*"
password="*${OPENSHIFT_MYSQL_DB_PASSWORD}*"
auth="Container"
type="javax.sql.DataSource"
maxActive="20"
maxIdle="5"
maxWait="10000"
/>
In OpenShift3, this doesnt work. The tokens in
context.xml are not replaced by their corresponding
environment variable values. What is then the
correct way to connect a JNDI datasource in a Tomcat
S2I like jboss-webserver30-tomcat7-openshift?
Thanks,
Andrés.
_______________________________________________
users mailing list
[email protected]
<mailto:[email protected]>
http://lists.openshift.redhat.com/openshiftmm/listinfo/users
--
Ben Parees | OpenShift
Este correo electrónico se ha enviado desde un equipo libre
de virus y protegido por Avast.
www.avast.com <https://www.avast.com/sig-email>
--
Ben Parees | OpenShift
--
Ben Parees | OpenShift
_______________________________________________
users mailing list
[email protected]
http://lists.openshift.redhat.com/openshiftmm/listinfo/users