мое приложение Java EE развернуто на Glassfish 3.0.1 и использует пул соединений JDBC для подключения к базе данных Oracle 9i. Я использую JPA для чтения / записи данных в базу данных, которая работает нормально. Тем не менее, чтобы получить более точные отчеты о нагрузке, которую приложение прикладывает к базе данных, я хочу установить столбец V $ SESSION.program для использования oracle.
Из различных поисков в Google (например, http://forums.oracle.com/forums/thread.jspa?messageID=3271623) похоже, я должен просто добавить это как свойство, так же, как вы задали бы любое другое свойство. Поэтому я попытался сделать это, изменив домен XML-файл для Glassfish (см. ниже), а свойство V $ SESSION.program теперь устанавливается в пуле соединений JDBC, когда я просматриваю его с помощью консоли администратора Glassfish (Когда я запускаю сервер glassfish, перейдите на страницу администратора и перейдите в раздел Ресурсы-> JDBC-> Пулы соединений-> MyConnectionPool-> Дополнительные свойства. Я вижу запись для V $ SESSION.program, установленную соответствующим образом).
Однако, когда я запрашиваю соединения с базой данных Oracle (SELECT * FROM V$SESSION
), они имеют ту же V $ SESSION.program, что и раньше (то есть «Тонкий клиент JDBC»), а не ту, которую я установил в домене. .xml и который я вижу в качестве свойства пула соединений JDBC на странице администрирования Glassfish.
Раздел ресурсов моего domain.xml находится ниже:
<resources>
<jdbc-connection-pool pool-resize-quantity="4" max-pool-size="16" datasource-classname="oracle.jdbc.pool.OracleDataSource" res-type="javax.sql.DataSource" steady-pool-size="4" name="mydatabasename">
<property name="datasourceName" value="OracleConnectionPoolDataSource" />
<property name="databaseName" value="mydatabasename" />
<property name="password" value="mypassword" />
<property name="portNumber" value="1521" />
<property name="serverName" value="myservername" />
<property name="url" value="jdbc:oracle:thin:@myservername:1521:mydatabasename" />
<property name="user" value="myuser" />
<property name="v$session.program" value="MyGlassfishApp" />
</jdbc-connection-pool>
<jdbc-resource pool-name="mydatabasename" jndi-name="jdbc/mydatabasename" />
</resources>
И мой файл Persistence.xml такой, как показано ниже (я удалил все строки <class>...</class>
):
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="Persistence-ejb" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/mydatabasename</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.query.timeout" value="60"/>
<property name="javax.persistence.lock.timeout" value="60"/>
<property name="javax.persistence.target-server" value="SunAS9"/>
<!-- Disable caching so we always use the DB directly -->
<property name="eclipselink.cache.shared.default" value="false"/>
<property name="eclipselink.query-results-cache" value="false"/>
</properties>
</persistence-unit>
</persistence>
EDIT:
Я пробовал v $ session.program, V $ SESSION.PROGRAM и V $ SESSION.program - хотя никто не работал ... Я также пытался установить свойство V $ SESSION.program в EntityManager, но это не сработало (Я на самом деле не ожидал этого, поскольку, насколько я понимаю, свойства EntityManager связаны только со слоем JPA, а не с основным подключением к базе данных - но я пытаюсь что-то из отчаяния ...)
Я также пытался использовать SessionCustomizer, как предложено здесь . Код SessionCustomizer, который я использовал, приведен ниже:
public class ProgramSessionCustomizer implements SessionCustomizer {
private static Logger logger = Logger.getLogger(ProgramSessionCustomizer.class);
@Override
public void customize(Session s) throws Exception {
logger.error("ProgramSessionCustomizer setting v$session.program");
s.getDatasourceLogin().setProperty("v$session.program", "MYprogramTEST");
logger.error("ProgramSessionCustomizer has set v$session.program");
}
}
Затем я установил SessionCustomizer в файле persistence.xml, добавив свойство:
<property name="eclipselink.session.customizer" value="persistence.config.ProgramSessionCustomizer"/>
Я вижу строки журнала, поэтому определенно вызывается Настройщик. Однако я не вижу программу, установленную в базе данных, и даже не вижу ее установленной, когда просматриваю свойства пула соединений JDBC на консоли администратора Glassfish (которую, как я уже говорил выше, я вижу, когда установить свойство с помощью glassfish domain.xml)
Опять же, любые предложения будут приветствоваться, так как я в растерянности!