gpt4 book ai didi

java - 从 OSGI bundle 调用 JDBC 和 UCP 连接

转载 作者:行者123 更新时间:2023-12-01 13:41:46 24 4
gpt4 key购买 nike

我有一个关于将初始化 JDBC 和 UCP 连接调用到 byndle 激活器的具体问题。我创建了这个激活器:

public class Activator implements BundleActivator
{

@Override
public void start(BundleContext bc) throws Exception
{

testOracleUCP();
System.out.println("Started module");
}

@Override
public void stop(BundleContext bc) throws Exception
{

}

public void testOracleUCP() throws Exception
{
System.out.println("Test Oracle UCP");
Connection conn = null;
try
{
conn = OracleDS_UCP.getConnection();
OracleDS_UCP.getPoolDataSourceStatus();
}
catch (SQLException e)
{
throw e;
}
finally
{
if (conn != null)
conn.close();
}

}
}

我使用这个 Java 类来调用初始化连接:

public class OracleDS_UCP
{
protected static final PoolDataSource pds;

static
{
pds = initPoolDataSource();
}

public static Connection getConnection() throws SQLException
{
if (pds == null)
return null;
Connection conn = pds.getConnection();
conn.setAutoCommit(false);
return conn;
}

private static PoolDataSource initPoolDataSource()
{
try
{
System.out.println("\nStarting Oracle UCP Connection");
PoolDataSource pool = PoolDataSourceFactory.getPoolDataSource();
pool.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource");

pool.setURL("jdbc:oracle:thin:@146.185.142.243:1521:XE");
pool.setUser("SYSTEM");
pool.setPassword("4r3e2w1q");

//Setting pool properties (can be retrieved from config file)
pool.setMaxStatements(10); // the maximum number of statements that may be pooled or cached on a connection.
pool.setInitialPoolSize(2);
pool.setMinPoolSize(1);
pool.setMaxPoolSize(50);
pool.setLoginTimeout(60); // one minute
pool.setConnectionWaitTimeout(60); // one minute
pool.setAbandonedConnectionTimeout(30 * 60); // thirty minutes
pool.setMaxIdleTime(60 * 60); // one hour and kill inactive or idle connections
pool.setInactiveConnectionTimeout(60 * 60); // one hour and kill inactive or idle connections
pool.setConnectionWaitTimeout(0); // do not wait for a used connection to be released by a client.
pool.setConnectionHarvestTriggerCount(40);
pool.setConnectionHarvestMaxCount(10);

return pool;
}
catch (SQLException ex)
{
Logger.getLogger(OracleDS_UCP.class.getName()).log(Level.SEVERE, null, ex);
}

return null;
}
}

我将 JDBC 驱动程序和 ucp 驱动程序嵌入到 bundle 中:

<Embed-Dependency>ucp,ojdbc6;scope=compile|runtime</Embed-Dependency> 

这是 bundle 的 list 文件:

Manifest-Version: 1.0
Bnd-LastModified: 1387484566727
Build-Jdk: 1.8.0-ea
Built-By: developer
Bundle-Activator: org.project.osgi.SQLEngine.activator.Activator
Bundle-ClassPath: .,junit-4.11.jar,org.osgi.core-1.4.0.jar,org.osgi.comp
endium-5.0.0.jar,ojdbc6-11.2.0.3.jar,ucp-11.2.0.3.jar,SQL_Exchanges-1.0
.jar,Agents_Manager_api-2.0.jar
Bundle-ManifestVersion: 2
Bundle-Name: SQL_Engine
Bundle-SymbolicName: SQL_Engine
Bundle-Vendor: Corporation Name
Bundle-Version: 1.0.0
Created-By: Apache Maven Bundle Plugin
Embed-Dependency: *;scope=compile|runtime
Embedded-Artifacts: junit-4.11.jar;g="junit";a="junit";v="4.11",org.osgi
.core-1.4.0.jar;g="org.apache.felix";a="org.osgi.core";v="1.4.0",org.os
gi.compendium-5.0.0.jar;g="org.osgi";a="org.osgi.compendium";v="5.0.0",
ojdbc6-11.2.0.3.jar;g="com.oracle";a="ojdbc6";v="11.2.0.3",ucp-11.2.0.3
.jar;g="com.oracle";a="ucp";v="11.2.0.3",SQL_Exchanges-1.0.jar;g="SQL_E
xchanges";a="SQL_Exchanges";v="1.0",Agents_Manager_api-2.0.jar;g="DX-57
-Kernel";a="Agents_Manager_api";v="2.0"
Export-Package: org.project.osgi.SQLEngine.api;version="1.0.0"
Import-Package: org.osgi.framework;version="[1.5,2)",javax.sql.DataSourc
e
Tool: Bnd-2.1.0.20130426-122213

我收到此错误:

Caused by: java.lang.ClassNotFoundException: javax.sql.DataSource not found by S
QL_Engine [1147]

知道如何解决这个问题吗?

最佳答案

问题在于,在 Import-Package: header 中提到了 javax.sql.DataSource,但这实际上是一个类,而不是一个包。应该是javax.sql。这不是由maven插件完成的,对吧?

关于java - 从 OSGI bundle 调用 JDBC 和 UCP 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20691279/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com