Wednesday, April 25, 2012

ORA-27101: shared memory realm does not exist

In [1], it has listed some tips for resolving Oracle exception:
  • ORA-27101: shared memory realm does not exist
In this article, we will show you yet another tip of resolving ORA-27101.


The Background

There are two teams share the same DB server in our environment. Team A started an Oracle instance without shutting it down. As a team B member, how do you figure out how to shut it down?

Steps

  1. Find out the SID name:
    • ps -ef | grep smon (or pmon)
    • For example, the command shows:
      • oracle 32607 1 0 10:12 ? 00:00:03 ora_smon_SOAR2
    • So, we know the SID is named SOAR2.
  2. Find out Oracle Home path:
    • Use pmap command to report the memory map of smon process. For example, we issue: "pmap 32607" and one of the output line shows:
      • 00002b3f57270000 4K rwx-- /disk2/home/oracle/atg/OracleDB_11.2.0.2/product/11.2.0/dbhome_1/lib/libocrutl11.so
  3. Setup ORACLE_HOME and ORACLE_SID environment variable
    • For example, we have set them using Linux bash:
      • export ORACLE_HOME=/disk2/home/oracle/atg/OracleDB_11.2.0.2/product/11.2.0/dbhome_1
      • export ORACLE_SID=SOAR2
However, after we started sqlplus and tried to shutdown our instance, we got:

$sqlplus "/ as sysdba

SQL*Plus: Release 11.2.0.2.0 Production on Wed Apr 25 17:15:08 2012

Copyright (c) 1982, 2010, Oracle. All rights reserved.

Connected to an idle instance.

SQL> shutdown immediate;
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory

The Issue

The problem is that /data/home is a symbolic link to /disk2/home directory. Oracle does not recognize one name used in Oracle Home path if you started it using another name.

To check what the environment variable ORACLE_HOME was set, you can check the process environment (/proc/<pid>/environ) . For example, from the following file:
  • /proc/32607/environ
we have found that ORACLE_HOME was set to be:
  • /data/home/oracle/atg/OracleDB_11.2.0.2/product/11.2.0/dbhome_1
After we have reset our ORACLE_HOME to the new path, we have resolved ORA-27101 issue.

References

  1. ORA-27101: shared memory realm does not exist tips
  2. ORA-01031: insufficient privileges

Monday, April 16, 2012

Book Review: "Oracle JDeveloper 11gR2 Cookbook"

Developing an enterprise application using SOA (i.e., Service Oriented Architecture) is a challenging  task.  With appropriate supporting technologies and tools, it can save you a lot of effort.

The core technology covered in this book is Oracle ADF.  Oracle ADF is an end-to-end Java EE framework for building rich enterprise web and mobile applications based on Java EE services and SOA.  Oracle ADF implements the "plumbing" of your application and abstracts the complexities of Java EE development.   It also takes care of areas such as:
  • Object/Relational mapping
  • Caching
  • Persistence
  • User interface framework
  • Controller layer
  • Binding of business services to user interfaces. 
Unlike other Java frameworks the development experience with Oracle ADF is visual and declarative through the JDeveloper IDE.  From the book, you can find plenty of such examples.

What's Covered?

First, the author has discussed issues that you need to address in the early design and architectural phases of the project:
  • Modularize your application
    • Break up the application in multiple workspaces
    • Divide data model into appropriate application modules
    • Avoid circular dependencies use tools such as Dependency Finder 
  • Make your application easy to extend
    • For example, allow the ability to extend the framework's base classes early on in the development process
  • Set up logging with the right logging framework
    • Choose ODL (Oracle Diagnostics Logging) for its tight integration with WebLogic and JDeveloper
  • Use page template to ensure that pages throughout the application are consistent, and provide a familiar look and feel to the end user
  • Customize the exception error message for your application
  • Use a generic backing bean actions framework to encapsulate common functionality for common JSF page actions
After laying out the foundation, the author then expand the scope of discussion vertically and horizontally. 

Vertically, the book covers different layers of the ADF's MVC architecture and various components in each layer.  Horizontally, it discusses different supporting frameworks or technologies which are used to help you create a successful end-to-end enterprise application:
  • IDE: JDeveloper
  • Integration Framework: Hudson
  • Unit Testing Framework: JUnit
  • Deployment Framework: WebLogic Server
  • Application Monitoring: JRockit Mission Control

Conclusion

This book shows you how to use Oracle JDeveloper and ADF to develop enterprise applications using SOA.

In roughly 400 pages, it tries to cover topics that are usually covered by large volumes of documentation from the following areas:
However, the author has done a good job of presenting a complex subject in a coherent and easy-to-read manner.  He has also provides many useful recipes which can be eventually incorporated into your application implementations.  Overall, it provides a useful reference for all developers starting enterprise application development with Oracle ADF.

Besides the book, the author also writes on his blogs JDeveloper Frequently Asked Questions  and ADF Code Bits.

Reviewed Book


Friday, April 13, 2012

How to Force Shutdown WebLogic Managed Server

WebLogic Server (WLS) provides several ways to start and stop server instances[1]. The method that you choose depends on whether you prefer using the Administration Console or a command-line interface, and on whether you are using Node Manager to manage the server's life cycle.

In this article, we will show you how to force shutdown WLS Managed Server from the command-line. This may come in handy when your WLS Managed Servers have stuck threads and will take you minutes to connect to it using the Console. Also, you don't care about dropping any user sessions. For example, in our case, we are just running some performance benchmarks.

stopManagedWebLogic.sh

You can stop WLS Managed Server using stopManagedWebLogic.sh script provided in your domain:
  • <domain_path>/bin
Note that the environment we demonstrate here is in Linux.  The syntax of the command is:
  • DOMAIN_NAME/bin/stopManagedWebLogic.sh managed_server_name admin_url username password
For example, we use:
  • ./stopManagedWebLogic.sh CRMDemo_server1 t3://<machine_name>:7001 weblogic weblogic1
However, the default setting is not FORCE SHUTDOWN as shown in the following output line:

Shutting down the server CRMDemo_server1 with force=false while connected to AdminServer ...

stopWebLogic.sh

stopManagedWebLogic.sh actually invokes stopWebLogic.sh indirectly as shown here:

 ${DOMAIN_HOME}/bin/stopWebLogic.sh $1 $2

To make it shutdown forcibly, you need to modify the following line in the stopWebLogic.sh from:
  • echo "shutdown('${SERVER_NAME}','Server', ignoreSessions='true')" >>"shutdown.py"
to
  • echo "shutdown('${SERVER_NAME}','Server', ignoreSessions='true', force='true')" >>"shutdown.py"
Note that WLST shutdown command[2] is used to do the work in the script.

Sample Output

After changing the script file, we re-execute the command and here is the sample output:
Stopping Weblogic Server...

Initializing WebLogic Scripting Tool (WLST) ...

Welcome to WebLogic Server Administration Scripting Shell

Type help() for help on available commands

Connecting to t3://<machine_name>:7001 with userid weblogic ...
Successfully connected to Admin Server 'AdminServer' that belongs to domain 'xxxx'.

Warning: An insecure protocol was used to connect to the
server. To ensure on-the-wire security, the SSL port or
Admin port should be used instead.

Shutting down the server CRMDemo_server1 with force=true while connected to AdminServer ...
......................................................
Exiting WebLogic Scripting Tool.

Done
Stopping Derby Server...

Stopping Admin Server

Because our change was done in stopWebLogic.sh, if you want to shutdown Admin Server, it also becomes FORCE SHUTDOWN as shown below:

$ ./stopWebLogic.sh
Stopping Weblogic Server...
Initializing WebLogic Scripting Tool (WLST) ...

Welcome to WebLogic Server Administration Scripting Shell

Type help() for help on available commands

Please enter your username :weblogic
Please enter your password :
Connecting to t3://<server_name>:7001 with userid weblogic ...
Successfully connected to Admin Server 'AdminServer' that belongs to domain 'atgdomain'.

Warning: An insecure protocol was used to connect to the
server. To ensure on-the-wire security, the SSL port or
Admin port should be used instead.

Shutting down the server AdminServer with force=true while connected to AdminServer ...
WLST lost connection to the WebLogic Server that you were
connected to, this may happen if the server was shutdown or
partitioned. You will have to re-connect to the server once the
server is available.
Disconnected from weblogic server: AdminServer
Disconnected from weblogic server:


Exiting WebLogic Scripting Tool.

Done
Stopping Derby Server...

Conclusion

Be warned that:
  • If you force shutdown server instances, the server immediately stops all processing. Therefore, any pending session data may be lost. 
  • Each WebLogic Server instance runs in its own JVM. If you are unable to shut down a server instance using the methods described, you can use an operating system command to kill the JVM.  However, if you kill the JVM for an Administration Server while the server is writing to the config.xml file, you can corrupt the config.xml file.

References

  1. Oracle® Fusion Middleware Managing Server Startup and Shutdown for Oracle WebLogic Server 11g Release 1 (10.3.4)
  2. WLST Command and Variable Reference
  3. Starting and Stopping Fusion Applications the Right Way (Oracle A-Team)
  4. Oracle WebLogic Server on Docker Containers (white paper)
  5. WebLogic on Docker (GitHub)
    • Sample Docker configurations to facilitate installation, configuration, and environment setup for DevOps users. This project includes quick start dockerfiles and samples for both WebLogic 12.1.3 and 12.2.1 based on Oracle Linux and Oracle JDK 8 (Server).

Wednesday, April 11, 2012

Performance Tuning with Hotspot VM Option: -XX:+TieredCompilation

Updated (09/26/2014):

In the latest JDK 8 release,[20] TieredCompilation is ON by default. Depending on platforms, default ReservedCodeCacheSize is bigger too.  For example, on Linux 64-bit platforms, its default size is 240MB.

Hotspot has two JITs named c1 (i.e., client JIT) and c2 (i.e., server JIT)[1,5,6]. The client JIT starts fast but provides less optimizations. So, it is used for GUI application. The server JIT starts more slowly but provide very good optimizations. The idea of tiered compilation is to get the best of both compilers, first JITs the code with c1 and then if the code is really hot to recompile it with c2.

The tiered server runtime is enabled with the following Hotspot VM options:
  • -server -XX:+TieredCompilation
In this article, we will show you how to tune code cache size (i.e., -XX:ReservedCodeCacheSize[4]) if tiered compilation is enabled. With the latest Hotspot builds,[19] we did see some performance improvement if tiered compilation is enabled. However, we also noticed that if your code cache size is not big enough, it may negatively impact your application's performance (i.e., Response Time).

PrintCompilation


Before any performance tuning, you would like to learn how JIT compiler behaves first. You can track the behavior of the JIT compiler with:
  • -XX:+PrintCompilation [4]
With this VM option, JVM will print message when a method is compiled as follows:

 66    4     n 0     java.lang.System::arraycopy (0 bytes)   (static)
 66    5       3     java.lang.String::hashCode (67 bytes)
 67    1       3     java.lang.String::equals (88 bytes)
 68    2       3     java.lang.String::charAt (33 bytes)
504   69   !         java.util.jar.Attributes::read (410 bytes)
522   70             java.util.jar.Attributes$Name::isValid (45 bytes)
522   69   !         java.util.jar.Attributes::read (410 bytes)   made not entrant
864   69   !         java.util.jar.Attributes::read (410 bytes)   made zombie

Without much ado, we will refer you to read [5] for detailed explanation of each field in the output. For our purpose, we are interested in finding out:
  • How many methods have been compiled at the beginning of, say, 10 minutes?
You can find out that by counting the lines in the log file:
  • grep :: <logfile> | wc -l
since the compilation lines all have "::" in them. Based on this information, you can estimate what size of code cache size should be for better performance. You can also use this command line option along with instrumenting the benchmark to indicate when it has completed the warm-up period. For example, if you are observing -XX:+PrintCompilation output during the measurement interval, then benchmark has not reached JIT compiler steady state.

ReservedCodeCacheSize


To improve application's performance, you can set the maximum code cache size:
  • -XX:ReservedCodeCacheSize=256m
when tiered compilation is enabled for your JVM. ReservedCodeCacheSize (and InitialCodeCacheSize) is an option for the (just-in-time) compiler of the Java Hotspot VM. Basically it sets the maximum size for the compiler's code cache. In 1.5.0_06 and earlier, the default was 1024MB for Solaris 64-bit and amd64. Now the default is 48MB for Solaris 64-bit, amd64, and -server x86.

In our experiments, we have measured the performance of ATG CRM Demo application with different maximum code cache sizes. Here are our findings:


-TC
64M
+TC
64M
+TC
128M
+TC
256M
+TC
512M
+TC
1024M
Response Time
(seconds)
0.236 Failed 0.496 0.227 0.226 0.223

TC: Tiered Compilation
nnnM: Reserved Code Cache Size

Conclusion


As the benchmark results show, you can tune your application's performance by enabling tiered compilation with appropriate setting of code cache size. To estimate how much code cache to reserve, you can connect to the JVM using jconsole and use the memory tab to see how much code cache is filled.  The performance improvement may vary based on your JVM versions and system capabilities.  But, before you do any fine tuning, read [9] first.

Finally, be warned that options that are specified with -XX are not stable and are not recommended for casual use. These options are subject to change without notice[4].

References

  1. Tiered Compilation 
  2. PrintCompilation JVM flag
  3. Infrastructure for Tiered Compilation Support
  4. Java Hotspot VM Options
  5. About PrintCompilation
  6. JVM Runtime Compilers: -client or -server 
  7. Java Tuning White Paper
  8. A Case Study of Using Tiered Compilation in HotSpot 
  9. HotSpot VM Performance Tuning Tips (XML and More)
  10. Java Performance by Charlie Hunt, Binu John, David Dagastine
  11. All other performance tuning articles on XML and More
  12. Using JConsole
  13. How to Troubleshoot High CPU Usage of Java Applications? (XML and More)
  14. HotSpot: Using jstat to Explore the Performance Data Memory (XML and More)
  15. Understanding String Table Size in HotSpot (XML and More)
  16. HotSpot VM Performance Tuning Tips (XML and More)
  17. HotSpot Performance Option — SurvivorRatio (XML and More)
  18. All other performance tuning articles on XML and More
  19. JDK 7u40 (Java(TM) SE Runtime Environment: build 1.7.0_40-b43)
    • Default values for linux-x64:
  20. JDK 8: Revisiting ReservedCodeCacheSize and CompileThreshold (Xml and More)
  21. HotSpot Virtual Machine Garbage Collection Tuning Guide
  22. Garbage-First Garbage Collector Tuning

BPEL 11.1.1.6 Certified for Prebuilt E-Business Suite 12.1.3 SOA Integrations

Prebuilt SOA Integrations for E-Business Suite Release 12 (12.1.3 or higher) using BPEL Process Manager (11.1.1.6.0) is now certified. 

Read more here.

Tuesday, April 10, 2012

ORA-28002: the password will expire within 1 days

If you use JDeveloper[1](i.e., Database Navigator) or SQL Developer[2], you might find the above dialog warns you that your user's account is about to expire.  In our case, fusion user's account will expire within one day.  Here are the steps we use to correct the issue.

How to Check the Expiry Date of User's Accounts?

For Oracle Fusion installations, you need to change all fusion-related accounts if you find one of them (i.e. "FUSION") has expired or is going to expire.  To find the account status and its expiry date, you can use:

SQL> select username, account_status, lock_date, expiry_date from dba_users;

USERNAME                       ACCOUNT_STATUS            LOCK_DATE     EXPIRY_DATE

------------------------------ ------------------------  ------------- -----------
...             

FUSION_MDS                     EXPIRED(GRACE)                          10-APR-12

FUSION_WEBCENTER               EXPIRED(GRACE)                          10-APR-12

FUSION_ACTIVITIES              EXPIRED(GRACE)                          10-APR-12

FUSION_ORA_ESS                 EXPIRED(GRACE)                          11-APR-12

FUSION                         EXPIRED(GRACE)                          10-APR-12

How to Extract the Encrypted Password?

As DBA, you can extract the encrypted password from the dba_users view, save it, and reset the password after you have finished your testing.  In our case, we are conducting performance test using ATG CRMDemo application and our fusion-related accounts have expired.  So, what we need to do is just resetting the password.  Here are the steps that we have used.

To extract the encrypted password for "FUSION", you use[3]:

select
  'alter user "'||username||'" identified by values '''||
  extract(xmltype(dbms_metadata.get_xml('USER',username)),
  '//USER_T/PASSWORD/text()').getStringVal()||''';'  old_password
from
   dba_users
where
username = 'FUSION';
 
 
OLD_PASSWORD

-------------------------------------------------------------------

alter user "FUSION" identified by values '7F749E2EB6A437D3';

Now what we need to do next is just resetting the password to extend the expiry date by six months:

SQL>alter user "FUSION" identified by values '7F749E2EB6A437D3'; 

alter user "FUSION" succeeded.

Note that you need to be the "sys" user to reset all other fusion-related accounts.  Otherwise, you will get:
SQL Error: ORA-01031: insufficient privileges

For example, when we tried:
SQL> alter user "FUSION_DYNAMIC" identified by values 'DC7B1297F45F8FA0';

We have seen the following error:

SQL Error: ORA-01031: insufficient privileges

01031. 00000 -  "insufficient privileges"
... 
          
After resetting all fusion-related accounts, we now have all account opened as shown below:
SQL> select username, account_status, lock_date, expiry_date from dba_users;

USERNAME                       ACCOUNT_STATUS            LOCK_DATE     EXPIRY_DATE

------------------------------ ------------------------  ------------- -----------
...             

FUSION_MDS                     OPEN                                    06-OCT-12

FUSION_WEBCENTER               OPEN                                    06-OCT-12

FUSION_ACTIVITIES              OPEN                                    06-OCT-12

FUSION_ORA_ESS                 OPEN                                    06-OCT-12

FUSION                         OPEN                                    06-OCT-12

References

  1. Oracle JDeveloper 11gR2 Cookbook by Nick Haralabidis 
  2. Oracle SQL Developer
  3. Oracle passwords - changing, expiring and locking users
  4. Oracle: How to Configure User Accounts to Never Expire? (Xml and More)

Thursday, April 5, 2012

How to Test Large Page Support on Your Linux System

Enabling large page support on Linux systems can give a significant boost to Java performance. This is especially true for Java applications with large datasets or running with large heap sizes[1].

In this article,  we will show you how to test:
  • if your Linux system supports large page
  • if your Linux system is configured correctly for large page support

How to Test If Large Page Is Supported?


To check if your system can support large page memory, try the following:  
$ cat /proc/meminfo | grep Huge  

Below we show the test results of three systems:

System 1
$ cat /proc/meminfo | grep Huge
HugePages_Total:     0
HugePages_Free:      0
HugePages_Rsvd:      0
Hugepagesize:     2048 kB

System 1 supports large page memory.  However, it was not configured to use it.  Note that large page size is in 2MB instead of the standard 4KB.

System 2
$ cat /proc/meminfo | grep Huge
$

System 2 does not support large page memory.

System 3
$  cat /proc/meminfo | grep Huge
HugePages_Total:  4000
HugePages_Free:   4000
HugePages_Rsvd:      0
Hugepagesize:     2048 kB

System 3 supports large page memory and it is configured to support up to  8GB.

How to Test If Large Page Is Configured Correctly?


In the following tests, we use Hotspot VM as our JVM.   Beginning with Java SE 5.0 there is now a cross-platform flag for requesting large memory pages:
  • -XX:+UseLargePages (on by default for Solaris, off by default for Windows and Linux).

It is a good idea to verify that the large-page configuration in your system is correct  by running this command:  

$java -Xmx400m -XX:+UseLargePages -version

Test 1

$java -Xmx400m -XX:+UseLargePages -version
Java HotSpot(TM) Server VM warning: Failed to reserve shared memory (errno = 12).
java version "1.6.0_11"
Java(TM) SE Runtime Environment (build 1.6.0_11-b03)
Java HotSpot(TM) Server VM (build 11.0-b16, mixed mode)
Test 1 was run on System 1 which supports large page, but is not configured for its use.

Test 2

$ java -Xmx400m -XX:+UseLargePages -version
Java HotSpot(TM) Server VM warning: Failed to reserve shared memory (errno = 38).
 java version "1.6.0_29"
Java(TM) SE Runtime Environment (build 1.6.0_29-b11)
Java HotSpot(TM) Server VM (build 20.4-b02, mixed mode)

Test 2 was run on System 2 which doesn't support large page.

Test 3

$ ./java -Xmx400m -XX:+UseLargePages -version
java version "1.6.0_29"
Java(TM) SE Runtime Environment (build 1.6.0_29-b11)
Java HotSpot(TM) Server VM (build 20.4-b02, mixed mode)

Test 3 was run on System 3 which supports large page and is configured to use it.

Conclusion


In this article, we have introduced you how to test:
  • if your system supports large page or not
  • if your system is configured correctly for large page

Two final tips:
  1. To learn how to configure large page support on your Linux system, read [1].
  2. To request large memory pages on JRockit, you can use the following VM options[4]:
    • -XlargePages
    • -XlargePages:exitOnFailure
    • -XX:+|-UseLargePagesFor[Heap|Code] 
      • Recommended by Oracle

References

  1. Java SE Tuning Tip: Large Pages on Windows and Linux 
  2. Understanding Garbage Collection
  3. Java Tuning White Paper
  4. Oracle® JRockit Command-Line Reference
  5. Memlock limit too small (one of the requirements for large page support)
  6. JRockit: Could not acquire large pages for 2Mbytes code
  7. JRockit: Unable to open temporary file /mnt/hugepages/jrock8SadIG
  8. Oracle Fusion Middleware 11g SOA White Paper February 2013 (Check out "Huge pages" for the instructions of enabling huge pages on Linux kernel 2.6)
  9. huge page - The Linux Kernel Archives

Tuesday, April 3, 2012

Configuring WebLogic Server with a Different JVM

If you need to configure WebLogic Server to use a differnt JVM, you need to deal with two environment variables:
  • JAVA_HOME
    •  Specifies the location of the version of Java used to start WebLogic Server
  • JAVA_VENDOR
    • Specifies the vendor of the JVM (i.e., "Sun", "Oracle", etc.)
In this article, we will examine how these two variables interplay and how do you make changes.  In general, JAVA_VENDOR, if found, is used to define JAVA_HOME.  But, setting JAVA_VENDOR to select which JDK to use depends on whether the system have found the JDK you want to use at the time that WebLogic Server was installed.

BEA_JAVA_HOME and SUN_JAVA_HOME

When WebLogic Server installs, if it can find a JRockit JDK and a Sun JDK, it sets the variables BEA_JAVA_HOME and SUN_JAVA_HOME as shown below:

BEA_JAVA_HOME=""
export BEA_JAVA_HOME
SUN_JAVA_HOME="<path_to_jdk>/jdk6"
export SUN_JAVA_HOME

in the setDomainEnv.sh (or .cmd) file.  In our environment, it has only Sun JDK and no JRockit JDK.  So, that's why you see that BEA_JAVA_HOME was set to be "".

The actual JDK that is used is then determined if the JAVA_VENDOR="Sun" (then use SUN_JAVA_HOME) or JAVA_VENDOR="Oracle" (use BEA_JAVA_HOME).

 if [ "${JAVA_VENDOR}" = "Oracle" ] ; then
        JAVA_HOME="${BEA_JAVA_HOME}"
        export JAVA_HOME
else
        if [ "${JAVA_VENDOR}" = "Sun" ] ; then
                JAVA_HOME="${SUN_JAVA_HOME}"
                export JAVA_HOME
        else
                JAVA_VENDOR="Sun"
                export JAVA_VENDOR
                JAVA_HOME="<path_to_jdk>/jdk6"
                export JAVA_HOME
        fi
fi

But if the JDKs weren't found on install, setting JAVA_VENDOR doesn't work, and if you want a completely arbitrary JDK, then you have to change the appropriate JAVA_HOME variable.

In the above setDomainEnv.sh, it first tries to use JAVA_VENDOR to determine which JDK to use.  If the user didn't set that before WLS is started, it will use the default (i.e., the only JDK found during installation). If you want to use a JDK not found at installation time, you may need to manually change setDomainEnv.sh to fit your needs.

Monday, April 2, 2012

Configuring JDeveloper with a Different JDK

In JDeveloper, you can change the JDK version (for example, changing from 32-bit to 64-bit) that the IDE uses or the project uses easily.  But, don't be confused with which is which.  In this article, we will introduce you how to do both.

Java SE Definitons

JDeveloper uses Java SE definitions to describe an installed Java SE environment. This environment can be either a JRE or an SDK.

Note that if you are using a JRE, some features may not be available. Every JDeveloper project uses a Java SE definition to determine what version of the Java API to compile and run with.

Changing JDK That IDE Uses

To change JDK that IDE uses, you can do this:
  • Configuring JDeveloper via the SetJavaHome configuration parameter in the jdev.conf.
Noted that directive SetJavaHome is not required by default, except for the base install, since the launcher will determine the JAVA_HOME.  On Windows it looks in ..\..\jdk, on UNIX it first looks in ../../jdk. If no JDK is found there, it looks in the PATH.

JDeveloper creates a Java SE definition for the Java SE environment being used to run JDeveloper. By default, this definition is used by all new projects. However, additional definitions can be created from any available Java SE. These new definitions can be created in either the user libraries or the system libraries. In a multiuser environment, Java SE definitions created in the user libraries are user specific, while ones created in the system libraries are shared by all users.

To create a new Java SE definition, you follow these steps:

Tools > Manage Libraries > Java SE Definition > New
This will bring up a Create Java SE dialog:
Each Java SE definition encapsulates:
  • a Java executable—used for launching programs
  • a classpath—containing the classes available within the Java SE environment
  • a source path—containing the source files associated with the Java SE classes
  • a doc path—containing the Javadoc files for the Java SE classes
From now on, JDeveloper will use the new JDK for its operation.   For existing projects, we need to make sure it uses the new JDK.

Changing JDK That Project Uses

Setting the target Java SE specifies which Java SE JDeveloper will use when compiling and running your project.

To view or change the current Java SE for an individual project:
  1. In the Application Navigator, select the appropriate project.
  2. From the main menu, choose Application > Project Properties, or right-click and choose Project Properties.  The Project Properties dialog opens with the common input paths displayed or on the last page that you viewed.
  3. On the Libraries and Classpath page the Java SE Version used for the project is displayed. Click Change to define a new Java SE.
  4. When finished, click OK.



Also Consider...

When you run the Integrated WebLogic[3] for the first time in the JDeveloper, the
  • .jdeveloper/system11.1.1.x.xx.xx.xx/DefaultDomain/bin/startWebLogic.sh
script will be created.  Associated with that, the setDomainEnv.sh script will be created in the same directory.  So, if you do want to change the JDK location, you may want to change this file as well.

Finally, JDeveloper enables you to manage libraries and Java SEs outside the project scope too.  To learn more, read [4].

References

  1.  JDeveloperWorking with Applications and Projects
  2. Oracle JDeveloper 11gR2 Cookbook by Nick Haralabidis
  3. Integrated WebLogic Server (WLS)
  4. Managing Libraries and Java SEs Outside the Project Scope 
  5. What operating systems and JDK's are supported for the JDeveloper IDE?