我已经专业地使用Java应用程序服务器五年了,但我只经历了两个供应商:Weblogic和JBoss,主要是最后一个.
专注于JBoss我目前正在将一些应用程序从4.2.2版本迁移(或至少尝试)到6.x系列的第一个"稳定"版本.但是,我觉得问题比我预期的要复杂得多.类加载,日志记录,启动过程,所有接缝都发生了变化,我相信它会更好,但总会像这样?
所以我质疑自己其他真正的替代品是什么?现有的替代品有同样的问题吗?
你可能会问我用什么功能来要求像JBoss这样的应用服务器:目前是JMS,XA Transactions,Datasources.
我使用以下选项设置我的远程WebLogic服务器进行调试:
-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=${DEBUG_PORT},server=y,suspend=n -Djava.compiler=NONE"
Run Code Online (Sandbox Code Playgroud)
我在服务器上启动了WebLogic,发现它正在监听8453上的dt_socket.我在我的本地Eclipse上添加了远程服务器并测试了连接.我还看到服务器已启动,我可以查看详细信息.但是,我无法在DEBUG重新启动.我也停止了服务器上的WebLogic,现在在Eclipse中我看到它已停止,但我无法启动它(调试和启动的图标显示为灰色).当我在Eclipse中设置远程Java应用程序时,我确实检查了"允许终止远程VM".
在停止服务器之前,调试图标没有被禁用,当我点击它时,我得到了这样的消息:
Cannot attach to remote server.
Please make sure the server myserver.com is running and listening for transport dt_socket at address: 8453
Failed to connect to remote VM. Connection refused.
Connection refused: connect
Run Code Online (Sandbox Code Playgroud) 我在Weblogic中创建了一个用户名为"sa"的SQLServer数据源.
在代码中我使用以下来获取用户名.
Context ctx = new InitialContext(prop);
Object obj = ctx.lookup("sqlserver1");
System.out.println("Data Source Found….");
DataSource ds = (DataSource) obj;
Connection conn = ds.getConnection();
DatabaseMetaData mtdt = conn.getMetaData();
// Get UserName
System.out.println("User name: " + mtdt.getUserName());
Run Code Online (Sandbox Code Playgroud)
但是上面的代码总是返回'dbo'作为用户名.我希望用户名为'sa'.如果数据库是Oracle,它可以正常工作.是否有通用的方法来获取所有不同类型的数据库的用户名.
我有一个使用Struts2,Spring和JPA的Web应用程序.在应用程序中,我们正在使用注释.当我们在eclipse中部署应用程序时,如果我们将其部署为虚拟应用程序(右键单击服务器,选择属性,选择WebLogic,选择发布模式),应用程序运行正常.此选项生成_auto_generated_ear文件并运行应用程序. 当我将其部署为展开的归档文件或通过管理控制台手动将应用程序部署为.war文件时,我收到以下错误消息:
[[ACTIVE] ExecuteThread:'8'表示队列:'weblogic.kernel.Default(self-tuning)'] WARN org.apache.struts2.dispatcher.Dispatcher - 找不到操作或结果:/eServices/login.action There没有映射名称空间[/]的动作和与上下文路径[/ eServices]关联的动作名称[登录]. - com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:185)中的[未知位置]位于org.apache.struts2.impl上的org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63).位于org.apache的org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:552)的com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58)中的StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:37)位于weblogic.servlet.internal.FilterChainImpl.doFilter的org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)中的.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) (FilterChainImpl.java:56)位于oracle.security.jps.util的java.security.AccessController.doPrivileged(Native Method)的oracle.security.jps.ee.http.JpsAbsFilter $ 1.run(JpsAbsFilter.java:111). oracle.security.jps中的JpsSubject.doAsPrivileged(JpsSubject.java:313)位于oracle.security.jps.ee.http.JpsAbsFilter.doFilter的oracle.security.jps.ee.http.JpsAbsFilter.runJaasMode(JpsAbsFilter.java:94)中的.ee.util.JpsPlatformUtil.runJaasMode(JpsPlatformUtil.java:413) (JpsAbsFilter.java:161)位于oracle.dms的weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)的oracle.security.jps.ee.http.JpsFilter.doFilter(JpsFilter.java:71). servlog.DMSServletFilter.doFilter(DMSServletFilter.java:136)位于weblogic.servome.servial.Web上的weblogic.servlet.inperi.WebAppServletContext $ ServletInvocationAction.wrapRun(WebAppServletContext.java:3715)的weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) .loglet.internal.WebAppServletContext $ ServletInvocationAction.run(WebAppServletContext.java:3681)at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)at weblogic.security.service.SecurityManager.runAs(SecurityManager.java) :120)at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.jav)a:2277)weblogic.servlet.internal.WebAppServletContext.exe(WebAppServletContext.java:2183)at weblogic.servlet.invine.ServletRequestImpl.run(ServletRequestImpl.java:1454)at weblogic.work.ExecuteThread.execute(ExecuteThread.java) :209)at weblogic.work.ExecuteThread.run(ExecuteThread.java:178)
任何WebLogic专家都能指出我正确的方向吗?在WebLogic中运行的Struts2的Convention-plugin是否存在问题?任何帮助将不胜感激.提前致谢.
更新:
web.xml中
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>eServices</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Needed to manage the Java based @Configuration classes for Spring -->
<context-param>
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.ceiwc.es.config</param-value>
</context-param>
<!-- …Run Code Online (Sandbox Code Playgroud) 我在MOS Doc ID 1945619.1上读到,从12.1.3 Oracle HTTP Server(OHS)开始,mod_plsql功能已被弃用,不会包含在12.2 Oracle HTTP Server中.
对于未来,Oracle建议迁移到Oracle REST数据服务(以前称为Oracle APEX侦听器)作为mod_plsql的替代方案.
我们的商店有很多mod_plsql应用程序(即使用HTP/HTF程序包编写的应用程序).由于我对Oracle REST数据服务一无所知,我问你是否可以在不改变代码的情况下将旧应用程序迁移到这个新产品.
谢谢.
亲切的问候,克里斯蒂安
oracle weblogic oracle-apex oracle-fusion-middleware mod-plsql
我在将(“?”或“?”)等波斯字符保存到 oracle 数据库时遇到问题。我从客户端收到正确的编码,但是当我将相关记录插入数据库时,它将以这样的阿拉伯语编码保存(“?”)。
我的应用程序的规格是:
我将以下属性设置到 WebLogic 设置文件中,但它不起作用。
export NLS_LANG=AMERICAN_AMERICA.AR8MSWIN1256
export NLS_LANG=AMERICAN_AMERICA.UTF8
-Dfile.encoding=UTF-8
Run Code Online (Sandbox Code Playgroud) 在我的 java 应用程序中,我使用提供的-Djavax.net.ssl.trustStore 系统属性运行,如下所示。
-Djavax.net.ssl.trustStore=/myapp/app.jks -Djavax.net.ssl.trustStorePassword=XXXXX -Djavax.net.ssl.trustStoreType=jks -Djavax.net.debug=ssl
Run Code Online (Sandbox Code Playgroud)
这是我的完整命令行:
$JAVA_HOME/bin/java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp -Xms512m -Xmx1024m -XX:MaxPermSize=192m -Djavax.net.ssl.trustStore=/myapp/app.jks -Djavax.net.ssl.keyStore=/myapp/app.jks -Djavax.net.ssl.trustStorePassword=XXXXX -Djavax.net.ssl.keyStorePassword=XXXXX -Dweblogic.security.SSL.ignoreHostnameVerification=true -Djavax.net.debug=ssl -Djavax.net.ssl.trustStoreType=jks -cp /Oracle/Middleware/Oracle_Home/wlserver/server/lib/wlfullclient.jar:/myapp/stand??alone/lib/asm-5.0.3.jar:/myapp/standalone/lib/castor-1.3.2-core.jar:/myapp/standa??lone/lib/myAPP_final.jar
Run Code Online (Sandbox Code Playgroud)
但是 java 没有使用来自自定义路径的自定义 keyStore 的证书。默认情况下$JAVA_HOME/lib/security/cacerts,我会遇到以下异常:
java.net.ConnectException: t3s://myapphost.com:7500: Destination 10.243.155.222, 7900 unreachable; nested exception is:
javax.net.ssl.SSLHandshakeException: General SSLEngine problem; No available router to destination
Run Code Online (Sandbox Code Playgroud)
当我导入并添加相同的证书时,$JAVA_HOME/lib/security/cacerts它没有给出任何异常。
我参考了这篇文章并尝试在其中配置相同的内容$JAVA_HOME/jre/lib/security/java.security并添加以下条目:
javax.net.ssl.trustStore=/myapp/app.jks
javax.net.ssl.trustStorePassword=XXXXX
javax.net.ssl.trustStoreType=jks
Run Code Online (Sandbox Code Playgroud)
我仍然面临同样的问题。
我的问题和问题是,为什么 java 总是使用 java 默认的 keyStore 位置:$JAVA_HOME/lib/security/cacerts尽管我已经使用以下方法提供并配置了我自己的自定义 keyStore:-Djavax.net.ssl.trustStore=/myapp/app.jks -Djavax.net.ssl.trustStorePassword=XXXXX -Djavax.net.ssl.trustStoreType=jks -Djavax.net.debug=ssl
如果我在默认的 java keyStore loation …
我使用在WebLogic 12.1.2服务器上运行的JSF 2.1和JEE 6设置了一个Web应用程序,并使用openLDAP进行身份验证.我一直注意到在应用程序中加载任何页面都会导致对LDAP的多个BIND请求 - 每一次!
我已经阅读了很多材料,并在Weblogic中配置了LDAP提供程序,这样就可以激活我能找到的任何缓存.我特别设定了
我还仔细检查了entryUUID属性是否存在.我在WebLogic或LDAP上都不太了解,但我已经阅读了关于配置缓存的任何页面,但是仍然有很多请求到LDAP(是的,我在更改后重新启动了服务器.)
我很感激任何帮助,见解或猜测可能是什么原因或我如何进一步调试这个问题.我不太确定要附加哪个配置文件,但如果有任何需要我很乐意提供它.
LDAP请求全部如下所示:
# journalctl -u slapd
# … many of these …
Sep 16 23:06:03 server.org slapd[15038]: daemon: read active on 13
Sep 16 23:06:03 server.org slapd[15038]: daemon: epoll: listen=7 active_threads=0 tvp=zero
Sep 16 23:06:03 server.org slapd[15038]: daemon: epoll: listen=8 active_threads=0 tvp=zero
Sep 16 23:06:03 server.org slapd[15038]: conn=1109 op=32 BIND anonymous mech=implicit ssf=0
Sep 16 23:06:03 server.org slapd[15038]: conn=1109 op=32 BIND dn="tpid=NQ00000013,ou=people,dc=de,dc=foobiz,dc=com" method=128
Sep 16 23:06:03 server.org slapd[15038]: …Run Code Online (Sandbox Code Playgroud) 在使用stopManagedWeblogic.sh脚本停止受管服务器时,即使具有正确凭据的boot.properties文件,在WebLogic 12c环境中创建的受管服务器也会提示输入用户名和密码.
boot.properties文件配置在其他可访问的位置,其路径使用-Dweblogic.system.BootIdentityFilejava选项指定
我观察到以下奇怪的行为
仅在使用stopManagedWeblogic.sh脚本关闭受管服务器的情况下,它才会提示输入用户名和密码.
WebLogic中是否不支持无密码托管服务器关闭?因为我不希望将用户名和密码指定为停止脚本的参数.
除了这里对 CY2018的引用之外……我发现很难弄清楚何时(或是否)Weblogic Server 版本将支持 Java EE 8?