tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Christopher Schultz <ch...@christopherschultz.net>
Subject Re: Fwd:
Date Tue, 24 Nov 2015 12:26:22 GMT
Yuval,

On 11/23/15 8:38 AM, Yuval Schwartz wrote:
> I am using tomcat 8.0.22.0
> Language: Java
> development: Windows, NetBeans.
> deployment: ec2 linux
> 
> I am still having trouble understanding/working with "path" and "docBase"
> of context element.
>
> I have two questions:
> 
> First of all, I have a context.xml file in the WEB-INF folder of my
> application (call it "myApplication" henceforth) that looks like:
> 
> <Context path="">

You should never specify the "path" attribute in your context.xml file.
Instead, name the WAR file (or exploded directory) the same name as you
want your context's path to be. For a path of "" (empty), use the name
ROOT.war (or ROOT directory).

> <Resource name="jdbc/some_db" auth="Container"
>         maxActive="100" maxIdle="30" maxWait="10000"
>         username="blah" password="blahblah"
>         driverClassName="com.mysql.jdbc.Driver"
>         url="jdbc:mysql://localhost:3306/some_db?autoReconnect=true"
>         logAbandoned="true" removeAbandoned="true"
>         removeAbandonedTimeout="60" type="javax.sql.DataSource" />
> </Context>
> 
> My context path is set to the empty string because once I set up a domain
> name it will be redundant to have both the application name and domain name
> in the url (they are the same).

See above.

> This works on my development environment.

You may notice that your application is deployed on both context paths,
taking up twice as much heap space. Or it might not. Using "path" within
a context.xml file not well-defined, but it is expressly prohibited in
the documentation[1] though not actively prohibited by code.

> When I deploy this to a linux server of an ec2 instance (on aws) I add a
> line to the server.xml file (in tomcat/conf) under the <Host> element which
> reads:
> <Context path="" docBase="myApplication"/>

You should not do this. Instead, drop your ROOT.war into Tomcat's
deployment directory. If you move to EBS, you'll just be deploying the
WAR file anyway and shouldn't touch the application servers at all.

> (If I don't add this element to the server.xml file then entering just the
> domain in the url takes me to the Apache Tomcat "successful installation"
> page rather than to the welcome page of myApplication).

Use ROOT.war.

> First question:
> Is this the correct way to set up tomcat so that my application has no
> context path?

No. Note that it /does/ have a context path: it's just an empty string.

> Not sure if this leads to the "double deployment" problem or
> not. When I open the tomcat manager I see two applications: one with path:
> "/" and the other with path "/myApplication". (for some reason, I don't
> have the option to "undeploy" the application with path: "/")

You don't have that option because you have put your <Context> into
server.xml.

> Second question:
> The resource element within the context element of my context.xml file
> (located in WEB-INF) specifies a url that is specific to my development (ie
> local) environment.

Which URL? The JDBC URL?

> When I deploy myApplication to the ec2 instance I would like the resource
> element to have a different url attribute (since it will now be connecting
> with a database on an aws server).
> One way that I found to do this was to add to the context.xml file in the
> tomcat/conf directory of my server.

Nonnononoon. Never modify the conf/context.xml file... that changes the
defaults for every application deployed. While you may be deploying only
a single application, it then separates your configuration into two
files when one single file will do.

> There I add a resource element (between
> the existing context element) which is identical to the one above only with
> a url attribute that points to the database hosted on aws.

Package your WAR file with the correct URL and then deploy it.

> This way, my application is able to connect with my database without me
> changing any of the code in myApplication.
> However, my Catalina.log file displays:
> WARNING [localhost-startStop-1]
> org.apache.catalina.core.NamingContextListener.add Resource Failed to
> register in JMX: javax.naming.NamingException: Could not create resource
> factory instance [Root exception is java.lang.ClassNotFoundException:
> org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory]
> 
> And my localhost.log file shows a nullpointerexception for the line in my
> code:
> ic.lookup("java:comp/env/jdbc/some_db");
> (Where ic is an InitialContext Object)
> 
> There are also problems in the deployed website with some of the code that
> grabs data from the db (but some of the db related code works successfully).
> 
> Any insight or suggestions would be greatly appreciated.
> I'm new to a lot of this (extremely new to deploying to a server).

This second issue is discussed in another part of this thread.

-chris

[1]
http://tomcat.apache.org/tomcat-8.0-doc/config/context.html#Defining_a_context

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Mime
View raw message