lancetekk
lancetekk

Reputation: 15

How can i store database information in JSF2

In my managed bean i need to access a mySql database. So far i used code like this:

    Class.forName("com.mysql.jdbc.Driver"); 
    String url = "jdbc:mysql://localhost:3306/test";
    String username = "user";
    String password = "1234";
    Connection connection = null;
    try {
        connection = DriverManager.getConnection(url, username, password);

Now i have to do this in more than one bean, so if i need to change the database credentials, i have to fiddle around in like 10 files.

Is there

  1. a way to store the databaseconnection
  2. a way to define some variables for the whole web project

Thanks in advance

Upvotes: 1

Views: 887

Answers (2)

Tom
Tom

Reputation: 47

It is generally a good idea to store these kind of values in a .properties file. They can then be accessed via java.util.Properties (http://docs.oracle.com/javase/7/docs/api/java/util/Properties.html)

Here is a good tutorial describing how access these files and their values, I suggest you start with this: http://www.mkyong.com/java/java-properties-file-examples/

(More information: http://en.wikipedia.org/wiki/.properties)

In my IDE, I usually create a new source package /src/main/config and put all my configuration-concerning .properties and .xml files in there. If you do it this way, you need to access it like this from within your jsf application:

String configFilePath = "configuration.properties";

props = new Properties();

InputStream propInStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(configFilePath);

props.load(propInStream);

Or you can simply do this: How to get properties file from /WEB-INF folder in JSF?

Upvotes: 0

erencan
erencan

Reputation: 3763

First of all you should understand basic architecture of a Java EE project. It is not a good idea connecting databases in managed beans. It is really bad practice. Please have look my previous answer to understand basic architecture.

Database connections is done in Integration Tier and these classes are called Data Access Objects (DAO).

Create a BaseDao class for static connection properties.

class BaseDao
{
    private String url = "jdbc:mysql://localhost:3306/test";
    private String username = "user";
    private String password = "1234";
    private Connection connection;

    protected Connection getConnection()
    {     
          connection = DriverManager.getConnection(url, username, password);    
          return connection;
    }
}

and extend base class to its derived classes where database connection is needed and access connection by using BaseDao#getConnection().

Furthermore, it is better to keep database connections in a properties file and inject them into proper classes.

Related Tutorial

Read BalusC tutorial for better understanding DAO tutorial - the data layer

Upvotes: 2

Related Questions