CMP EJBs for Weblogic 6.1

Hi All
It seems that when I use the functionality to build a CMP EJB (an EJB that is automatically built based on an Oracle table) the deployment descriptors are missing lots of info so it it not possible to deploy to Weblogic (6.1).
I'm assuming the functionality intended is that it will be possible to automatically generate CMP EJBs from Oracle and deploy them directly to a iAS/Weblogic etc....
Session Beans seem OK.
Anyone got any thoughts on this?
Dave

For Weblogic - Users can develop session beans add weblogic-ejb-jar.xml and
deploy to a WebLogic connection.
If the project doesn't have a weblogic-ejb-jar.xml and a connection type of Weblogic is choosen for deployment , weblogic-ejb-jar.xml is automatically generated for the EJBs and wrapped in the EJB.jar before deploying to WLS.
JDeveloper provides Deployment descriptor editors for editing weblogic-ejb-jar.xml thru UI panels. This is very convinient rather than hand editing the XML.
Currently you would have to add Weblogic cmp specific deployment descriptor into the project and make it part of the EJB.jar during the assembly process (i.e when you create the deployment profile).
raghu
JDev Team

Similar Messages

  • CMP support for Weblogic 8 in Oracle 10g?

    Is the CMP support for Weblogic 8 included in Oracle Toplink 10g?

    I am using 10g and have problem compiling CMP EJB for WL 8.1. I got the following exception:
    Exception in thread "main" java.lang.NoSuchMethodError: weblogic.ejb20.persistence.spi.RoleSource.getName()Ljava/lang/String;
    at oracle.toplink.internal.ejb.cmp.wls.WlsDescriptorBuilder.getEjbNameForRoleSource(WlsDescriptorBuilder.java:219)
    at oracle.toplink.internal.ejb.cmp.wls.WlsDescriptorBuilder.buildRelationshipRoleDescriptor(WlsDescriptorBuilder.java:206)
    at oracle.toplink.internal.ejb.cmp.wls.WlsDescriptorBuilder.buildRelationshipDescriptors(WlsDescriptorBuilder.java:177)
    at oracle.toplink.internal.ejb.cmp.wls.WlsDescriptorBuilder.buildRelationships(WlsDescriptorBuilder.java:157)
    at oracle.toplink.internal.ejb.cmp.api.impl.DescriptorBuilder.buildDescriptor(DescriptorBuilder.java:153)
    at oracle.toplink.internal.ejb.cmp.wls.WlsDescriptorBuilder.addOldDescriptors(WlsDescriptorBuilder.java:33)
    at oracle.toplink.internal.ejb.cmp.wls.WlsProjectDeployment.convertOldEntityDescriptors(WlsProjectDeployment.java:65)
    at oracle.toplink.internal.ejb.cmp.PersistenceManagerBase.initialize(PersistenceManagerBase.java:72)
    at oracle.toplink.internal.ejb.cmp.wls.WlsCMPDeployer.initializePersistenceManager(WlsCMPDeployer.java:135)
    at weblogic.ejb20.deployer.CMPInfoImpl.setup(CMPInfoImpl.java:112)
    at weblogic.ejb20.ejbc.EJB20CMPCompiler.generatePersistenceSources(EJB20CMPCompiler.java:64)
    at weblogic.ejb20.ejbc.EJBCompiler.doCompile(EJBCompiler.java:245)
    at weblogic.ejb20.ejbc.EJBCompiler.compileEJB(EJBCompiler.java:476)
    at weblogic.ejb20.ejbc.EJBCompiler.compileEJB(EJBCompiler.java:397)
    at weblogic.ejbc20.runBody(ejbc20.java:519)
    at weblogic.utils.compiler.Tool.run(Tool.java:146)
    at weblogic.utils.compiler.Tool.run(Tool.java:103)
    at weblogic.ejbc.main(ejbc.java:29)
    I looked in the weblogic.ejb20.persistence.spi.RoleSource class and see the method getEjbName, but no method getName found. What am I missing ? Thanks
    -Tuan

  • Weblogic Deployment Descriptor for CMP EJB

    Hi all,
    Am new to EJB, CMP. Pls help me how to write deployment descriptors for the CMP EJB for Weblogic.
    Give me the list of the Deployment descriptors needed and also pls give me some samples
    thanks in advance
    rgds
    Ravi Bharathi

    The easiest way is to go through some tutorial or refer the code samples. If you have installed weblogic, there are examples provided in the weblogic installation folder itself for each type of bean. Basically for cmp you have to provide the table names and mapping between the class variables to db fields in weblogic_cmp_rdbms.xml deployment descriptor.

  • DTD Doctype for weblogic-ejb-jar.xml

    Hi,
    I have a small question about XML DOCTYPE DEFINITION used with XML descriptors.
    What should be the DOCTYPE HEADER for weblogic 6.0 sp2 & EJB 1.1?
    Currently, i'm using :
    <!DOCTYPE weblogic-ejb-jar PUBLIC '-//BEA Systems,
    Inc.//DTD WebLogic 5.1.0 EJB//EN''http://www.bea.com/servers/wls510/ dtd/weblogic-ejb-jar.dtd'>
    <!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans
    1.1//EN' 'http://java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd'>
    These are working fine. But my question is, why should we use DTDs of WLS5.1 even
    if we are using WL6.0?
    Note that we intend to use EJB1.1 specification.
    Regards,
    Amit

    There is a new 6.0 DTD for CMP 1.1 entity beans to take advantage of new
    features (such as 2pc). Search the CMP EJB newsgroup for a post from me
    about 1 or 2 months ago summarizing the topic.
    Otherwise the old DTDs seem to work just fine.
    Peace,
    Cameron Purdy
    Tangosol Inc.
    << Tangosol Server: How Weblogic applications are customized >>
    << Download now from http://www.tangosol.com/download.jsp >>
    "Amit Vaidya" <[email protected]> wrote in message
    news:[email protected]..
    >
    Hi,
    I have a small question about XML DOCTYPE DEFINITION used with XMLdescriptors.
    >
    What should be the DOCTYPE HEADER for weblogic 6.0 sp2 & EJB 1.1?
    Currently, i'm using :
    <!DOCTYPE weblogic-ejb-jar PUBLIC '-//BEA Systems,
    Inc.//DTD WebLogic 5.1.0 EJB//EN''http://www.bea.com/servers/wls510/
    dtd/weblogic-ejb-jar.dtd'>
    >
    <!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD EnterpriseJavaBeans
    1.1//EN' 'http://java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd'>
    These are working fine. But my question is, why should we use DTDs ofWLS5.1 even
    if we are using WL6.0?
    Note that we intend to use EJB1.1 specification.
    Regards,
    Amit

  • Additional field in join table for CMP EJB

    Hello,
    I'm trying to perform this task using CMP entity beans:
    The entity A has a CMR relation of cardinality m-n with entity B (bidirectional) (This is working fine).
    I want to add a parameter to the relation.
    Ex : When I find that A1 is linked to B1, I need to perform "x" times an action. x would be my parameter, and I would have kept this parameter as an additional column in the join table A_TO_B.
    Could anyone provide an example of how to perform this with CMP EJB?
    NOTE: I'm using OC4J 10g 9.0.4 standalone (and cannot change my version).
    Thanks
    Tanguy

    Manohar,
    You need to create an append structure for table VBAP (for example ZAVBAP) using SE11. In this structure you create your ZZ fields. If you need a non-SAP domain/data element for your field then you need to create it first using the same transaction and activate it. Attach ZAVBAP to VBAP so the SE11 shows:
    .APPEND in the Fields column and
    ZAVBAP in the Field type column.
    Your ZZ fields will be shown automatically.
    When you have finished then activate your ZAVBAP structure. You will notice when you go VA01 (for example) that a lot of programs are being recompiled. Don't worry. It will be ok.
    The user-exit screen number for items is 8459 (in program SAPMV45A).
    Thanks,
    Wojtek

  • Ejb-jar.xml中的EJB QL和weblogic-cmp-rdbms-jar.xml中的WLQL

    我想问一下,在ejb-jar.xml文件中用EJB QL查询语言定义了相应的EJB QL查询语句后,在weblogic-cmp-rdbms-jar.xml文件中还需不需要用wlql语言来定义相应的查询语句呀?

    在Weblogic6.0中,如果你需要利用EJB2.0的EJBQL语言所不提供的
    ORDERBY排序功能,那么这时候可以在weblogic-cmp-rdbms-jar.xml中用WLQL覆盖它,一般情况下,在ejb-jar.xml中声明一个EJBQL方法就可以了,WLQL可有可无。

  • Deployment plan fails for weblogic-ejb-jar.xml

    FILE FOR PLAN TO ACT ON:
    application.ear\ReferenceTableSession.jar\META-INF\weblogic-ejb-jar.xml
    <?xml version="1.0" encoding="utf-8"?>
    <weblogic-ejb-jar xmlns="http://www.bea.com/ns/weblogic/10.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.bea.com/ns/weblogic/10.0 http://www.bea.com/ns/weblogic/10.0/weblogic-ejb-jar.xsd">
    <weblogic-enterprise-bean>
    <ejb-name>referencetablesession</ejb-name>
    <stateless-session-descriptor>
    <pool>
    <max-beans-in-free-pool>100</max-beans-in-free-pool>
    <initial-beans-in-free-pool>0</initial-beans-in-free-pool>
    </pool>
    <stateless-clustering>
    <stateless-bean-is-clusterable>true</stateless-bean-is-clusterable>
    </stateless-clustering>
    </stateless-session-descriptor>
    <transaction-descriptor>
    <trans-timeout-seconds>150</trans-timeout-seconds>
    </transaction-descriptor>
    <enable-call-by-reference>true</enable-call-by-reference>
    <jndi-name>XYZ_ejb/ProviderMaintSvc/referencetablesession</jndi-name>
    </weblogic-enterprise-bean>
    <transaction-isolation>
    <isolation-level>TransactionReadCommitted</isolation-level>
    <method>
    <ejb-name>referencetablesession</ejb-name>
    <method-name>*</method-name>
    </method>
    </transaction-isolation>
    </weblogic-ejb-jar>
    DEPLOYMENT PLAN:
    <?xml version='1.0' encoding='utf-8'?>
    <deployment-plan xmlns="http://www.bea.com/ns/weblogic/deployment-plan"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.bea.com/ns/weblogic/deployment-plan http://www.bea.com/ns/weblogic/deployment-plan/1.0/deployment-plan.xsd">
    <application-name>application.ear</application-name>
    <variable-definition>
    <variable>
    <name>VAR_referencetablesession</name>
    <value>ejb/ProviderClaimOnlineSvc/referencetablesession</value>
    </variable>
    </variable-definition>
    <module-override>
    <module-name>ReferenceTableSession.jar</module-name>
    <module-type>ejb</module-type>
    <module-descriptor external="false">
    <root-element>weblogic-ejb-jar</root-element>
    <uri>META-INF/weblogic-ejb-jar.xml</uri>
    <variable-assignment>
    <name>VAR_referencetablesession</name>
         <xpath>/weblogic-ejb-jar/weblogic-enterprise-bean/\[ejb-name="referencetablesession"\]/jndi-name</xpath>
    <operation>replace</operation>
    </variable-assignment>
    </module-descriptor>
    </module-override>
    <config-root>servers/AdminServer/upload</config-root>
    </deployment-plan>
    ERROR FROM CONSOLE:
    Message icon - Error An error occurred during activation of changes, please see the log for details.
    Message icon - Error Exception preparing module: EJBModule(ReferenceTableSession.jar) [EJB:011023]An error occurred while reading the deployment descriptor. The error was: Unmarshaller failed.
    Message icon - Error Bean already exists: "[email protected]f2(/WeblogicEnterpriseBeans[referencetablesession])"
    ERROR FROM LOG:
    <Oct 2, 2009 1:08:25 PM CDT> <Error> <J2EE> <BEA-160197> <Unable to load descriptor servers/ms34/tmp/_WL_user/ProviderClaimOnlineSvc/y1anoa/ReferenceTableSession.jar/META-INF/weblogic-ejb-jar.xml of module ReferenceTableSession.jar. The error is weblogic.descriptor.DescriptorException: Unmarshaller failed
    at weblogic.descriptor.internal.MarshallerFactory$1.createDescriptor(MarshallerFactory.java:152)
    at weblogic.descriptor.BasicDescriptorManager.createDescriptor(BasicDescriptorManager.java:306)
    at weblogic.application.descriptor.AbstractDescriptorLoader2.getDescriptorBeanFromReader(AbstractDescriptorLoader2.java:788)
    at weblogic.application.descriptor.AbstractDescriptorLoader2.mergeDescriptorBeanWithPlan(AbstractDescriptorLoader2.java:703)
    at weblogic.application.descriptor.AbstractDescriptorLoader2.loadDescriptorBean(AbstractDescriptorLoader2.java:776)
    at weblogic.ejb.spi.EjbJarDescriptor.parseWeblogicEjbJarBean(EjbJarDescriptor.java:160)
    at weblogic.ejb.container.dd.xml.EjbDescriptorReaderImpl.processWLEjbJarXMLWithSchema(EjbDescriptorReaderImpl.java:719)
    at weblogic.ejb.container.dd.xml.EjbDescriptorReaderImpl.parseWLDD(EjbDescriptorReaderImpl.java:541)
    at weblogic.ejb.container.dd.xml.EjbDescriptorReaderImpl.processWeblogicEjbJarXML(EjbDescriptorReaderImpl.java:380)
    at weblogic.ejb.container.dd.xml.EjbDescriptorReaderImpl.createReadOnlyDescriptorFromJarFile(EjbDescriptorReaderImpl.java:191)
    at weblogic.ejb.spi.EjbDescriptorFactory.createReadOnlyDescriptorFromJarFile(EjbDescriptorFactory.java:93)
    at weblogic.ejb.container.deployer.EJBModule.loadEJBDescriptor(EJBModule.java:1198)
    at weblogic.ejb.container.deployer.EJBModule.prepare(EJBModule.java:380)
    at weblogic.application.internal.flow.ModuleListenerInvoker.prepare(ModuleListenerInvoker.java:93)
    at weblogic.application.internal.flow.DeploymentCallbackFlow$1.next(DeploymentCallbackFlow.java:387)
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:37)
    at weblogic.application.internal.flow.DeploymentCallbackFlow.prepare(DeploymentCallbackFlow.java:58)
    at weblogic.application.internal.flow.DeploymentCallbackFlow.prepare(DeploymentCallbackFlow.java:42)
    at weblogic.application.internal.BaseDeployment$1.next(BaseDeployment.java:615)
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:37)
    at weblogic.application.internal.BaseDeployment.prepare(BaseDeployment.java:191)
    at weblogic.application.internal.EarDeployment.prepare(EarDeployment.java:16)
    at weblogic.application.internal.DeploymentStateChecker.prepare(DeploymentStateChecker.java:155)
    at weblogic.deploy.internal.targetserver.AppContainerInvoker.prepare(AppContainerInvoker.java:60)
    at weblogic.deploy.internal.targetserver.operations.RedeployOperation.createAndPrepareContainer(RedeployOperation.java:98)
    at weblogic.deploy.internal.targetserver.operations.RedeployOperation.doPrepare(RedeployOperation.java:122)
    Thanks,
    Rob
    Edited by: user11337024 on Oct 5, 2009 2:31 PM

    FILE FOR PLAN TO ACT ON:
    application.ear\ReferenceTableSession.jar\META-INF\weblogic-ejb-jar.xml
    <?xml version="1.0" encoding="utf-8"?>
    <weblogic-ejb-jar xmlns="http://www.bea.com/ns/weblogic/10.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.bea.com/ns/weblogic/10.0 http://www.bea.com/ns/weblogic/10.0/weblogic-ejb-jar.xsd">
    <weblogic-enterprise-bean>
    <ejb-name>referencetablesession</ejb-name>
    <stateless-session-descriptor>
    <pool>
    <max-beans-in-free-pool>100</max-beans-in-free-pool>
    <initial-beans-in-free-pool>0</initial-beans-in-free-pool>
    </pool>
    <stateless-clustering>
    <stateless-bean-is-clusterable>true</stateless-bean-is-clusterable>
    </stateless-clustering>
    </stateless-session-descriptor>
    <transaction-descriptor>
    <trans-timeout-seconds>150</trans-timeout-seconds>
    </transaction-descriptor>
    <enable-call-by-reference>true</enable-call-by-reference>
    <jndi-name>XYZ_ejb/ProviderMaintSvc/referencetablesession</jndi-name>
    </weblogic-enterprise-bean>
    <transaction-isolation>
    <isolation-level>TransactionReadCommitted</isolation-level>
    <method>
    <ejb-name>referencetablesession</ejb-name>
    <method-name>*</method-name>
    </method>
    </transaction-isolation>
    </weblogic-ejb-jar>
    DEPLOYMENT PLAN:
    <?xml version='1.0' encoding='utf-8'?>
    <deployment-plan xmlns="http://www.bea.com/ns/weblogic/deployment-plan"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.bea.com/ns/weblogic/deployment-plan http://www.bea.com/ns/weblogic/deployment-plan/1.0/deployment-plan.xsd">
    <application-name>application.ear</application-name>
    <variable-definition>
    <variable>
    <name>VAR_referencetablesession</name>
    <value>ejb/ProviderClaimOnlineSvc/referencetablesession</value>
    </variable>
    </variable-definition>
    <module-override>
    <module-name>ReferenceTableSession.jar</module-name>
    <module-type>ejb</module-type>
    <module-descriptor external="false">
    <root-element>weblogic-ejb-jar</root-element>
    <uri>META-INF/weblogic-ejb-jar.xml</uri>
    <variable-assignment>
    <name>VAR_referencetablesession</name>
         <xpath>/weblogic-ejb-jar/weblogic-enterprise-bean/\[ejb-name="referencetablesession"\]/jndi-name</xpath>
    <operation>replace</operation>
    </variable-assignment>
    </module-descriptor>
    </module-override>
    <config-root>servers/AdminServer/upload</config-root>
    </deployment-plan>
    ERROR FROM CONSOLE:
    Message icon - Error An error occurred during activation of changes, please see the log for details.
    Message icon - Error Exception preparing module: EJBModule(ReferenceTableSession.jar) [EJB:011023]An error occurred while reading the deployment descriptor. The error was: Unmarshaller failed.
    Message icon - Error Bean already exists: "[email protected]f2(/WeblogicEnterpriseBeans[referencetablesession])"
    ERROR FROM LOG:
    <Oct 2, 2009 1:08:25 PM CDT> <Error> <J2EE> <BEA-160197> <Unable to load descriptor servers/ms34/tmp/_WL_user/ProviderClaimOnlineSvc/y1anoa/ReferenceTableSession.jar/META-INF/weblogic-ejb-jar.xml of module ReferenceTableSession.jar. The error is weblogic.descriptor.DescriptorException: Unmarshaller failed
    at weblogic.descriptor.internal.MarshallerFactory$1.createDescriptor(MarshallerFactory.java:152)
    at weblogic.descriptor.BasicDescriptorManager.createDescriptor(BasicDescriptorManager.java:306)
    at weblogic.application.descriptor.AbstractDescriptorLoader2.getDescriptorBeanFromReader(AbstractDescriptorLoader2.java:788)
    at weblogic.application.descriptor.AbstractDescriptorLoader2.mergeDescriptorBeanWithPlan(AbstractDescriptorLoader2.java:703)
    at weblogic.application.descriptor.AbstractDescriptorLoader2.loadDescriptorBean(AbstractDescriptorLoader2.java:776)
    at weblogic.ejb.spi.EjbJarDescriptor.parseWeblogicEjbJarBean(EjbJarDescriptor.java:160)
    at weblogic.ejb.container.dd.xml.EjbDescriptorReaderImpl.processWLEjbJarXMLWithSchema(EjbDescriptorReaderImpl.java:719)
    at weblogic.ejb.container.dd.xml.EjbDescriptorReaderImpl.parseWLDD(EjbDescriptorReaderImpl.java:541)
    at weblogic.ejb.container.dd.xml.EjbDescriptorReaderImpl.processWeblogicEjbJarXML(EjbDescriptorReaderImpl.java:380)
    at weblogic.ejb.container.dd.xml.EjbDescriptorReaderImpl.createReadOnlyDescriptorFromJarFile(EjbDescriptorReaderImpl.java:191)
    at weblogic.ejb.spi.EjbDescriptorFactory.createReadOnlyDescriptorFromJarFile(EjbDescriptorFactory.java:93)
    at weblogic.ejb.container.deployer.EJBModule.loadEJBDescriptor(EJBModule.java:1198)
    at weblogic.ejb.container.deployer.EJBModule.prepare(EJBModule.java:380)
    at weblogic.application.internal.flow.ModuleListenerInvoker.prepare(ModuleListenerInvoker.java:93)
    at weblogic.application.internal.flow.DeploymentCallbackFlow$1.next(DeploymentCallbackFlow.java:387)
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:37)
    at weblogic.application.internal.flow.DeploymentCallbackFlow.prepare(DeploymentCallbackFlow.java:58)
    at weblogic.application.internal.flow.DeploymentCallbackFlow.prepare(DeploymentCallbackFlow.java:42)
    at weblogic.application.internal.BaseDeployment$1.next(BaseDeployment.java:615)
    at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:37)
    at weblogic.application.internal.BaseDeployment.prepare(BaseDeployment.java:191)
    at weblogic.application.internal.EarDeployment.prepare(EarDeployment.java:16)
    at weblogic.application.internal.DeploymentStateChecker.prepare(DeploymentStateChecker.java:155)
    at weblogic.deploy.internal.targetserver.AppContainerInvoker.prepare(AppContainerInvoker.java:60)
    at weblogic.deploy.internal.targetserver.operations.RedeployOperation.createAndPrepareContainer(RedeployOperation.java:98)
    at weblogic.deploy.internal.targetserver.operations.RedeployOperation.doPrepare(RedeployOperation.java:122)
    Thanks,
    Rob
    Edited by: user11337024 on Oct 5, 2009 2:31 PM

  • OSB: EJB Transport Configuration - Workshop for Weblogic 10.3

    Hi
    I'm using the latest Workshop for Weblogic 10.3. to test the EJB Transport Typed Service for Oracle Service Bus 10R3.
    When I importing the EJB client jar on the EJB Transport tab of the business service configuration, the import itself first seems to work fine.
    But when I try to save the business service, I get an error on that page, which says "Error in field content". There is also a message appearing on the top of the wizard, which is only partly readable and says
    BUILD FAILED
    java.lang.NoClassDefFoundError: javax/tools/Diagnostic
    I'm trying the sample in chapter 8 from the Apress book "The definitive guide to SOA - Oracle Service Bus" and can't see what I have done wrong.
    Anyone can help?
    Thanks
    Guido
    Edited by: gschmutz on Feb 4, 2009 11:33 AM

    Make sure your JAVA_HOME is set to JRockit JDK - for details see CR374557 on [http://download.oracle.com/docs/cd/E13159_01/osb/docs10gr3/relnotes/relnotes.html]:
    ClassNotFoundExceptions on Linux when configuring a client jar for an EJB business service.
    On a Linux system, if you do not specify the path to the correct version of Java correctly, you may experience ClassNotFoundException when configuring a client JAR for an EJB business service.
    Workaround: The correct Java version is 1.6.0_05.
    To check the version of Java you are using, execute java -version from a shell. If you are using some other version, you must update the PATH environment variable to point to the location of a 1.6.0_05 version of Java. Be sure to place this location before the location of the incorrect java. For example:
    export PATH=/home/user/bea/jrockit_160_05/bin:$PATH
    After making this fix, you may experience error: Generate: Error during generation of the WSDL. If so, you must update the JAVA_HOME environment variable to point to same version of Java as above. For example:
    export JAVA_HOME=/home/user/bea/jrockit_160_05
    Cheers
    Dani

  • Programmatic JAAS Authentication for Web/EJBs on WebLogic 12c

    Technologies: JSPs, Servlets, EJBs (version 2.1)
    Database: Oracle 11g Database
    Application Server: WebLogic 12c
    I am working on a project where the users and roles are stored on an Oracle database (as database users with roles granted to them). We therefore need a custom authentication method (the default WebLogic UsernamePasswordLoginModule won't cut it). We created a DatabaseUserLoginModule prior to migrating from a 10g enviroment to 11g/12c.
    public class DatabaseUserLoginModule implements LoginModule
         public boolean login() throws LoginException
              Connection conn = null;
              try
                   s
                   InitialContext ic = new InitialContext();
                   DataSource ds = (DataSource)ic.lookup(jndiDSName);
                   conn = ds.getConnection(username, password);
                   List dbauth = new ArrayList();
                   String rolesSQL = "SELECT GRANTED_ROLE FROM USER_ROLE_PRIVS UNION SELECT GRANTED_ROLE FROM ROLE_ROLE_PRIVS";
                   Statement rolesStmt = conn.createStatement();
                   ResultSet results = rolesStmt.executeQuery(rolesSQL);
                   dbauth.add(new DBUserPrincipal(username));
                   while (results.next())
                        String roleName = results.getString("GRANTED_ROLE");
                        DBRolePrincipal dbRolePrincipal = new DBRolePrincipal(roleName);
                        dbauth.add(dbRolePrincipal);
                   authPrincipals = (Principal[])dbauth.toArray(new Principal[dbauth.size()]);
              catch (Exception e)
                   throw new LoginExcpetion(e.getMessage());
              finally
                   try
                        conn.close();
                   catch (Exception e)
                        throw new LoginExcpetion(e.getMessage());
              return true;
         public boolean commit() throws LoginException
              for (int i = 0; i < authPrincipals.length; i++)
                   subject.getPrincipals().add(authPrincipals[i]);
              return true;
    The getConnection() method on the datasource works with a database username and password thanks to the new "Use Database Credentials" option for WebLogic datasources and granting CONNECT THROUGH (datasource user) privilege for each user.
    We have configured a JAAS context to use this login module by creating a jaas.conf file and setting JAVA_OPTIONS to include "-Djava.security.auth.login.config=%DOMAIN_HOME%\bin\jaas.conf". The file looks like this:
    Test {
    xxxx.controller.security.loginmodule.DatabaseUserLoginModule required;
    When the user logs in, the application uses a LoginContext object to perform authentication:
        PassiveCallbackHandler cbh = new PassiveCallbackHandler(username, password);
        lc = new LoginContext("Test", cbh);
        lc.login();
    This successfully uses the DatabaseUserLoginModule to authenticate the user and populate the Subject with the appropriate roles.
    The next step is to use an InitialContext to lookup an EJB and call a method. We have permissions in ejb-jar.xml for each method, based on database roles:
    <method-permission>
         <role-name>XXXX_USER</role-name>
         <method>
              <ejb-name>AccessControl</ejb-name>
              <method-intf>Home</method-intf>
             <method-name>create</method-name>
             <method-params>
                   <method-param>java.lang.String</method-param>
             </method-params>
         </method>
         <method>
             <ejb-name>AccessControl</ejb-name>
             <method-intf>Remote</method-intf>
             <method-name>remove</method-name>
         </method>
         <method>
             <ejb-name>AccessControl</ejb-name>
             <method-intf>Remote</method-intf>
             <method-name>processFailedLogin</method-name>
             <method-params>
                   <method-param>java.lang.String</method-param>
             </method-params>
         </method>
         <method>
             <ejb-name>AccessControl</ejb-name>
             <method-intf>Remote</method-intf>
             <method-name>processSuccessfulLogin</method-name>
             <method-params>
                   <method-param>java.lang.String</method-param>
             </method-params>
         </method>
    </method-permission>
    Hashtable env = new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
    env.put(Context.PROVIDER_URL, "t3://localhost:7101");
    env.put(Context.SECURITY_PRINCIPAL, username);
    env.put(Context.SECURITY_CREDENTIALS, password);
    InitialContext ic = new InitialContext(env);
    ic.lookup("EJBName");
    The problem is that when the InitialContext is initialised I get the following error:
    javax.naming.AuthenticationException [Root exception is javax.security.auth.login.FailedLoginException: [Security:090304]Authentication Failed: User XXXX_USER] javax.security.auth.login.FailedLoginException: [Security:090302]Authentication Failed: User XXXX_USER denied]
    It looks like the InitialContext is attempting to authenticate the user through WebLogic's default authenticator. How do I tell it to use the JAAS context (with the custom login module) I have already set up?
    If I use the default constructor (new InitialContext()) then I get a different error when calling an EJB method:
    <java.rmi.AccessException: [EJB:010160]Security violation: User <anonymous> has insufficient permission to access EJB type=<ejb>, application=TestApplication, module=TestEJB.jar, ejb=AccessControl, method=processSuccessfulLogin, methodInterface=Remote, signature={java.lang.String}.>
    In this case, how do I propagate the Subject after using LoginContext so that the user calling EJB methods is not anonymous?

    This is the JDev & ADF forum. Your question is better asked in one of the WebLogic forums!
    Timo

  • JSP and CMP EJB 2.0

              Hi there,
              I having a problem every time I try to EJBHome.create( ...) a new
              CMP EJB 2.0 via a JavaBean
              called from an JSP or directly from the JSP.
              However, I successfully can retrieved EJBHome.findByPrimaryKey("myKey")
              from both the
              JavaBean and JSP.
              Could you help me figure out why .create does not work ?
              Here is the exceptions chain :
              weblogic.utils.AssertionError: *****
              ASSERTION FAILED *****[ Unexpected IOException
              marshalling on server-side ] at
              weblogic.rmi.internal.OutboundServerResponse.sendThrowable(OutboundServerResponse.java:63)
              at weblogic.rmi.internal.BasicServerAdapter.handleThrowable(BasicServerAdapter.java:477)
              at
              weblogic.rmi.internal.BasicServerAdapter.postInvoke(BasicServerAdapter.java:449)
              at
              weblogic.rmi.internal.BasicRequestHandler.handleRequest(BasicRequestHandler.java:122)
              at
              weblogic.rmi.internal.BasicRequestDispatcher.dispatch(BasicRequestDispatcher.java:115)
              at
              weblogic.rmi.internal.ServerRequest.sendOneWayRaw(ServerRequest.java:88)
              at
              weblogic.rmi.internal.ServerRequest.sendReceive(ServerRequest.java:108)
              at
              weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:247)
              at
              weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:225)
              < ... my
              source file specified here ...>
              at jsp_servlet._jsp._user._results._jspService(_results.java:182)
              at
              weblogic.servlet.jsp.JspBase.service(JspBase.java:27)
              at
              weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:213)
              at
              weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:246)
              at
              weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:1265)
              at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:1622)
              at
              weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:137)
              at
              weblogic.kernel.ExecuteThread.run(ExecuteThread.java:120)
              <Mar 22, 2001 5:50:03 PM JST>
              <Error> <AdapterDispatcher> <Error
              in Dispatcher
              Thank you, rivisa
              

    Sorry but I have forgotten to precise that I have also developped a EJB CMP 1.1 where the bean class is not abstract and I have the same error when the JSP page calls this EJB
    (for the EJB CMP 2.0 the bean class is declared abstract)

  • Help In Ejb with Weblogic Builder

    I am Trying to create an Deployment Descriptor for CMP bean using WebLogic Builder8.1.
    I have created class files in Demo Folder for
         Remote Interface.
         Home Interface.
         Bean.
    and Stored in a Directory.
         I open i WebLogicBuilder
              File>>>Open>>Folder containing Class files
                   >>Open
         It ask Would u like new Deployment Descriptor Created for you
              >>Click Yes
    Immediately i get the following Message :
    Search for EJB components in C:\Documents and Settings\prasanth\Desktop\Dump
    No EJBs found in C:\Documents and Settings\prasanth\Desktop\Dump
    Search for Web components in C:\Documents and Settings\prasanth\Desktop\Dump
    searching for possible EAR modules
    [DDInitModUpdateUI]: asking ddinit question
    Please Help Me out..
    Thnaks in Advance

    Please refer to :
    http://www.oracle.com/technology/obe/obe1013jdev/index.htm
    And
    http://www.oracle.com/technology/obe/obe9051jdev/index.htm
    These are the best Audio/Video/Image Tutorials ever i have seen for Jdeveloper. U will definately like it.
    Learn, Enjoy and Share.... ;)
    Thanks
    Jay SenSharma
    http://weblogic-wonders.com/weblogic (WebLogic Wonders Are here)

  • Building EAR for WebLogic 8.1 with Eclipse plugin

    I am developing an EJB app for deployment in WebLogic, JBoss and Sun ONE. I use plugins for JBoss and Sun ONE, with the help of XDoclet, and have no problem creating the required XML and JAR files. However, the WebLogic Workshop creates many files, like oztplsEOImpl.java, oztp1sHomeImpl.java, Hello_oztp1s_EOImplRTD.xml and many others, while the Eclipse plugin only creates the Home and Remote interface .java files, and the prerequisite .xml files (ejb-jar.xml, weblogic-ejb-jar.xml, and weblogic-cmp-rdbms-jar.xml).
    Why is that? And how can I build/package the EAR file from within Eclipse, without using WebLogic tools? I am trying to maintain a single codebase, with multiple XDoclet tags to create the appropriate interfaces and XML files. So far, I could achieve this for JBoss and Sun ONE, but it seems to be impossible for WebLogic.
    Thanks for any enlightenment.
    Alex Molochnikov

    It is quite easy to rewrite the plugin to work with 8.1
    We have done so - please contact me if you want the plugin.
    Sincerely,
    Paul Nyheim
    "HOs" <[email protected]> wrote in message
    news:3f72ce93$[email protected]..
    >
    Hi,
    how can I debug my weblogic 8.1 application ?
    I`m using eclipse, but the plugin I´ve got, is only for versions 6.x and7.0 .
    So I tried remote debugging but eclipse could not connect to the VM, I donot
    know why.
    Any ideas ??
    Thanks
    Holger

  • How to create Entity Bean (CMP) using JDeveloper & Weblogic

    Hi,
    Using : JDeveloper9i (9.0.2.829)
    When i am inside the EJB Wizard (Step 1 of 3), the input field 'CMP Provider' shows only Oracle9iAS CMP Provider.
    How should i make my entity take 'Weblogic' as CMP provider for my beans using JDeveloper. I have my tables in Oracle personal db. I was able to succesfuly add a Weblogic/Db connection under respective connections node.
    Should i need to do something more so that i am given an option of choosing Weblogic as CMP provider.
    thanks for the advance help
    regds
    srikanth

    Currently there is no specific option for WebLogic CMP provider.
    You need to manually add the WebLogic CMP deployment descriptor to the project containing
    EJB Entity beans and deploy to WebLogic.
    raghu
    JDev Team

  • EJB for complex query

    Hi,
    I'm new in Enterprise javabeans, I have been looking for (almost five days) the
    best way to get the result for a complex query. I tried with example Weblogic
    BeanManaged. I put the query directly in a method in entityBean class with prepareStatament
    and that worked.
    But, I have to evaluate the best way to get result with EJB's. So, I think that
    I have to evaluate others like containerManaged, in this case I have to define
    each entity Bean and relationships and everything, isn't it?
    Is there another way to develop it with good results? and fast?
    If someone have any good idea to develop a solution with EJB's for this query.
    I'm really appreciate it.
    select CU.ID_CUENTA_USO, C.CLASE_CUENTA, C.ESTADO, P.ID_PRODUCTO, P.NOMBRE_PRODUCTO,
    CU.ID_TIPO_PAGO, AOA.ID_AREA, AOA.NOMBRE_AREA, AOA.ID_TIPO_AOA, CU.ID_CLIENTE_USUARIO,
    decode (PN.ID_PERSONA,null, decode (PJ.ID_PERSONA,null, PR.APELLIDOS || ' ' ||PR.NOMBRES,
    PJ.NOMBRE_EMPRESA),PN.APELLIDOS || ' ' ||PN.NOMBRES)
    from ATRIBUTOS A, CUENTA_USO CU, CUENTA C, PRODUCTO P,
    AREA_OPERACIONES_ADM AOA, PERSONA_NATURAL PN, PERSONA_JURIDICA PJ, PERSONA_REPRESENTADO
    PR
    where A.ABREVT_ATRIB_CTA_USO = 'NRO_CELULAR'
    and A.VALOR = '142000000'
    and CU.ID_CUENTA_USO = A.ID_CUENTA_USO
    and C.ID_CUENTA = CU.ID_CUENTA_USO
    and P.ID_PRODUCTO = CU.ID_PRODUCTO
    and AOA.ID_AREA(+) = CU. ID_AREA_ACTIVACION
    and AOA.ID_TIPO_AOA(+) = CU.ID_TIPO_AREA_ACTIVACION
    and PN.ID_PERSONA(+) = CU.ID_CLIENTE_USUARIO
    and PJ.ID_PERSONA(+) = CU.ID_CLIENTE_USUARIO
    and PR.ID_PERSONA(+) = CU.ID_CLIENTE_USUARIO
    order
    by P.ID_PRODUCTO, CU.ID_CUENTA_USO;
    Thank's in advanced
    Yose

    Hola/Hello Ryan
    Muchas Gracias por tu respuesta/ Thank's a lot for your answer, I'm trying with
    relationship-caching but something is missing.. because i got an error:
    ejbc:
    [java] [EJBCompiler] : Recompiling because no previous hashes found
    [java] [EJBCompiler] : Compliance Checker said bean was compliant
    [java]
    [java]
    [java]
    [java] ERROR: Error from ejbc: While reading META-INF/weblogic-cmp-rdbms-jar.xml,
    the Entity EJB's peristence layer failed to deploy. The error was:
    [java] Error in descriptor line 44: Element type "relationship-caching"
    must be declared.
    [java]
    [java]
    [java] ERROR: ejbc found errors
    I have two EJB Cuenta and Atributo I defined a relationship in the weblogic-cmp-rdbms-jar.
    (I want to start with two entity and add later the others producto, cuenta, persona_x)
    <relationship-caching>
         <caching-name>Cuenta-Atributo</caching-name>
         <caching-element>
              <cmr-field>cuenta</cmr-field>
              <group-name>cuentas_group</group-name>
              <caching-element>
                   <cmr-field>atributos</cmr-field>
                   <group-name>atrib_group</group-name>
              </caching-element>
         </caching-element>
    </relationship-caching>
    Where i have to defined it? Thanks a lot for your help..
    Yosemarlyn
    "Ryan LeCompte" <[email protected]> wrote:
    >
    Hola/Hello Yosemarlyn,
    You can utilize EJB 2.0 CMP to model the query that you specified. You
    would model
    the business domain as CMP Entity beans and then specify the various
    relationships
    among them. You actually may get an increase in performance by utilizing
    CMP/CMR
    in WebLogic due to the new features such as relationship caching, optimistic
    concurrency
    strategy support, etc. Utilizing these features will drastically reduce
    the number
    of SQL Joins (and overall hits to the database, due to caching). Below
    are various
    links for learning more:
    Mastering EJB II (Good book for learning about CMP/CMR):
    http://www.theserverside.com/books/masteringEJB/index.jsp
    Optimistic Concurrency:
    http://dev2dev.bea.com/resourcelibrary/technicalguides/Optimistic_Concurrency.jsp
    http://edocs.bea.com/wls/docs70/ejb/EJB_environment.html#1153757
    Relationship caching:
    http://edocs.bea.com/wls/docs70/ejb/EJB_environment.html#1151177
    Espero que esto te sirva bien. :-)
    Saludos,
    Ryan LeCompte
    [email protected]
    http://www.louisiana.edu/~rml7669
    "Yosemarlyn Lopez" <[email protected]> wrote:
    Hi,
    I'm new in Enterprise javabeans, I have been looking for (almost five
    days) the
    best way to get the result for a complex query. I tried with example
    Weblogic
    BeanManaged. I put the query directly in a method in entityBean class
    with prepareStatament
    and that worked.
    But, I have to evaluate the best way to get result with EJB's. So, I
    think that
    I have to evaluate others like containerManaged, in this case I have
    to define
    each entity Bean and relationships and everything, isn't it?
    Is there another way to develop it with good results? and fast?
    If someone have any good idea to develop a solution with EJB's for this
    query.
    I'm really appreciate it.
    select CU.ID_CUENTA_USO, C.CLASE_CUENTA, C.ESTADO, P.ID_PRODUCTO, P.NOMBRE_PRODUCTO,
    CU.ID_TIPO_PAGO, AOA.ID_AREA, AOA.NOMBRE_AREA, AOA.ID_TIPO_AOA, CU.ID_CLIENTE_USUARIO,
    decode (PN.ID_PERSONA,null, decode (PJ.ID_PERSONA,null, PR.APELLIDOS
    || ' ' ||PR.NOMBRES,
    PJ.NOMBRE_EMPRESA),PN.APELLIDOS || ' ' ||PN.NOMBRES)
    from ATRIBUTOS A, CUENTA_USO CU, CUENTA C, PRODUCTO P,
    AREA_OPERACIONES_ADM AOA, PERSONA_NATURAL PN, PERSONA_JURIDICA PJ, PERSONA_REPRESENTADO
    PR
    where A.ABREVT_ATRIB_CTA_USO = 'NRO_CELULAR'
    and A.VALOR = '142000000'
    and CU.ID_CUENTA_USO = A.ID_CUENTA_USO
    and C.ID_CUENTA = CU.ID_CUENTA_USO
    and P.ID_PRODUCTO = CU.ID_PRODUCTO
    and AOA.ID_AREA(+) = CU. ID_AREA_ACTIVACION
    and AOA.ID_TIPO_AOA(+) = CU.ID_TIPO_AREA_ACTIVACION
    and PN.ID_PERSONA(+) = CU.ID_CLIENTE_USUARIO
    and PJ.ID_PERSONA(+) = CU.ID_CLIENTE_USUARIO
    and PR.ID_PERSONA(+) = CU.ID_CLIENTE_USUARIO
    order
    by P.ID_PRODUCTO, CU.ID_CUENTA_USO;
    Thank's in advanced
    Yose
    [weblogic-cmp-rdbms-jar.xml]

  • How to hot deploy EJB in Weblogic?

    Hi all,
    We use Weblogic 10.3 and EJB3.
    EJB has been build as ear and deployed in the server. And other deployed modules in server calls that.
    But the modification of EJB need to be rebuilt and restart the server.
    Does Weblogic support hot deploy for EJB? Do we need plugin or something else for this feature?
    Thanks a lot.

    Hi,
    The production redeployment strategy/hot deployment is supported for:
    a. Standalone Web Application (WAR) modules and Enterprise applications (EARs) whose clients access the application via a Web application (HTTP).
    b. Enterprise applications that are accessed by inbound JMS messages from a global JMS destination, or from inbound JCA requests.
    c. All types of Web Services, including conversational and reliable Web Services, but not 8.x Web Services.
    Production redeployment is not supported for:
    a. Standalone EJB or RAR modules. If you attempt to use production redeployment with such modules, WebLogic Server rejects the redeployment request. To redeploy such modules, remove their version identifiers and explicitly redeploy the modules.
    b. Applications that use JTS drivers. For more information on JDBC application module limitations, see JDBC Application Module Limitations in Configuring and Managing JDBC for Oracle WebLogic Server.
    c. Applications that obtain JDBC data sources via the DriverManager API; in order to use production redeployment, an application must instead use JNDI to look up data sources.
    d. Applications that include EJB 1.1 container-managed persistence (CMP) EJBs. To use production redeployment with applications that include CMP EJBs, use EJB 2.x CMP instead of EJB 1.1 CMP.
    Please check the below Doc
    http://docs.oracle.com/cd/E14571_01/web.1111/e13702/redeploy.htm#
    Hope this answers your question!!
    Thanks,
    Vijaya

Maybe you are looking for

  • Quick system at a glance report - how.

    The nature of this question revolves around the "Performance" report in "Microsoft Generic Report Library" Scenario: A manager comes by my desk and says "Hey, can you tell me what the drive space has been like on server {x} for the past month?". I go

  • Setting sort priority to 90.0 by default instead of standard 100.0

    Hai, I have requirement in which i have to upload some 100 roles from SAP R/3.  When these 100 roles are imported, it will have sort priority 100.00. I have created a another Iview, that also has sort priority as 100.0 by default. When I assign few o

  • ITunes won't let me drag and drop files onto my iPod.

    i recently had my mac repaired and the hard drive was set back to its original settings. I had my itunes music that i had purchased restored and i have begun to download new songs to add to my ipod. itunes will not allow me drag new songs onto my ipo

  • Satellite Pro M50 (PSM55E-001001EN) - Some keys are not work

    Hi all Ive got a problem with my keyboard on the above model. I originally thought it was just the keyboard so I bought another one and installed it and this one is doing the same. Problem:- r button and y button not working originally new keyboard n

  • Problem with mdworker process, mac slowdowns

    Hello. I have been having slowdowns of my mac without a reason. The problem that seems to be responsible is mdworker, as in the console about the only messages i get are phrased like this: "07/12/14 16:26:06,000 kernel[0]: Sandbox: mdworker(20160) de