无法使用 Glassfish JDBC 连接池连接到 Oracle,抛出 AccessControlException
Can't connect to Oracle with Glassfish JDBC connection pool, AccessControlException is thrown
当我尝试从 Glassfish 3 管理控制台 ping Oracle 11g 时,出现以下异常:
Caused by: java.security.AccessControlException: access denied ("java.util.PropertyPermission" "javax.net.ssl.keyStorePassword" "read")
at com.sun.enterprise.security.ssl.SSLUtils.checkPermission(SSLUtils.java:336)
at com.sun.enterprise.security.J2EESecurityManager.checkProperty(J2EESecurityManager.java:146)
at com.sun.enterprise.security.J2EESecurityManager.checkPropertyAccess(J2EESecurityManager.java:131)
at java.lang.System.getProperty(System.java:744)
at oracle.jdbc.driver.PhysicalConnection.run(PhysicalConnection.java:3117)
at java.security.AccessController.doPrivileged(Native Method)
at oracle.jdbc.driver.PhysicalConnection.getSystemProperty(PhysicalConnection.java:3113)
at oracle.jdbc.driver.PhysicalConnection.readConnectionProperties(PhysicalConnection.java:1300)
at oracle.jdbc.driver.PhysicalConnection.(PhysicalConnection.java:517)
at oracle.jdbc.driver.T4CConnection.(T4CConnection.java:228)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521)
at oracle.jdbc.pool.OracleDataSource.getPhysicalConnection(OracleDataSource.java:280)
at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:207)
at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:157)
at com.sun.gjc.spi.DSManagedConnectionFactory.createManagedConnection(DSManagedConnectionFactory.java:115)
at com.sun.enterprise.resource.allocator.LocalTxConnectorAllocator.createResource(LocalTxConnectorAllocator.java:87)
at com.sun.enterprise.resource.pool.ConnectionPool.createSingleResource(ConnectionPool.java:907)
... 61 more
具有相同 JDBC 驱动程序的独立应用程序工作正常。我是 运行 Glassfish 3.1.2,在我的本地 Ubuntu 12.04 机器上,Oracle 11g XE 部署为 Docker 映像。我停止了 AppArmor,没有激活防火墙,也不知道它与 SSL 有什么关系。我还尝试向 Glassfish server.policy 和 JDK java.policy 文件添加 javax.net.ssl.keyStorePassword 权限,但它没有解决问题。
同一个 Glassfish 实例有一个 MySQL 池,没有这样的错误。可能我需要在 Oracle 服务器上配置一些东西才能让它工作?
通过将 Oracle JDBC 驱动程序 jar 文件放入 ../glassfish/lib
而不是 ../domain1/lib
来解决此错误。
当我尝试从 Glassfish 3 管理控制台 ping Oracle 11g 时,出现以下异常:
Caused by: java.security.AccessControlException: access denied ("java.util.PropertyPermission" "javax.net.ssl.keyStorePassword" "read")
at com.sun.enterprise.security.ssl.SSLUtils.checkPermission(SSLUtils.java:336)
at com.sun.enterprise.security.J2EESecurityManager.checkProperty(J2EESecurityManager.java:146)
at com.sun.enterprise.security.J2EESecurityManager.checkPropertyAccess(J2EESecurityManager.java:131)
at java.lang.System.getProperty(System.java:744)
at oracle.jdbc.driver.PhysicalConnection.run(PhysicalConnection.java:3117)
at java.security.AccessController.doPrivileged(Native Method)
at oracle.jdbc.driver.PhysicalConnection.getSystemProperty(PhysicalConnection.java:3113)
at oracle.jdbc.driver.PhysicalConnection.readConnectionProperties(PhysicalConnection.java:1300)
at oracle.jdbc.driver.PhysicalConnection.(PhysicalConnection.java:517)
at oracle.jdbc.driver.T4CConnection.(T4CConnection.java:228)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521)
at oracle.jdbc.pool.OracleDataSource.getPhysicalConnection(OracleDataSource.java:280)
at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:207)
at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:157)
at com.sun.gjc.spi.DSManagedConnectionFactory.createManagedConnection(DSManagedConnectionFactory.java:115)
at com.sun.enterprise.resource.allocator.LocalTxConnectorAllocator.createResource(LocalTxConnectorAllocator.java:87)
at com.sun.enterprise.resource.pool.ConnectionPool.createSingleResource(ConnectionPool.java:907)
... 61 more
具有相同 JDBC 驱动程序的独立应用程序工作正常。我是 运行 Glassfish 3.1.2,在我的本地 Ubuntu 12.04 机器上,Oracle 11g XE 部署为 Docker 映像。我停止了 AppArmor,没有激活防火墙,也不知道它与 SSL 有什么关系。我还尝试向 Glassfish server.policy 和 JDK java.policy 文件添加 javax.net.ssl.keyStorePassword 权限,但它没有解决问题。
同一个 Glassfish 实例有一个 MySQL 池,没有这样的错误。可能我需要在 Oracle 服务器上配置一些东西才能让它工作?
通过将 Oracle JDBC 驱动程序 jar 文件放入 ../glassfish/lib
而不是 ../domain1/lib
来解决此错误。