weblogic部署开发Ejb

6
Weblogic 部部 EJB 部部 1. Ejb 部部部部部部 2 部 部 首首 MyEjbHome 首首 EJBHome部部部部 package com.dc.portal.ejb3; import javax.ejb.EJBHome; public interface MyEjbHome extends EJBHome { public MyEjbRemote create() throws Exception; } 首首 MyEjbRemote 首首首 EJBObject package com.dc.portal.ejb3; import javax.ejb.EJBObject; public interface MyEjbRemote extends EJBObject { public String say(String args) throws Exception; } 首首 首首 MyEjbSessionBean 首首 SessionBean package com.dc.portal.ejb3; import java.rmi.RemoteException; import javax.ejb.EJBException; import javax.ejb.SessionBean; import javax.ejb.SessionContext; public class MyEjbSessionBean implements SessionBean { @Override public void ejbActivate() throws EJBException, RemoteException { // TODO Auto-generated method stub } @Override public void ejbPassivate() throws EJBException, RemoteException { // TODO Auto-generated method stub } @Override public void ejbRemove() throws EJBException, RemoteException { // TODO Auto-generated method stub } @Override public void setSessionContext(SessionContext ctx) throws EJBException, RemoteException { // TODO Auto-generated method stub } //部 部 部 一一 ejbCreate()部部部部 weblogic 部部部部部部部部部

Transcript of weblogic部署开发Ejb

Page 1: weblogic部署开发Ejb

Weblogic 部署 EJB 程序1. 一个简单的 Ejb 例子中只需要 2 个接口和一个类首先新建一个接口名字为MyEjbHome继承 EJBHome,代码如下package com.dc.portal.ejb3;import javax.ejb.EJBHome;public interface MyEjbHome extends EJBHome {

public MyEjbRemote create() throws Exception;}

建立一个接口 MyEjbRemote来继承 EJBObjectpackage com.dc.portal.ejb3;import javax.ejb.EJBObject;public interface MyEjbRemote extends EJBObject {

public String say(String args) throws Exception;}

创建一个类 MyEjbSessionBean 实现 SessionBeanpackage com.dc.portal.ejb3;import java.rmi.RemoteException;import javax.ejb.EJBException;import javax.ejb.SessionBean;import javax.ejb.SessionContext;public class MyEjbSessionBean implements SessionBean {

@Overridepublic void ejbActivate() throws EJBException, RemoteException

{// TODO Auto-generated method stub

}

@Overridepublic void ejbPassivate() throws EJBException,

RemoteException { // TODO Auto-generated method stub

}@Overridepublic void ejbRemove() throws EJBException, RemoteException {

// TODO Auto-generated method stub}

@Overridepublic void setSessionContext(SessionContext ctx) throws

EJBException, RemoteException {// TODO Auto-generated method stub

}

//此处一定要建立一个 ejbCreate()否则在向 weblogic 中部署的时候会报错

Page 2: weblogic部署开发Ejb

public void ejbCreate() throws EJBException,RemoteException {}public String say(String args) throws Exception{

return "您输入的数据为:"+args;}

}

然后编写 2个 xml文件来对上面所写的类来进行描述ejb-jar.xml

<?xml version="1.0"?><!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems Inc.//DTD Enterprise JavaBeans 1.2//EN" "http://java.sun.com/j2ee/dtds/ejb-jar_1_2.dtd"><ejb-jar>

<enterprise-beans><session>

<ejb-name>myejb</ejb-name><home>com.dc.portal.ejb3.MyEjbHome</home><remote>com.dc.portal.ejb3.MyEjbRemote</remote><ejb-class>com.dc.portal.ejb3.MyEjbSessionBean</ejb-class><session-type>Stateless</session-type><transaction-type>Container</transaction-type>

</session></enterprise-beans>

</ejb-jar>

和 xml’文件 weblogic-ejb-jar.xml<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE weblogic-ejb-jar PUBLIC "-//BEA Systems, Inc.//DTD WebLogic 8.1.0 EJB//EN" "http://www.bea.com/servers/wls810/dtd/weblogic-ejb-jar.dtd"><weblogic-ejb-jar>

<description><![CDATA[Generated by XDoclet]]></description><weblogic-enterprise-bean>

<ejb-name>myejb</ejb-name><stateless-session-descriptor></stateless-session-descriptor><reference-descriptor></reference-descriptor><jndi-name>myejb</jndi-name>

</weblogic-enterprise-bean></weblogic-ejb-jar>

然后把上面的文件进行打包最后的效果为 jar 包的根目录有 classes 的全路径和 META-INF

Page 3: weblogic部署开发Ejb

文件夹 META-INF 中有 2 个文件 ejb-jar.xml 和 weblogic-ejb-jar.xml

然后对这个 jar 文件进行部署打开 webloic10 的控制台 部署->安装->选择 jar 文件->下一步->下一步->完成然后写一个客户端package com.dc.portal.ejb3.client;import java.util.Hashtable;

import javax.naming.Context;import javax.naming.InitialContext;import javax.rmi.PortableRemoteObject;

import com.dc.portal.ejb3.MyEjbHome;import com.dc.portal.ejb3.MyEjbRemote;//import java.rmi.RmoteException;/**

* @author Copyright (c) 2000 by Apusic, Inc. All Rights Reserved.*/public class MyClient { public static void main(String args[]){ String url = "t3://localhost:7001"; Context initCtx = null;// MyEjbHome hellohome = null; try { Hashtable env = new Hashtable();// env.put(Context.INITIAL_CONTEXT_FACTORY,"com.apusic.jndi.InitialContextFactory");

env.put(Context. INITIAL_CONTEXT_FACTORY , "weblogic.jndi.WLInitialContextFactory" ) ; env.put(Context. PROVIDER_URL , url) ; initCtx = new InitialContext(env); } catch(Exception e){ System.out.println("Cannot get initial context: " +

Page 4: weblogic部署开发Ejb

e.getMessage()); System.exit(1); } try { Object obj=initCtx.lookup("myejb"); MyEjbHome home=(MyEjbHome)PortableRemoteObject.narrow(obj,MyEjbHome.class); MyEjbRemote myRemote = home.create();

String s = myRemote.say("我的第一个 EJB程序"); System.out.println(s); }catch(Exception e){ System.out.println(e.getMessage()); System.exit(1); } }}

运行即可

注意:如果在部署的时候 weblogic 控制台提示出现:消息激活更改期间出错, 有关详细信息, 请查看日志。Exception preparing module: EJBModule(myejb) Unable to deploy EJB: myejb.jar from myejb.jar: There are 1 nested errors: weblogic.ejb.container.compliance.ComplianceException: In EJB myejb, the stateless session bean class must define a single ejbCreate method that takes no parameters. at weblogic.ejb.container.compliance.SessionBeanClassChecker.checkStatelessEjbCreate(SessionBeanClassChecker.java:115) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at weblogic.ejb.container.compliance.EJBComplianceChecker.check(EJBComplianceChecker.java:331) at weblogic.ejb.container.compliance.EJBComplianceChecker.checkDeploymentInfo(EJBComplianceChecker.java:280) at weblogic.ejb.container.ejbc.EJBCompiler.checkCompliance(EJBCompiler.java:789) at weblogic.ejb.container.ejbc.EJBCompiler.doCompile(EJBCompiler.java:222) at weblogic.ejb.container.ejbc.EJBCompiler.compileEJB(EJBCompiler.java:461) at weblogic.ejb.container.ejbc.EJBCompiler.compileEJB(EJBCompiler.java:428) at weblogic.ejb.container.deployer.EJBDeployer.runEJBC(EJBDeployer.java:439) at weblogic.ejb.container.deployer.EJBDeployer.compileJar(EJBDeployer.java:779) at weblogic.ejb.container.deployer.EJBDeployer.compileIfNecessary(EJBDeployer.java:679) at

Page 5: weblogic部署开发Ejb

weblogic.ejb.container.deployer.EJBDeployer.prepare(EJBDeployer.java:1238) at weblogic.ejb.container.deployer.EJBModule.prepare(EJBModule.java:442) at weblogic.application.internal.flow.ModuleListenerInvoker.prepare(ModuleListenerInvoker.java:199) at weblogic.application.internal.flow.DeploymentCallbackFlow$1.next(DeploymentCallbackFlow.java:517) at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52) at weblogic.application.internal.flow.DeploymentCallbackFlow.prepare(DeploymentCallbackFlow.java:159) at weblogic.application.internal.flow.DeploymentCallbackFlow.prepare(DeploymentCallbackFlow.java:45) at weblogic.application.internal.BaseDeployment$1.next(BaseDeployment.java:613) at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52) at weblogic.application.internal.BaseDeployment.prepare(BaseDeployment.java:184) at weblogic.application.internal.SingleModuleDeployment.prepare(SingleModuleDeployment.java:43) at weblogic.application.internal.DeploymentStateChecker.prepare(DeploymentStateChecker.java:154) at weblogic.deploy.internal.targetserver.AppContainerInvoker.prepare(AppContainerInvoker.java:60) at weblogic.deploy.internal.targetserver.operations.ActivateOperation.createAndPrepareContainer(ActivateOperation.java:207) at weblogic.deploy.internal.targetserver.operations.ActivateOperation.doPrepare(ActivateOperation.java:98) at weblogic.deploy.internal.targetserver.operations.AbstractOperation.prepare(AbstractOperation.java:217) at weblogic.deploy.internal.targetserver.DeploymentManager.handleDeploymentPrepare(DeploymentManager.java:747) at weblogic.deploy.internal.targetserver.DeploymentManager.prepareDeploymentList(DeploymentManager.java:1216) at weblogic.deploy.internal.targetserver.DeploymentManager.handlePrepare(DeploymentManager.java:250) at weblogic.deploy.internal.targetserver.DeploymentServiceDispatcher.prepare(DeploymentServiceDispatcher.java:159) at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.doPrepareCallback(DeploymentReceiverCallbackDeliverer.java:171) at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.access$000(DeploymentReceiverCallbackDeliverer.java:13) at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer$1.run(DeploymentReceiverCallbackDeliverer.java:46) at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:528) at weblogic.work.ExecuteThread.execute(ExecuteThread.java:207) at weblogic.work.ExecuteThread.run(ExecuteThread.java:176)

此处是要求你在你的 sessionBean 中必须有一个 ejbCreate 方法