我们是 Weblogic (12c) 的新手。我们尝试根据应用程序运行的环境(dev / staging /prod)选择如何将一些配置传递给应用程序。
我目前正在尝试使用部署计划。在WEB-INF/web.xml,我有:
<context-param>
<param-name>test</param-name>
<param-value>11111</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)
plan.xml我在 Weblogic 中为我的应用程序使用了 a 。一些部分 :
<variable-definition>
<variable>
<name>test</name>
<value xsi:nil="false">22222</value>
<description>some description</description>
</variable>
</variable-definition>
Run Code Online (Sandbox Code Playgroud)
和
<module-descriptor external="false">
<root-element>web-app</root-element>
<uri>WEB-INF/web.xml</uri>
<variable-assignment>
<name>test</name>
<xpath>/web-app/context-param/[param-name="test"]/param-value</xpath>
<origin>planbased</origin>
<operation>replace</operation>
</variable-assignment>
</module-descriptor>
Run Code Online (Sandbox Code Playgroud)
这有效!
但我听说可以从管理控制台更改变量的值,是真的吗?
当我在控制台中(在Deployment Plan选项卡中或在Configuration选项卡中)浏览我的应用程序时,我没有看到任何可以用来更改test变量的字段......我是否遗漏了什么或必须在plan.xml文件本身?
Spring 应用程序使用 JNDI 查找来获取数据源,如下所示:
@Bean(name = "dataSource1", destroyMethod = StringUtils.EMPTY)
public DataSource dataSource() {
final JndiDataSourceLookup lookup = new JndiDataSourceLookup();
lookup.setResourceRef(true);
return lookup.getDataSource(this.environment.getProperty(Constants.DB_JNDI_NAME_ES));
}
Run Code Online (Sandbox Code Playgroud)
并从数据源获取连接如下:
@Autowired
@Qualifier("dataSource1")
private DataSource ds;
Connection conn = null;
conn = this.ds.getConnection();
Run Code Online (Sandbox Code Playgroud)
但是当我将该连接传递给 StructDescriptor 时,它会抛出 classCastException 如下:
StructDescriptor desc1 = StructDescriptor.createDescriptor("MSAF_DBA.AMOUNT_DUE_OBJ",conn);
java.lang.ClassCastException: weblogic.jdbc.wrapper.PoolConnection_oracle_jdbc_driver_T4CConnection cannot be cast to oracle.jdbc.OracleConnection
at oracle.sql.StructDescriptor.createDescriptor(StructDescriptor.java:101)
at oracle.sql.StructDescriptor.createDescriptor(StructDescriptor.java:72)
at com.ceiwc.es.policyholder.dao.PolicyHolderDaoImpl.getAmountDue(PolicyHolderDaoImpl.java:290)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
Run Code Online (Sandbox Code Playgroud)
我的理解是getConnection()回报T4CConnection,其中的OracleConnection是必需的。尝试了几种方法来获得oracleConnection但似乎无法获得它。任何帮助,将不胜感激。
我正在将网站从运行 Weblogic 11g (10.3.5) 的 Java 6 迁移到运行 Weblogic 12c (12.1.3) 的 Java 8。我发现了几个问题(这有助于我团队中的其他人之前尝试过,但没有取得足够的成功),但一个似乎无法克服,我无法找到任何相关信息。
我们的一个 JSP 无法在浏览器中加载 ,并weblogic.servlet.jsp.CompilationException抱怨“方法 _jspService(HttpServletRequest, HttpServletResponse) 的代码超出 65535 字节限制”。检查.java在两个版本的 Weblogic 中为 JSP生成的文件之间的差异,我看到每个 JSP 表达式都包装在一个 ExpressionInterceptor 中。
例如,在运行 Java 6 的 WebLogic 10 中,<%=user.getLanguage()%>变为out.print(user.getLanguage());. 在运行 Java 8 的 WebLogic 12 中,它变为:
out.print(_jsp_expressionInterceptor.intercept(
String.valueOf(user.getLanguage()), pageContext,
weblogic.servlet.jsp.ExpressionInterceptor.Type.Scripting));
Run Code Online (Sandbox Code Playgroud)
在我看来,额外的几个方法调用 - 2 个方法调用,在文件中大约 250 次 - 足以使该_jspService方法超过 64K 限制。(Java 6 中的方法大小,基于来自 的输出javap,是 62912 字节,所以这是有道理的。)
我的问题是:有什么办法可以阻止 Weblogic 生成对ExpressionInterceptor? …
我对尝试将 JPA 2.1 PersistenceManager 与 Hibernate 5 一起使用的简单任务感到非常沮丧。
我打包了一个使用 weblogic ant 任务 jwsc (weblogic.wsee.tools.anttasks.JwscTask) 构建的简单 Web 服务,但是在部署时我得到了这个NoClassDefFoundError:
[wldeploy] [BasicOperation.execute():472] : Initiating deploy operation for app, import2, on targets:
[wldeploy] [BasicOperation.execute():474] : myserver
[wldeploy] Task 0 initiated: [Deployer:149026]deploy application import2 on myserver.
[wldeploy] dumping Exception stack
[wldeploy] Task 0 failed: [Deployer:149026]deploy application import2 on myserver.
[wldeploy] Target state: deploy failed on Server myserver
[wldeploy] java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.jpa.HibernatePersistenceProvider
[wldeploy] at java.lang.Class.forName0(Native Method)
[wldeploy] at java.lang.Class.forName(Class.java:348)
[wldeploy] at …Run Code Online (Sandbox Code Playgroud) 我将两个数据文件一个接一个地上传到一个表中,在这样做的过程中,我不断收到如下错误。是的,我不会在中间取消任何过程。
PS:我使用 JDeveloper 12c 和内部 12c Weblogic 服务器来部署我的应用程序。
Exception ::com.ofss.pm.upload.common.exception.UploadException: UploadException in parsePopulateBrnBnkUpld :com.ofss.pm.upload.common.exception.UploadException: SQLException :
java.sql.SQLTimeoutException: ORA-01013: user requested cancel of current operation
ORA-06512: at "SYS.UTL_FILE", line 148
ORA-06512: at "SYS.UTL_FILE", line 889
ORA-06512: at line 1
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:466)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:407)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1113)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:546)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:269)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:603)
at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:228)
at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:49)
at oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:1000)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1316)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:5010)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:5136)
at oracle.jdbc.driver.OracleCallableStatement.executeUpdate(OracleCallableStatement.java:10886)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1519)
at weblogic.jdbc.wrapper.PreparedStatement.executeUpdate(PreparedStatement.java:170)
at com.ofss.pm.upload.dao.BranchBankDao.callProcUpldBranchBank(BranchBankDao.java:614)
at com.ofss.pm.upload.handler.BranchBankHandler.parsePopulateBrnBnkUpld(BranchBankHandler.java:113)
at com.ofss.pm.scheduler.jobs.BranchBankUpldJob.execute(BranchBankUpldJob.java:78)
at com.ofss.pm.scheduler.JobExecutorBean.onMessage(JobExecutorBean.java:264)
at weblogic.ejb.container.internal.MDListener.execute(MDListener.java:438)
at weblogic.ejb.container.internal.MDListener.transactionalOnMessage(MDListener.java:361) …Run Code Online (Sandbox Code Playgroud) 我们已经将我们的环境升级为WLS12.2.1.2.0来自WLS12.1.1.0并遇到@Startup了@Singletonbean方法中的事务问题。
所述 bean 部署在 EAR 内,该 EAR 将消息发布到事务下的 JMS 队列。这在目标服务器运行时有效,但在容器启动期间失败:
Timeout during commit processing
at weblogic.rjvm.ResponseImpl.unmarshalReturn(ResponseImpl.java:281)
at weblogic.rmi.internal.BasicRemoteRef.invoke(BasicRemoteRef.java:301)
at weblogic.transaction.internal.CoordinatorImpl_12212_WLStub.commit(Unknown Source)
at weblogic.transaction.internal.TransactionImpl$1.run(TransactionImpl.java:378)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:368)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:163)
at weblogic.transaction.internal.SecureAction.runAction(SecureAction.java:71)
at weblogic.transaction.internal.PlatformHelperImpl.runAction(PlatformHelperImpl.java:1493)
at weblogic.transaction.internal.TransactionImpl.commit(TransactionImpl.java:375)
at weblogic.transaction.internal.ServerTransactionImpl.internalCommit(ServerTransactionImpl.java:270)
at weblogic.transaction.internal.ServerTransactionImpl.commit(ServerTransactionImpl.java:257)
at weblogic.ejb.container.manager.BaseEJBManager.handleLifecycleCallbackTx(BaseEJBManager.java:412)
at weblogic.ejb.container.manager.SingletonSessionManager.constructAndInitBean(SingletonSessionManager.java:301)
...
Caused by: javax.transaction.SystemException: Timeout during commit processing
at weblogic.transaction.internal.ServerTransactionImpl.internalCommit(ServerTransactionImpl.java:340)
at weblogic.transaction.internal.ServerTransactionImpl.commit(ServerTransactionImpl.java:257)
at weblogic.transaction.internal.CoordinatorImpl.commit(CoordinatorImpl.java:99)
at weblogic.transaction.internal.CoordinatorImpl_WLSkel.invoke(Unknown Source)
at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:645)
at weblogic.rmi.internal.BasicServerRef$2.run(BasicServerRef.java:534)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:368)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:163)
at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:531)
at weblogic.rmi.internal.wls.WLSExecuteRequest.run(WLSExecuteRequest.java:138)
... 7 …Run Code Online (Sandbox Code Playgroud) 我已经使用 start.spring.io 创建了一个应用程序(spring boot 1.5.6)并尝试将其部署到 Weblogic 12.1.3.0.0。
管理控制台中的消息:
错误 无法访问选定的应用程序。
错误 java.io.IOException
错误 weblogic.utils.compiler.ToolFailureException
日志中的消息:
<23.08.2017 13:40:26 GMT+03:00> <Error> <J2EE> <BEA-160228> <AppMerge failed to merge your application. If you are running AppMerge on the command-line, merge again with the -verbose option for more details. See the error message(s) below.>
这些链接没有帮助:
https:
//docs.spring.io/spring-boot/docs/1.5.x/reference/html/howto-traditional-deployment.html 在 Weblogic 中部署 Spring Boot 应用程序
更新:
问题是依赖 JAX-RS。没有它应用程序部署成功。不确定如何使用此依赖项
更新 x2:
删除 Jax-rs,现在:
java.lang.NoSuchMethodError:org.springframework.core.annotation.AnnotationAwareOrderComparator.sort(Ljava/util/List;)V
已解决
由于oracle.sql.ArrayDescriptor,oracle.sql.STRUCT和oracle.sql.StructDescriptor已弃用,我正在使用java.sql.Array和从 Java 调用 Oracle 存储过程java.sql.Struct。
我用这个问题作为参考
这是我的代码。
import java.sql.Array;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Struct;
import java.util.Map;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.SqlOutParameter;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
import org.springframework.jdbc.core.simple.SimpleJdbcCall;
import org.springframework.stereotype.Repository;
import oracle.jdbc.OracleTypes;
import oracle.jdbc.OracleConnection;
public CrearRelacionArbolResponseBean crearRelacionArbol(String mensajeTransaccion,
CrearRelacionArbolRequestBean request) throws DBException {
DataSource sgaDS;
CrearRelacionArbolResponseBean objResponse = new CrearRelacionArbolResponseBean();
Connection conn = null;
try {
InitialContext ctx = new InitialContext(); …Run Code Online (Sandbox Code Playgroud) 我想将调试器附加到我在 dockerized WebLogic 12c 中部署的 WAR。我使用 WebLogic 的官方镜像(这是一个 Linux 容器) https://hub.docker.com/_/oracle-weblogic-server-12c 并使用 docker 命令启动容器:
docker run -d -p 4002:4002 -p 9002:9002
-v c:/my-path-to-shared-volume:/u01/oracle/properties
-e ADMINISTRATION_PORT_ENABLED=true -e DOMAIN_NAME=docker_domain
-e JAVA_TOOL_OPTIONS=\"-agentlib:jdwp=transport=dt_socket,address=4002,server=y,suspend=n\"
--name weblogic store/oracle/weblogic:12.2.1.3-dev-200109
Run Code Online (Sandbox Code Playgroud)
weblogic 控制台在https://localhost:9002/console/ 上活跃起来,但是在尝试运行调试器时,我的 IDE 说:
无法打开调试器端口(本地主机:4002):java.io.IOException“握手失败 - 连接过早关闭”
我的操作系统是Windows10。我尝试了Visual Studio Code 和 IntelliJ,并得到了相同的输出。WAR 运行得很好,当我使用 portman 命中某些服务端点时,它们会做出响应。
似乎发生的是容器内的 weblogic 启动脚本尝试两次应用 Java 选项参数!请参阅下面的容器输出的相关部分:
域主页是:/u01/oracle/user_projects/domains/docker_domain 拿起 JAVA_TOOL_OPTIONS:“-agentlib:jdwp=transport=dt_socket,address=localhost:4002,server=y,suspend=n” 在地址侦听传输 dt_socket:4002 正在初始化 WebLogic 脚本工具 (WLST) ... 欢迎使用 WebLogic Server 管理脚本外壳
[...] (在我得到的日志中进一步向下:)
使用以下行启动 WLS:/usr/java/jdk-8/bin/java -server -Djava.security.egd=file:/dev/./urandom -cp /u01/oracle/wlserver/server/lib/weblogic-launcher …
我正在将一个 java 项目从 weblogic 8.1 迁移到 weblogic 12c。
根据oracle文档,我已经转换了以下内容。
1. Servicegen converted to jwsc task
2. deployment descriptor has been modified
3. Below annotations added in service implementation file
@WebService
@SoapBinding
@SoapMessageHandler
Run Code Online (Sandbox Code Playgroud)
在所有上述更改确实生成了war文件并部署在weblogic 12c服务器中之后,它会抛出如下错误
Unable to invoke annotation processor
<BEA-160228> App merge failed your application
weblogic.utils.compiler.ToolFailureException: unable to invoke annotation processor
Run Code Online (Sandbox Code Playgroud)
代码 :
package com.tutorialspoint.stateless;
import com.tutorialspoint.entity.Book;
import java.util.List;
import javax.ejb.Stateless;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@Stateless
@WebService(serviceName="LibraryService")
public class LibraryPersistentBean implements LibraryPersistentBeanRemote {
public LibraryPersistentBean() { …Run Code Online (Sandbox Code Playgroud) weblogic12c ×10
java ×8
weblogic ×3
jakarta-ee ×2
java-8 ×2
oracle12c ×2
spring-boot ×2
arrays ×1
debugging ×1
docker ×1
ejb ×1
hibernate ×1
jdeveloper ×1
jpa ×1
jsp ×1
oracle ×1
oracle11g ×1
singleton ×1
startup ×1
weblogic8.x ×1
yaml ×1