废话不多说下面讲介绍他的具体部署web应用,应该注意哪些问题。
准备工作:
Java JDK 安装及环境配置
http://jingyan.baidu.com/article/ff41162596a77912e4823716.html
WebLogic 12c 安装包可以去官网下载,也可以去我的云盘下载
https://yunpan.cn/cvKmivqjrfE6C 访问密码 19e2
WebLogic12c 安装步骤请查看另一篇文章
http://blog.csdn.net/hanxuemin12345/article/details/46291189
注意第五个步骤时,选择服务器jdk安装的位置。
Weblogic10.x只支持JPA1.X,不支持JPA2.X,内置的JPA接口与项目中的Hibernate的hibernate-jpa-2.0-api-1.0.1.Final.jar有冲突,无法部署启动项目,还有就是Weblogic内置的一些版本比较老的jar与项目中使用的也有冲突
WebLogic发布的主要内容有以下几点
一、升级jdk(针对原有 12)
WEBLOGIC 修改一下配置,即可
1 F:\ORACLE\weblogic\user_projects\domains\dev_domain\bin\setDomainEnv.cmd 2 set SUN_JAVA_HOME=D:\jdk1.7.0_65 3 set DEFAULT_SUN_JAVA_HOME=D:\jdk1.7.0_65 4 set JAVA_HOME=D:\jdk1.7.0_65
注意:<D:\jdk1.7.0_65> 这是我本机的jdk 位置,要根据您服务器的jdk选择具体目录
如果你在安装weblogic的时候,选择了本地安装的jdk位置路径这一个步骤可以省略。
二、更改 persistence.xml名称
我们不想在部署时让Weblogic自动加载persistence.xml文件,所以必须要重命名,比如mps-persistence.xml,然后修改Spring配置文件
1 <!--WizRtf2Html Charset=0 --> 2 <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 3 <property name="persistenceXmlLocation" value="classpath:META-INF/mps-persistence.xml" /> 4 <property name="dataSource" ref="dataSource" /> 5 </bean>
注意:
<property name="persistenceXmlLocation" value="classpath:META-INF/mps-persistence.xml" />
三、添加weblogic.xml
如果不添加这个weblogic.xml,将会报
1 Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean]: Factory method ‘entityManagerFactory‘ threw exception; nested exception is Java.lang.NoSuchMethodError : javax.persistence.JoinColumn.foreignKey()Ljavax/persistence/ForeignKey.……
引起改问题的主要原因是 JPA 2.1 规范中定义了javax.persistence.JoinColumn.foreignKey(); 但是JPA 2.0中却没有, WebLogic 默认会优先使用自己的JPA JAR(2.0)版本, 所以虽然Spring中定义使用 JPA2.1的JAR, 但部署到Weblogic后会不起作用, 引起错误。
XML内容如下:
1 <?xml version="1.0" encoding="UTF-8"?> 2 3 <weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd 5 http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.2/weblogic-web-app.xsd"> 6 <context-root>PosService</context-root> 7 <container-descriptor> 8 <prefer-web-inf-classes>true</prefer-web-inf-classes> 9 <show-archived-real-path-enabled>true</show-archived-real-path-enabled> 10 </container-descriptor> 11 </weblogic-web-app>
四、Jpa2.0应用
在%WLS_HOME%\modules\ 目录中添加 hibernate-jpa-2.1-api-1.0.0.Final.jar
更改 startweblogic.cmd 文件【 set CLASSPATH=%WL_HOME%\modules\hibernate-jpa-2.1-api-1.0.0.Final.jar;%WL_HOME%\lib\mbeantypes\WantongTechAuthenticator.jar;%SAVE_CLASSPATH% 】
hibernate-jpa-2.1-api-1.0.0.Final.jar下载 https://yunpan.cn/cvZeTSqPd3qE7 访问密码 246a
五、目录中UTF-8项目sitemesh 页面乱码
六、坑
HTTP1.1 有个 Transfer-Encoding: chunked 特性 会造成内容 返回时 分多次返回(在建立连接后,有内容就输出,不指定 CONTENT LENGTH)。非标准访问时注意下。
如POS 机访问 WEBSERVICE
七、bug
现象 | 解决 | 最优 |
<Error> <HTTP> <BEA-101083> <Error> <Socket> <BEA-000403> 你的主机中的软件中止了一个已建立的连接。 |
据说是weblogic12.1.2的一个bug , 官方出了一个补丁,补丁编号:18373180: MERGE REQUEST ON TOP OF 12.1.2.0.0 FOR BUGS 16851678 18073982解决这个问题 最近WEBLOGIC SUPPORT 在维护 http://support.oracle.com/ 附件暂缓上传。或直接安装 12.1.2以后的版本 |
部署这个版本 weblogic 12.2.1 |
java 反序列化 | 开源的坑 打补丁或是升级新版本。 |
感谢来自斯登闯前辈的指导。