Note: This was done using 11.1.1.2 which is the latest version of FMW 11g and JDeveloper 11g
1. Edit setDomainEnv script to ensure you set this property to true. By default it's false.
WLS_JDBC_REMOTE_ENABLED="-Dweblogic.jdbc.remoteEnabled=true"
2. Re-start your server to pick up the change done at step #1 above.
3. In your project add the following libraries to allow remote access and the required JDBC driver library.
- Weblogic 10.3 Remote-Client
- Oracle JDBC
package pas.au.remote.wls11g;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Date;
import java.util.Hashtable;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
public class RemoteDataSourceAccess
{
private Logger logger = Logger.getLogger(this.getClass().getSimpleName());
public RemoteDataSourceAccess()
{
}
public void run ()
{
logger.log(Level.INFO, "Started RemoteDataSourceAccess at " + new Date());
InitialContext ctx = null;
try
{
ctx = getInitialContext();
DataSource ds = (DataSource) ctx.lookup("jdbc/scottDS");
Connection conn = (Connection) ds.getConnection();
logger.log(Level.INFO, "Got connection : " + conn);
logger.log(Level.INFO, "Auto Commit = " + conn.getAutoCommit());
}
catch (NamingException e)
{
logger.log(Level.SEVERE, "Error occurred", e);
System.exit(1);
}
catch (SQLException e)
{
logger.log(Level.SEVERE, "SQLException occurred", e);
System.exit(1);
}
logger.log(Level.INFO, "Ended RemoteDataSourceAccess at " + new Date());
}
public static InitialContext getInitialContext() throws NamingException
{
String JNDI_FACTORY="weblogic.jndi.WLInitialContextFactory";
String url = "t3://wayne-p2.au.oracle.com:7003";
String username = "weblogic";
String password = "welcome1";
Hashtable<String,String> env = new Hashtable<String,String>();
env.put(Context.SECURITY_PRINCIPAL, username);
env.put(Context.SECURITY_CREDENTIALS, password);
env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);
env.put(Context.PROVIDER_URL, url);
return new InitialContext(env);
}
public static void main(String[] args)
{
RemoteDataSourceAccess test = new RemoteDataSourceAccess();
test.run();
}
}
5. Output as follows.
25/02/2010 9:22:56 AM pas.au.remote.wls11g.RemoteDataSourceAccess run
INFO: Started RemoteDataSourceAccess at Thu Feb 25 09:22:56 EST 2010
25/02/2010 9:23:03 AM pas.au.remote.wls11g.RemoteDataSourceAccess run
INFO: Got connection : weblogic.jdbc.rmi.SerialConnection_weblogic_jdbc_rmi_internal_ConnectionImpl_weblogic_jdbc_wrapper_PoolConnection_oracle_jdbc_driver_T4CConnection_1032_WLStub@1
25/02/2010 9:23:03 AM pas.au.remote.wls11g.RemoteDataSourceAccess run
INFO: Auto Commit = true
25/02/2010 9:23:03 AM pas.au.remote.wls11g.RemoteDataSourceAccess run
INFO: Ended RemoteDataSourceAccess at Thu Feb 25 09:23:03 EST 2010
3 comments:
Hi Pas
Silly question but what's the reason for wanting to do this?
CM.
Lots of customers seemed to want to remotely connect to a data source from OC4J. So I was curious as to how easy this was with FMW 11g (WLS now) and apart from enabling it on the server side, it worked the same way. I also wanted to know what JAR files the client would need and it seems JDeveloper took care of that with the library "Weblogic 10.3 Remote-Client".
Personally would rather connect to the database directly using JDBC/THIN but obviously some customers were required to use a data source lookup remotely to connect to there database.
Hi Chris,
I use it in standalone applications to lookup a Datasource for a JDBC connection or to add a message to AQ.
So the administrator can change these datasource and I don't need to store the username password in the Client app.
thanks Edwin
Post a Comment